根据自定义分类术语获取模板部件

时间:2013-07-31 作者:kristina childs

我有一个自定义的帖子类型,我正试图根据自定义的分类法slug调用不同的导航变体。我在普通帖子中很容易做到这一点,比如:

<?php 
    if ( is_category( \'mixers\' )) {
        include (TEMPLATEPATH.\'/nav-mixers.php\');
    } elseif ( is_category( \'monitors\' )) {
        include (TEMPLATEPATH.\'/nav-monitors.php\' );
    } elseif ( is_category( \'speakers\' )) {
        include (TEMPLATEPATH.\'nav-speakers.php\');
    }
?>
然而,事实证明,对于自定义的职位类型来说,这是一个挑战。我觉得我很接近,但我现在需要一些帮助。这就是我现在的位置。

<?php
    $terms = get_the_terms( $post->id, \'prodcat\' ); // get an array of all the terms as objects.
    $terms_slugs = array();
        foreach( $terms as $term ) {
            $terms_slugs[] = $term->slug; // save the slugs in an array
        }
    if( $terms ) :
       get_template_part( \'nav\', slug );
    else :
       get_template_part( \'nav\', \'home\' );
    endif;
?>
非常感谢您的帮助!

3 个回复
最合适的回答,由SO网友:kristina childs 整理而成

好吧,我花了24小时的时间才弄明白。我必须同时传递帖子id和分类名称。在这之前我尝试过的每件事都不是一个就是另一个脸掌

<?php

    $terms = get_the_terms( $post->id, \'prodcat\', array( \'parent\' => 0 ) ); 
    $terms_slugs = array();
    foreach( $terms as $term ) {
        $terms_slugs[] = $term->slug; 
    }

    if( !empty($terms_slugs) ) :
      get_template_part( \'nav\', array_pop($terms_slugs) );
    else :
      get_template_part( \'nav\', \'home\' );
    endif;
?>
呜呜!

SO网友:s_ha_dum

在您的情况下,“自定义分类法slug”是prodcat 但根据你的代码,我假设你指的是单个鼻涕虫。

现在get_the_terms() 将返回分配给帖子的所有术语,但您只能加载一个模板,因此如果有多个术语,您必须确定要使用哪个术语段塞。我不知道您打算如何决定,但无论如何,这将加载基于其中一个slug的模板。

$terms = get_the_terms( $post->id, \'post_tag\' ); // get an array of all the terms as objects.
$terms_slugs = array();
foreach( $terms as $term ) {
    $terms_slugs[] = $term->slug; // save the slugs in an array
}

if( !empty($terms_slugs) ) :
  get_template_part( \'nav\', array_pop($terms_slugs) );
else :
  get_template_part( \'nav\', \'home\' );
endif;
但我甚至不确定你是否需要foreach 总之:

// get an array of all the terms as objects.
$terms = get_the_terms( $post->id, \'post_tag\' );
if ( ! empty( $terms ) ) :
    $terms = array_pop( $terms );
    get_template_part( \'nav\', $terms->slug );
else :
    get_template_part( \'nav\', \'home\' );
endif;

SO网友:kaiser

要循环遍历术语列表的所有段塞,只需调用get_the_terms() 只拉鼻涕虫:

$slugs = wp_list_pluck( get_the_terms( get_the_ID(), \'prodcat\' ), \'slug\' );
然后,您需要检查是否得到任何结果:

if ( ! empty( $slugs ) )
然后我看到出现的问题是,你得到了一堆鼻涕虫作为回报(除非你将管理元框限制为只允许一个术语)。

然后,您必须决定一些自定义条件,并从$slugs:

// Decide which slug fits and then determine the key:
$key = 0;
get_template_part( \'nav\', $slugs[ $key ] );

结束

相关推荐