在‘Get_Terms’中排除特定的插件

时间:2018-05-24 作者:timmyg

我有一个自定义分类法“角色”,用于自定义帖子类型“人”。

在列出角色时,是否有办法通过以下方式排除基于slug而非ID的角色get_terms 作用

我这样问是因为我正在运行一个多站点,并且有几个网站的ID与我想排除的网站的ID相同。

现在我有:

<?php
$roles = get_terms(
    \'role\', array(
    \'orderby\'       => \'ID\',
    \'order\'         => \'ASC\',
    \'hide_empty\'    => true,
    \'exclude\'       => array(\'58\', \'63\', \'833\'),
    ));
$count_roles = count($roles);
if ( $count_roles > 0 ) : ?>
     //do stuff
<?php endif;?>
我想排除的鼻涕虫是:\'slug\' => [\'graduate\', \'job-market-candidate\', \'graduate-student\',\'research\'], 但我不知道这条线在哪里,如果在哪里的话。

感谢您的帮助!

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

这个get_terms() (see docs) 函数接受的参数与WP_Term_Query(see docs)
您必须首先获取这些术语ID,然后将其传递给exclude 参数:

// default to not exclude terms
$ids_to_exclude = array();
$get_terms_to_exclude =  get_terms(
    array(
        \'fields\'  => \'ids\',
        \'slug\'    => array( 
            \'graduate\', 
            \'job-market-candidate\', 
            \'graduate-student\',
            \'research\' ),
        \'taxonomy\' => \'role\',
    )
);
if( !is_wp_error( $get_terms_to_exclude ) && count($get_terms_to_exclude) > 0){
    $ids_to_exclude = $get_terms_to_exclude; 
}
$roles = get_terms(
    array(
        \'orderby\'    => \'ID\',
        \'order\'      => \'ASC\',
        \'hide_empty\' => true,
        \'exclude\'    => $ids_to_exclude,
        \'taxonomy\'   => \'role\',
    )
);

$count_roles = count($roles);

if ( $count_roles > 0 ) : ?>
     //do stuff
<?php endif;?>

SO网友:Jacob Peattie

没有通过插入排除的选项get_terms(). 您需要根据术语的slug获取所需的ID,然后排除这些ID,如Pabamato的回答所示。

但如果在输出时跳过它们,而不是使用exclude, 或进行其他查询。

$count_roles = count( $roles );

if ( $count_roles > 0 ) :
    $exclude = [\'graduate\', \'job-market-candidate\', \'graduate-student\',\'research\'];

    foreach ( $roles as $role ) {
        if ( ! in_array( $role->slug, $exclude ) ) {
            continue;
        }

        // Do stuff.
    }
endif;
或者,您可以在检索结果集中的相关术语后,使用array_filter(), 然后继续正常操作。

$exclude = [\'graduate\', \'job-market-candidate\', \'graduate-student\',\'research\'];

$roles = get_terms( array(
    \'taxonomy\'   => \'role\',
    \'orderby\'    => \'ID\',
    \'order\'      => \'ASC\',
    \'hide_empty\' => true,
) );

$roles = array_filter( $roles, function( $role ) {
    return in_array( $role->slug, $exclude ) ? false : true;
} );

$count_roles = count( $roles );

结束

相关推荐

get the custom taxonomy name?

在我的functions.php 我有个钩子:add_action( \'woocommerce_before_single_product\', \'display_category_list\',20 ); function display_category_list() { wc_get_template( \'woocommerce/single-product/single-product-top- content.php\' );