主要词汇表URL:
http://example.com/glossary/
以字母A开头的词汇表术语: />单个词汇表术语的网址:
http://example.com/glossary/a/
我实际上是使用下面的代码实现的,但是我敢肯定这是一种非常尴尬的方式,而且我知道它正在发生故障查看页面时会调用错误的模板。除了http://example.com/glossary/以外,archive-sumo-glossary-term.php的调用符合预期,其他两个只是激活了我主题中的index.php。 (主题中的
http://example.com/glossary/a/atomic/
): functions.php
#1 楼
您始终可以覆盖将使用template_include
或相关过滤器调用的模板,但这可能会隐藏自定义档案的更深层问题。 br /> /glossary/
应该是所有sumo-glossary-term
帖子的存档页面/glossary/[letter]/
应该是[letter]
分类中使用分类学术语sumo-glossary-letter
的帖子的存档页面/glossary/[letter]/[term-name]/
应该是单独的sumo-glossary-term
帖子,这意味着第一个将加载模板
archive-sumo-glossary-term.php
,第二个将加载taxonomy-sumo-glossary-letter.php
,第三个将加载single-sumo-glossary-term.php
。我通过在WordPress 3.2中明确设置分类分类重写段,帖子类型的重写段和归档段来实现,而没有其他重写规则。另外,我先注册了分类法,然后注册了分类法,以确保优先级正确(否则,诸如
/glossary/f/page/2
之类的URL会进入术语表术语page
而不是术语表字母f
的第2页)。 add_action('init', 'create_glossary');
function create_glossary()
{
register_taxonomy
(
'sumo-glossary-letter',
array(),
array
(
'hierarchical' => true,
'labels' => array
(
'name' => _x('Letters', 'taxonomy general name'),
'singular_name' => _x('Letter', 'taxonomy singular name')
# And so one
),
'show_ui' => true,
'query_var' => 'glossary-letter',
'rewrite' => array(
'slug' => 'glossary',
),
)
);
register_post_type
(
'sumo-glossary-term',
array
(
'labels' => array
(
'name' => _x('Glossary Terms', 'post type general name'),
'singular_name' => _x('Glossary Term', 'post type singular name')
# And so on …
),
'supports' => array('title', 'editor', 'thumbnail'),
'public' => true,
'rewrite' => array
(
'slug' => 'glossary/%sumo-glossary-letter%',
'with_front' => false
),
'query_var' => 'glossary-term',
'has_archive' => 'glossary',
'taxonomies' => array( 'sumo-glossary-letter' ),
)
);
}
add_filter('post_type_link', 'glossary_term_permalink', 10, 4);
function glossary_term_permalink($post_link, $post, $leavename, $sample)
{
if ( false !== strpos( $post_link, '%sumo-glossary-letter%' ) ) {
$glossary_letter = get_the_terms( $post->ID, 'sumo-glossary-letter' );
$post_link = str_replace( '%sumo-glossary-letter%', array_pop( $glossary_letter )->slug, $post_link );
}
return $post_link;
}
#2 楼
我没有亲自使用过,但是您可能要看的是“ add_rewrite_rule”http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
一旦更改了永久链接,请不要忘记保存它们。
评论
我实际上使用add_rewrite_rule,只需将我的代码滚动到底部。 :-)到目前为止,它工作正常,只是用这种方式调用了错误的模板。
–maryisdead
2011年6月30日4:25
评论
明天我会尝试一下,看看是否能解决问题,然后回到这里。谢谢!
–maryisdead
2011年7月9日在16:37
好吧,不完全是明天……它几乎可以正常工作!谢谢!不起作用的是/ glossary /。给我一个404(建立了archive-sumo-glossary-term.php)。有任何想法吗?不得不说,我坚持使用WP 3.0.1,这可能是版本问题。我可以升级时再次进行测试。无论如何,在大多数情况下它都可以工作,现在我不一定需要/ glossary /,而只需重定向到字母A。再次感谢您!
–maryisdead
11年7月16日在14:40
嘿@maryisdead,我遇到了完全相同的问题,并提出了完全相同的解决方案,但又遇到了完全相同的问题-如何获得/ glossary进入archive-glossery.php模板?我刚刚找到了答案-使用'has_archive'=>'glossary',而不是has_archive => true我刚刚注意到Jan在他的答案中有这种方式,但是您在原始代码中没有那样更新那部分?做出更改后,它就开始为我工作
–杰夫
2012年2月9日在0:01
嘿,杰夫!是的,更新了那部分。刚刚再次检查,仍然无法正常工作。有问题的WordPress安装仍不是最新版本(3.0.1),因此也许这仍然是问题的根源。
–maryisdead
2012年2月11日13:50
完美地工作!在我的案例中,分类法和CPT的注册顺序是关键。
–舒里克
19-09-19在3:50