自定义帖子类型的自定义固定链接结构结果为404

时间:2014-06-08 作者:user319940

我在网上找到了一些为自定义帖子类型创建自定义永久链接的代码:

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

    function wpse33551_post_type_link( $link, $post = 0 ){
        $timestamp = $post->post_date;
        $timestamp = preg_replace("/[^A-Za-z0-9]/", "", $timestamp);
        if ( $post->post_type == \'recipe\' ){
            return home_url( \'recipe/\' . $timestamp );
        } else {
            return $link;
        }
    }

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

    function wpse33551_rewrites_init(){
        add_rewrite_rule(
            \'recipe/([0-9]+)?$\',
            \'index.php?post_type=recipe&p=$matches[1]\',
            \'top\' );
    }
在wordpress admin中,会显示正确的url,但单击preview post按钮后,会返回404。我试过刷新重写规则,但没用。

有什么想法吗?

1 个回复
SO网友:engelen

您发布的代码的问题是,您正在使用时间戳创建永久链接,并在中使用它add_rewrite_rule 就好像时间戳是配方的post ID一样。这个p-中的参数index.php?post_type=recipe&p=$matches[1] 用于传递帖子ID。因此,WordPress将开始寻找ID为“20140609070153”的帖子。

现在我不知道为什么你会想要这样一个永久链接,但是为了保持一个实际工作的类似永久链接结构,你可以将ID添加到永久链接结构中,例如创建永久链接http://example.com/recipe/21-20140609070153, 也通过了post ID(21)。

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

function wpse33551_post_type_link( $link, $post = 0 ) {
    $timestamp = $post->post_date;
    $timestamp = preg_replace("/[^A-Za-z0-9]/", "", $timestamp);

    if ( $post->post_type == \'recipe\' ) {
        return home_url( \'recipe/\' . $post->ID . \'-\' . $timestamp );
    }
    else {
        return $link;
    }
}

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

function wpse33551_rewrites_init() {
    add_rewrite_rule(
        \'recipe/([0-9]+)\\-([0-9]+)?$\',
        \'index.php?post_type=recipe&p=$matches[1]\',
        \'top\'
    );
}
此解决方案的一个问题是,它会为附加的任何时间戳生成有效页面。

总结:我将转到另一个permalink结构,实际上唯一地标识一篇文章(时间戳没有):-)。

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-