WooCommerce Url重写

时间:2015-02-11 17:23:00

标签: wordpress url-rewriting seo woocommerce

我遇到了这篇文章中描述的相同问题: [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。

2 个答案:

答案 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的原因:

以下是我的永久链接设置:

permalink settings

以下是用于确定产品存档页面的WooCommerce设置:

WC shop settings

最后,这是visting的结果: http://local.wordpress.dev/shop/color/black/

其中shop是上面设置的产品归档页面的非常永久链接。所有项目都有“黑色”颜色属性。

front-end result

答案 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