Intereting Posts
Разное количество сообщений, отображаемых в области разработки и производства Плагин jQuery для аккордеона не будет работать после использования в WP Удалить ссылки из the_content при использовании фильтров wp_trim_excerpt Функция для получения изображения из медиа-библиотеки Пользовательский тип wp_insert_post и пользовательские таксономии Как установить тему WordPress и настроить ее? Для чего используется константа WP_USE_THEMES? get_terms post-> id Сравнение дат внутри плагина с использованием инструкции PHP if Храните липкие сообщения вне запроса, если они не имеют изображения Как создать пограничный фильтр Post Post с помощью мета запроса Как удалить параметр «Удалить» на панели инструментов Оберните подменю в div, если родительский ли имеет определенный класс, используя ходунок и функцию start_lvl Добавить HTML между фидными элементами загружать загрузочную страницу загрузки слишком медленно

Получение внуков сообщения с указанной пользовательской таксономией?

У меня есть иерархический пользовательский тип сообщений типа « Географии» , в котором каждой географии присваивается пользовательская таксономия ( geographytype тип): область, страна, регион или город. Иерархия устанавливается следующим образом:

 Area ¬ Country ¬ Region City 

В качестве примера: город Бостон – ребенок Соединенных Штатов, который, в свою очередь, является ребенком Америки.

Я хочу иметь возможность получить детей и / или внуков из географии и указать ее geographytype – например, если я буду рассматривать Америку , я хочу получить все города, включая Бостон .

Однако, похоже, я могу делать только то или другое. Если я использую get_pages () , я могу получить всех детей и внуков, указав parent параметр, но я не могу указать тип geographytype , поэтому я просто получаю все.

И наоборот, если я использую WP_Query (), я могу указать свой geographytype tax_query , используя параметр tax_query , но он не даст мне внуков; Я могу получить только прямых детей, используя параметр post_parent .

Я хочу иметь возможность сделать то и другое: получить детей и внуков с определенной пользовательской таксономией.

Я смог достичь этого, достаточно забавно, используя с get_pages() и WP_Query() . Мне нужна функция многократного использования, которая вернет массив WP_Query, который я мог бы пропустить, поэтому я придумал следующее:

 function returnChildGeographies($geoID, $geoType, $grandChildren = false) { $args = array( 'post_type' => 'geographies', 'posts_per_page' => -1, 'orderby' => 'post_title', 'order' => 'ASC', 'post_parent' => $geoID, 'tax_query' => array( array( 'taxonomy' => 'geographytype', 'field' => 'slug', 'terms' => $geoType ) ) ); if ($grandChildren) { $getPagesArgs = array( 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 0, 'child_of' => $geoID, 'post_type' => 'geographies' ); $pagesArray = get_pages($getPagesArgs); $grandChildArray = array(); foreach ($pagesArray as $grandchild) { $grandChildArray[] = $grandchild->ID; } unset($args['post_parent']); $args['post__in'] = $grandChildArray; } $childArray = new WP_Query($args); return $childArray; } не function returnChildGeographies($geoID, $geoType, $grandChildren = false) { $args = array( 'post_type' => 'geographies', 'posts_per_page' => -1, 'orderby' => 'post_title', 'order' => 'ASC', 'post_parent' => $geoID, 'tax_query' => array( array( 'taxonomy' => 'geographytype', 'field' => 'slug', 'terms' => $geoType ) ) ); if ($grandChildren) { $getPagesArgs = array( 'sort_order' => 'ASC', 'sort_column' => 'post_title', 'hierarchical' => 0, 'child_of' => $geoID, 'post_type' => 'geographies' ); $pagesArray = get_pages($getPagesArgs); $grandChildArray = array(); foreach ($pagesArray as $grandchild) { $grandChildArray[] = $grandchild->ID; } unset($args['post_parent']); $args['post__in'] = $grandChildArray; } $childArray = new WP_Query($args); return $childArray; } 

В качестве примера использования: если я просматриваю зону Америки, и я хочу, чтобы все города (которые являются внуками этого района), я звоню:

 $regionQuery = returnChildGeographies($post->ID, 'city', true); 

Если я хочу только прямых детей:

 $countryQuery = returnChildGeographies($post->ID, 'country', false); 

На основе этого последнего параметра функция будет отключена post_parent и задайте post__in , который представляет собой массив идентификаторов сообщений, которые я ищу.

Вероятно, эту функцию можно было бы немного упростить, но метод стоит: объединение get_pages() и WP_Query() показалось лучшим способом получения внуков (или правнуков или великих граждорей) и использования пользовательской таксономии запрос.