カスタムポストタイプをフィルタリングするために同位体を使用しています。しかし、私はただ2人の特定の両親の子供分類学が欲しいです。私はそれが1人の親のためにうまく働くことを持っています、しかし私は2人の親を考慮に入れるためにどのように配列を修正するべきかわかりません。
$terms = get_terms('speight_plans', array('parent' => 16)); // you can use any taxonomy, instead of just 'category'
$count = count($terms); //How many are they?
if ( $count > 0 ){ //If there are more than 0 terms
foreach ( $terms as $term ) { //for each term:
echo '<button class="button" data-filter=".'.$term->slug.'">' . $term->name . '</button>';
//create a list item with the current term slug for sorting, and name for label
}
}
やってみた
array('parent' => 16, 15));
しかし、それでもまだ親16の子供たちを示していました。
あなたが余裕があることができるどんな援助でも大いに感謝されるでしょう。
SQLクエリが実行される前に、生成されたSQLクエリを terms_clauses
filter でフィルタリングできます。これから行うことは、wpse_parents
と呼ばれる新しいパラメータを導入することです。これは、子を取得するための親用語IDの配列を受け入れます。この新しいパラメータは、組み込みパラメータparent
とまったく同じように機能します。これは、親の直接の子のみが返されるためです。
コードは、特定のコードが何をしているのかを簡単に理解し、基本的に説明するためにコメントされています。すべてのコードには少なくともPHP 5.4が必要です。
add_filter( 'terms_clauses', function ( $pieces, $taxonomies, $args )
{
// Bail if we are not currently handling our specified taxonomy
if ( !in_array( 'speight_plans', $taxonomies ) )
return $pieces;
// Check if our custom argument, 'wpse_parents' is set, if not, bail
if ( !isset ( $args['wpse_parents'] )
|| !is_array( $args['wpse_parents'] )
)
return $pieces;
// If 'wpse_parents' is set, make sure that 'parent' and 'child_of' is not set
if ( $args['parent']
|| $args['child_of']
)
return $pieces;
// Validate the array as an array of integers
$parents = array_map( 'intval', $args['wpse_parents'] );
// Loop through $parents and set the WHERE clause accordingly
$where = [];
foreach ( $parents as $parent ) {
// Make sure $parent is not 0, if so, skip and continue
if ( 0 === $parent )
continue;
$where[] = " tt.parent = '$parent'";
}
if ( !$where )
return $pieces;
$where_string = implode( ' OR ', $where );
$pieces['where'] .= " AND ( $where_string ) ";
return $pieces;
}, 10, 3 );
ちょっと注意してください、フィルタはそれが設定されるparent
とchild_of
パラメータを許さないような方法で造られます。これらのパラメータのいずれかが設定されていると、フィルタは早期に無効になり適用されません。
第15項と第16項の子用語をクエリする必要がある場合は、次のクエリを実行して目的を達成できます。
$args = [
'wpse_parents' => [15, 16]
];
$terms = get_terms( 'speight_plans', $args );
get_term_children()
関数について考えることができます。その関数を2回使用して、2つの親用語の2つの子配列のIDを取得できます。それから、それらを1つの配列にマージしてその配列をget_terms
に渡すことができます。
get_terms('speight_plans', array('include' => $child_terms_arr));