问题描述

所以这让我绝对疯狂。我花了几天时间来解决这个问题,我无法解决为什么这么困难,因为这是一个非常常见的永久链接结构!

我看了几百个答案和帖子,没有一个似乎解决了这个问题。

我只想要这个结构:

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 错误,或者停止不起作用。

我不明白为什么这么难!

任何帮助真的很感激!

谢谢

================================================== ==== ==================附加信息==================

目前我正在注册的职位类型和分类如下:

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 ),

如果我同时注册为’literature’,我将在 mysite.com/literature 页面上获得 404,但这显示了我的永久链接: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 分页不起作用,所以我得到一个 404 错误在以下 url:

mysite.com/literature/page/2/

最佳解决方案

按照您已经在 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 适用:它适用于我…–)

从 TMI 的土地

为了参考,默认情况下页面不起作用的原因是 WordPress 为文学/%literature_category%/%书%/%页面%设置了一个重写规则,如果您考虑到这一点,这是非常有意义的。因此,您的默认固定链接具有以下顺序的这些竞争规则:

[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]

我们在这里真正做的是通过取消设置后者来改变它们的顺序 (我们可以保留它,但是之后每个重写都有一个更多的正则表达式在页面加载上运行),并将其添加到数组的开头。

有趣的事实:如果您有一个名为”page” 的”book”,它有多个页面,则此顺序将发生冲突,其后续页面将不起作用!

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。