重写WooCommerce产品URL

时间:2019-06-07 作者:SeanAUS120

我正在尝试重新编写我的WooCommerce产品URL,以便在最后有帖子ID,如下所示:

/产品/产品名称-post-id/

我使用了此线程中的代码How to rewrite URI of custom post type? 这是可行的,但我们有/product/post id product name/。

add_filter(\'post_type_link\', \'wpse33551_post_type_link\', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == \'product\' ){
        return home_url( \'product/\' . $post->post_name . \'-\' . $post->ID );
    } else {
        return $link;
    }
}

add_action( \'init\', \'wpse33551_rewrites_init\' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        \'product/([0-9]+)?$\',
        \'index.php?post_type=product&p=$matches[1]\',
        \'top\' );
}
我不知道如何在这里的第二个函数中使用重写规则来获得最后的帖子ID?

1 个回复
SO网友:And Finally

这应该可以:

add_action( \'init\', \'wpse33551_rewrites_init\' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        \'product/.+\\-([0-9]+)?$\',
        \'index.php?post_type=product&p=$matches[1]\',
        \'top\' );
}

filter函数正在将permalink更改为likeproduct/my-product-name-88. 只需在第二个函数中调整regex即可处理该模式。

正则表达式是:

product/ – 匹配文本字符串product/

.+ – 匹配一个或多个其他字符

\\- – 匹配连字符(反斜杠将其转义,因此正则表达式引擎不会认为它是特殊的正则表达式运算符,如下一位所示)

([0-9]+)?$ – 匹配并捕获URL末尾的一个或多个数字

@gregory 表示,进行此更改后,您需要单击永久链接页面上的保存按钮wp-admin/options-permalink.php 刷新重写缓存。

相关推荐