我相信我已经从网上随机的各种来源中找到了一个临时解决方案。
我希望有人能对我的答案进行扩展,让它更“防弹”。然而,从短期来看,这种解决方案确实有效。
与当前重写规则挂钩。
add_action(\'rewrite_rules_array\', \'mbe_rewrite_rules_array\', 100);
将在现有重写规则中添加新的重写规则。
function mbe_rewrite_rules_array($rules){
$new_rules = mbe_get_new_rewrite_rules();
return ($new_rules + $rules);
}
添加一些新的重写规则。。。(我认为这方面肯定需要改进——我不熟悉重写规则。)
function mbe_get_new_rewrite_rules(){
$post_type = \'mbe-portfolio\';
$post_type_slug = \'portfolio\';
$taxonomy = \'mbe-portfolio-categories\';
$taxonomy_slug = \'category\';
$slug = $post_type_slug.\'/\'.$taxonomy_slug;
return array(
"{$slug}/?$" => "index.php?post_type={$post_type}&taxonomy={$taxonomy}"
);
}
通过添加新的重写规则,WordPress不再看到
domain.com/portfolio/category/
作为404,但作为Post类型归档。
钩住模板系统以显示taxonomy.php
查看时domain.com/portfolio/category/
add_filter(\'archive_template\', \'mbe_taxonomy_template\');
function mbe_taxonomy_template($template){
$templates = array();
$post_type = \'mbe-portfolio\';
$taxonomy = \'mbe-portfolio-categories\';
if(get_query_var(\'post_type\') == $post_type && !get_query_var(\'taxonomy\')){
return $template;
}
if(get_query_var(\'post_type\') == $post_type && get_query_var(\'taxonomy\') == $taxonomy){
$templates[] = \'taxonomy.php\';
}
$templates[] = $template;
return locate_template($templates);
}
现在如果你去
domain.com/portfolio/category/
it加载
taxonomy.php
从当前活动的WordPress主题目录。
所以我想了想。虽然taxonomy.php
,而不是检查是否应显示有关分类法的信息或有关分类法中术语的信息。我决定创建一个名为term.php
避免混淆。
钩住模板系统以显示term.php
查看时domain.com/portfolio/category/<term-slug>
add_filter(\'taxonomy_template\', \'mbe_term_template\');
function mbe_term_template($template){
$templates = array();
$queried_object = get_queried_object();
if(property_exists($queried_object, \'term_id\')){
$templates[] = \'term.php\';
}
$templates[] = $template;
return locate_template($templates);
}
现在如果你去
domain.com/portfolio/category/<term-slug>
it加载
term.php
从当前活动的WordPress主题目录。
查看时的结论domain.com/portfolio/
- 默认存档模板照常加载。(archive.php
, archive-posttype.php
, 等)从当前活动的WordPress主题查看时domain.com/portfolio/category/
- 这个taxonomy.php
模板文件是从当前活动的WordPress主题加载的查看时domain.com/portfolio/category/<term-slug>
- 这个term.php
模板文件是从当前activeWordPress主题加载的您可以轻松测试,看看这是否有效。您所需要的只是当前活动WordPress主题目录中的三个文件。(archive.php
或archive-posttype.php
, taxonomy.php
, 和term.php
)
把这个放进去archive.php
或archive-posttype.php
$current_post_type = get_query_var(\'post_type\');
echo \'<p><strong>Current View:</strong> Post Type</p>\'.PHP_EOL;
echo \'<p><strong>Current Post Type:</strong> <code>\'.$current_post_type.\'</code></p>\'.PHP_EOL;
把这个放进去
taxonomy.php
$current_post_type = get_query_var(\'post_type\');
$current_taxonomy = get_query_var(\'taxonomy\');
echo \'<p><strong>Current View:</strong> Taxonomy</p>\'.PHP_EOL;
echo \'<p><strong>Current Post Type:</strong> <code>\'.$current_post_type.\'</code></p>\'.PHP_EOL;
echo \'<p><strong>Current View:</strong> <code>\'.$current_taxonomy.\'</code></p>\'.PHP_EOL;
把这个放进去
term.php
$current_term = get_queried_object();
echo \'<p><strong>Current View:</strong> Term</p>\'.PHP_EOL;
echo \'<p><strong>Current Term Name:</strong> <code>\'.$current_term->name.\'</code></p>\'.PHP_EOL;
echo \'<p><strong>Current Taxonomy:</strong> <code>\'.$current_term->taxonomy.\'</code></p>\'.PHP_EOL;
请不要直接跳到此链接。然而,如果你已经阅读了整个问题并接受了答案,你仍然感到困惑。我写了一个
blog post 更详细一点,这可能会帮助您更好地理解。