问题描述
所以这让我绝对疯狂。我花了几天时间来解决这个问题,我无法解决为什么这么困难,因为这是一个非常常见的永久链接结构!
我看了几百个答案和帖子,没有一个似乎解决了这个问题。
我只想要这个结构:
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。