我遇到了这篇文章中描述的相同问题: [WordPress URL rewrite for WooCommerce attributes,除了我需要按类别过滤属性。 不幸的是,我无法在达到更高声誉之前发表评论,所以我正在创建一个新问题。
我定义了制造商属性,如果我想浏览某个制造商的所有产品,我可以使用像www.example.com/shop/?filter_manufacturer=230这样的网址,其中230是属性ID。 我尝试添加一个端点,就像上面链接的帖子中提到的那样,但我不能让重写工作;例如,如果我尝试打开www.example.com/shop/manufacturer/manufacturer_name,我会收到404错误。
我不清楚我是否应该在Wordpress的永久链接设置中更改任何内容,如果是,则如何更改。 每次编辑后,我总是刷新重写规则,BTW。
答案 0 :(得分:1)
您关于WooCommerce属性的问题与链接答案之间缺少的链接是,产品属性仅仅是在其名称后附加“pa_”的分类法。
在您的情况下,分类法称为“pa_manufacturer”。默认情况下,WooCommerce将这些设置为不附加查询var。
因此,当WooCommerce注册该特定分类时,我们将代替过滤query_vars
。我还修改了删除匿名函数。
在我的示例中,我使用的是“颜色”,因此请调整为“制造商”。然后,我可以转到http://example.com/shop/color/black
的网址,查看所有黑色产品。请注意,这不会为您提供一个术语存档,其中/shop/color
将列出所有颜色。这是一个不同的问题和更多的工作。
我没有测试激活部分,因此如果你在激活后获得404s,你可以删除整个激活功能,只需转到设置>永久链接并再次保存永久链接。
/**
* Plugin Name: Add an WooCommerce attribute endpoint to the URLs
* Plugin URI: http://stackoverflow.com/q/28460538/383847
* Credit to: http://stackoverflow.com/a/24331768/1287812
*/
function so_28460538_add_rewrite_endpoint(){
add_rewrite_endpoint( 'color', EP_ALL );
}
add_action( 'init', 'so_28460538_add_rewrite_endpoint' );
function so_28460538_attribute_args( $args ){
$args['query_var'] = 'color';
return $args;
}
add_filter( 'woocommerce_taxonomy_args_pa_color', 'so_28460538_attribute_args' );
/**
* Refresh permalinks on plugin activation
* Source: http://wordpress.stackexchange.com/a/108517/12615
*/
function WCM_Setup_Demo_on_activation(){
if ( ! current_user_can( 'activate_plugins' ) )
return;
$plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
check_admin_referer( "activate-plugin_{$plugin}" );
add_rewrite_endpoint( 'color', EP_ALL ); #source: http://wordpress.stackexchange.com/a/118694/12615
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'WCM_Setup_Demo_on_activation' );
添加我的设置的一些屏幕截图,以防它有助于确定您获得404s的原因:
以下是我的永久链接设置:
以下是用于确定产品存档页面的WooCommerce设置:
最后,这是visting的结果:
http://local.wordpress.dev/shop/color/black/
其中shop
是上面设置的产品归档页面的非常永久链接。所有项目都有“黑色”颜色属性。
答案 1 :(得分:0)
我遇到了类似的问题,并能够像这样解决它:
function add_model_taxonomy_args($args) {
$args['query_var'] = 'filter_model';
return $args;
}
add_filter('woocommerce_taxonomy_args_pa_model', 'add_model_taxonomy_args' );
function custom_rewrite_rules() {
add_rewrite_tag('%filter_model%', '([a-zA-Z0-9-]+)');
add_rewrite_rule('^c/phone-cases/(.+?)/?$', 'index.php?product_cat=phone-cases&filter_model=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rules', 10, 2);
示例网址:c /手机壳/ iphone-8-plus /
结果重写:index.php?product_cat = phone-cases&filter_model = iphone-8-plus