这难道不应该很容易吗?!自定义帖子类型/自定义分类固定链接

时间:2012-01-29 作者:fxfuture

这简直让我发疯。我花了几天的时间试图解决这个问题,但我不明白为什么这么难,因为这肯定是一个非常常见的永久链接结构!

我浏览了数百个答案和帖子,似乎没有一个能解决这个问题。

我只想要这个结构:

mysite.com/custom-post-type/custom-taxonomy-term/post-name
因此,我实现了以下目标:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with \'fiction\' term
mysite.com/literature/fiction/mybook - the post
每次我尝试一些东西,都会出现404个错误或分页不起作用。

我不明白为什么这么难!

非常感谢您的帮助!

非常感谢。

========================================================================ADDITIONAL INFORMATION==================

目前,我正在注册帖子类型和分类,如下所示:

register_post_type(\'literature\',$args);
\'rewrite\' => array(\'slug\' => \'literature/books\',\'with_front\' => false),

register_taxonomy(\'literature_category\',array(\'literature\'), array(
\'rewrite\' => array( \'slug\' => \'literature\',\'with_front\' => false ),
如果我将两者都注册为“文学”,我会在mysite上获得404。com/文学页面,但这将显示我的永久链接:mysite.com/literature/books/mybook

在听取有关此问题的意见后—Custom post types, taxonomies, and permalinks

我已将此添加到我的函数中:

function filter_post_type_link($link, $post) {
    if ($post->post_type != \'literature\')
        return $link;

    if ($cats = get_the_terms($post->ID, \'literature_category\'))
        $link = str_replace(\'%literature_category%\', array_pop($cats)->slug, $link);
    return $link;
}
add_filter(\'post_type_link\', \'filter_post_type_link\', 10, 2);
并将我的帖子类型更改为\'slug\' => \'literature/%literature_category%\'并将我的分类法更改为\'slug\' => \'literature\'

除了在mysite.com/literature 分页不起作用,因此在以下url上出现404错误:

mysite.com/literature/page/2/

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

遵循以下建议this question 正如您所做的,但请将以下内容添加到代码中:

add_action( \'generate_rewrite_rules\', \'fix_literature_category_pagination\' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules[\'literature/([^/]+)/page/?([0-9]{1,})/?$\']);
    $wp_rewrite->rules = array(
        \'literature/?$\' => $wp_rewrite->index . \'?post_type=literature\',
        \'literature/page/?([0-9]{1,})/?$\' => $wp_rewrite->index . \'?post_type=literature&paged=\' . $wp_rewrite->preg_index( 1 ),
        \'literature/([^/]+)/page/?([0-9]{1,})/?$\' => $wp_rewrite->index . \'?literature_category=\' . $wp_rewrite->preg_index( 1 ) . \'&paged=\' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}
最后,进入设置>永久链接并点击保存。如果仍然不起作用,请再次保存永久链接。有时我觉得你得救他们两次,但谁知道呢。不管怎样,让我知道你过得怎么样。请注意,计算机科学标准答案#1适用于:It Works For Me... ;-)

来自TMI的土地

作为参考,默认情况下这些页面不工作的原因是WordPress为文学/%文学\\u类别%/%书籍%/%页面%设置了重写规则,如果您仔细考虑一下,这完全有道理。因此,您的默认永久链接按以下顺序具有这些相互竞争的规则:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]
我们在这里真正要做的就是通过取消后者(我们可以保留它,但之后每次重写都会有一个regex在页面加载时运行)并将其添加到数组的开头来更改它们的顺序。

有趣的事实:如果你有一本名为“页面”的“书”,并且它有多个页面,那么这个顺序会发生冲突,后续页面将无法工作!

结束

相关推荐

Permalinks for quote authors

What I have:引用的网站,格式为:“引用文本”-引用作者参见quotup.com 对于我的考试网站(我为考试中的亵渎行为提前道歉)。What I\'m after:单击“-Quote Author”将启动一个包含该Quote Author所有引用的页面,URL为:示例。史蒂夫·史蒂文森,其中史蒂夫·史蒂文森是引文作者。What I\'ve done:创建了一个名为wp\\u qauthor的自定义表,该表通过post\\u meta(qauthor\\u id)绑定到wp\\u posts向函数