私は私のカスタム投稿タイプ "People"にカスタム分類法 "role"を持っています。
ロールを一覧表示するとき、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']
ですが、この行に収まる場所がわからない場合は、どこにでもありません。
任意の助けは大歓迎です!
get_terms()
( docs を参照)関数はWP_Term_Query
と同じ引数を受け付けます( docs を参照)
最初にこれらの用語Idsを取得し、次にそれを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;?>
get_terms()
にslugで除外するオプションはありません。 Pabamatoの答えのように、スラッグに基づいて必要な用語のIDを取得する必要があります。 次に これらのIDを除外します。
しかし、おそらく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 );