Детские условия от нескольких родителей?

Я использую изотоп для фильтрации пользовательского типа сообщения. Но я только хочу, чтобы детские таксономии двух конкретных родителей. У меня он хорошо работает для одного родителя, но я не уверен, как изменить массив, чтобы позволить двум родителям.

$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.

Любая помощь, которую вы можете себе позволить, будет очень оценена.

Solutions Collecting From Web of "Детские условия от нескольких родителей?"

Мы можем фильтровать сгенерированный SQL-запрос через фильтр terms_clauses до выполнения SQL-запроса. То, что мы будем делать, – это ввести новый параметр wpse_parents который будет принимать массив родительских wpse_parents идентификаторов для получения детей. Обратите внимание: этот новый параметр работает точно так же, как и параметр build-in 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 ); 

Просто заметьте, фильтр создается таким образом, что он не позволяет child_of параметры parent и child_of . Если какой-либо из этих параметров установлен, фильтр берет начало и не применяется

ОСНОВНОЕ ИСПОЛЬЗОВАНИЕ

Если вам нужно запросить условия для детей из условий 15 и 16, вы можете выполнить следующий запрос для достижения своей цели

 $args = [ 'wpse_parents' => [15, 16] ]; $terms = get_terms( 'speight_plans', $args ); 

Я могу думать о функции get_term_children() . Вы можете использовать эту функцию два раза, чтобы получить 2 массива дочерних терминов id из двух родительских терминов. Затем вы можете объединить их в один массив и передать этот массив get_terms

 get_terms('speight_plans', array('include' => $child_terms_arr));