WordPress自定义帖子类型固定链接:website.com/post-name/post-id

时间:2018-06-04 作者:Alexander Pauwelyn

我正试图在wordpress中为我的自定义帖子类型构建一个自定义永久链接artikelen (精确的slug)。我在网上找到了代码,它似乎在用自定义结构转换链接%postname%/%postid%, 但当我保存永久链接并转到详细信息页面时,我得到了一个404错误。

我张贴我的代码来演示我的工作方式。

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

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == \'artikelen\' ){
        return home_url( $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=artikelen&p=$matches[1]\',
        \'top\' );
}

1 个回复
最合适的回答,由SO网友:kero 整理而成

product/([0-9]+)?$
translates to product/ 后跟任意数字或无任何内容(仅此而已,甚至连尾部斜杠都没有)。这听起来不像你想要实现的目标。

相反,请尝试以下操作

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        \'^([^/]+)/([0-9]+)/?$\',
        \'index.php?post_type=artikelen&p=$matches[2]\',
        \'top\'
    );
}
其中translates to:

  • ^ 字符串开头(即前面没有其他内容)([^/]+): 至少有一个字符不是/
  • /: 斜杠([0-9]+): 至少一个数字/?: 零或一(尾随)斜杠$: 字符串结尾

结束