如何将同一主题模板用于多个分类术语?

时间:2019-03-18 作者:Robert Andrews

我如何使用相同的模板文件,比如说三个特定的分类术语,而不是其余三个?

我知道taxonomy-taxname.php 是所有术语的文件

我知道taxonomy-taxname-termname.php 是特定术语的文件。

但是让我们说我想。。。

--taxonomy-fruit-redfruit.php 草莓、西红柿和覆盆子

--taxonomy-fruit-greenfruit.php 西瓜、苹果和猕猴桃

<没有为每个学期使用重复的单独主题文件?

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

您准备了模板(继续使用您的示例):

  • content-redfruits.php,
  • content-greenfruits.php,
  • content-fruits.php.
然后在分类法文件中taxonomy-fruit.php (复制并重命名taxonomy.phpindex.php), 在主循环之前,检查当前查询对象的术语slug。

$red_templ = [\'strawberries\', \'tomatoes\', \'raspberries\']; // term slugs
$green_templ = [\'watermelons\', \'apples\', \'kiwi\'];         // term slugs
$template = \'fruits\';

$obj = get_queried_object();
if ( $obj instanceof WP_Term ){
    if ( in_array($obj->slug, $red_templ) )
        $template = \'redfruits\';
    else if ( in_array($obj->slug, $green_templ) )
        $template = \'greenfruits\';
}
while ( have_posts() ) : the_post();

    get_template_part( \'content\', $template );

endwhile;

Edit: (回答注释)

上述示例可以使用is_tax:

$red_templ = [\'strawberries\', \'tomatoes\', \'raspberries\']; // term slugs
$green_templ = [\'watermelons\', \'apples\', \'kiwi\'];         // term slugs
$template = \'fruits\';

if ( is_tax(\'fruit\', $red_templ) )        // check taxonomy, then check terms
    $template = \'redfruits\';
else if ( is_tax(\'fruit\', $green_templ) ) // check taxonomy, then check terms
    $template = \'greenfruits\';

while ( have_posts() ) : the_post();

    get_template_part( \'content\', $template );

endwhile;
is_tax 执行一些额外的比较,但这里的性能没有显著差异
每次打电话is_tax, 您可以检查给定的分类法是否与当前分类法匹配(在选择模板文件时已经检查过),并按id、slug和name比较术语。

您不想使用has_term 在这种情况下。此函数用于post,因此对于空术语,它将错误返回false.

相关推荐

WooThemes-供应商/预订-允许供应商管理资源

我正在尝试从WooThemes为bookings插件带来新功能。在组合预订和供应商插件时,不允许供应商用户管理资源(资源是自定义帖子)。我将新功能添加到资源自定义帖子中,然后将这些功能添加到供应商角色(通过用户角色插件)现在,资源显示在供应商角色的管理菜单中,但当我尝试添加新资源时,会出现“您无权访问此页面”错误。我添加的新功能:https://i.stack.imgur.com/OCDlV.png添加到角色的功能:https://i.stack.imgur.com/5t696.png使用角色登录时显示的