按分类段塞过滤元素

时间:2016-07-06 作者:aarede

在我的主题文章页面(single.php)中,我有以下代码过滤div,使其仅显示在特定类别上:

<?php $categoria_post = the_category_id($categoria_post);
if ($categoria_post == 760) : ?>
<div>
...
</div> 
<?php endif; ?>
现在,我需要过滤其他div,只考虑分类法slug(series\\u speciais),忽略id:

<?php $especiais = the_terms(\'slug\',\'taxonomy-name\');
if ($especiais == \'series_especiais\') : ?>
但上面的代码不起作用。

EDIT:

此分类法的创建方式:

add_action( \'init\', \'create_post_tax\' );

    function create_post_tax() {
        register_taxonomy(
            \'series_especiais\',
            \'post\',
            array(
                \'label\' => __( \'Séries Especiais\' ),
                \'rewrite\' => array( \'slug\' => \'series_especiais\',\'with_front\' => true ),
                \'hierarchical\' => true,
            )
        );
    }

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

看看documentation for the_terms(). 它至少需要两个参数—post ID和分类名称。您没有给出这两种方法中的任何一种(我当然假设您的分类法没有被调用taxonomy-name).

然而,在这种情况下,您也使用了错误的函数。the_terms() is used to display (i.e. echo out) a list of terms, 不要在if 陈述你想要的功能是get_the_terms(). 需要注意的一点是,许多WordPress函数遵循类似的命名方案:通常,函数以get_ 将返回值(用于比较或保存以备以后使用),而函数以the_ 将回显值。

那么,让我们看看get_the_terms(). 正在查看the documentation, 所需的参数类似:post ID(或post对象)和分类名称。所以,我们会看到这样的情况:

$especiais = get_the_terms( $post, \'taxonomy-name\' );
// replace taxonomy-name with the name of your taxonomy!
这将返回一个术语对象数组,而不是单个术语(您可以通过运行print_r( $especiais ); - 使用print\\u r()是确认从函数返回哪些数据的好方法,并且通常是调试代码时的好习惯)。

最后,我们需要通过该阵列检查您要寻找的子弹。但是,在我们确认我们确实拿回了一个数组之前,你永远也不能太确定(尤其是如果根本没有指定术语,或者我们在分类名称上犯了错误):

if( is_array( $especiais ) && count( $especiais ) ) { // is it an array, and with items?
  foreach( $especiais as $term ) { // loop through each term...
     if( $term->slug === \'series_especiais\' ) { // ...till we find the one we want!
       ?>
       <div> put your div and other content here </div>
       <?php
       break; // avoid searching the rest of the terms; we\'ve already found what we want
     }
  }
}
因此,要吸取的教训是:始终查找您使用的函数的文档。这个official Code Reference 是一个很好的开始,否则通常只需在谷歌上搜索函数名也会有所帮助。

<小时>EDIT: 经过我们在评论中的讨论,发现在术语和分类法上有点混乱。如果在您的案例中,分类名称为“series\\u speciais”,并且您只想确定帖子在该分类中是否有任何术语,您可以跳过foreach 完全循环。这里有一个重写:

$especiais = get_the_terms( $post, \'series_especiais\' );

if( is_array( $especiais ) && count( $especiais ) ) { // is it an array, and with items?
  ?>
  <div> put your div and other content here </div>
  <?php
}
更简单:)我也将上面的其余代码留在这里,因为它可能会帮助其他人!

相关推荐

Slug for custom post type

我在我的网站上使用网页和博客帖子。页面获取URL示例。org/%postname%/,并基于Permalink设置,posts获取URL示例。组织/博客/%postname%/。完美的我有一个自定义的帖子类型,由我网站上的另一个组用于他们的网页。在注册post类型时,我为它们提供了一个重写slug:\'rewrite\' => array(\'slug\' => \'ncfpw\'),然而,他们的页面得到了URL示例。组织/博客/ncfpw/%博文名%/我怎样才能摆脱;博客;在他们的URL中?