Intereting Posts
Кнопка «Пред. / След.» С эскизом и текстом субтитров между страницами в однострочном столбце Устранение слишком большого количества перенаправлений на wordpress Страница обновлений, не отображающая формирование Динамическое добавление подкаталога страницы, как это делает buddypress Как определить пользовательское количество элементов в комментариях Определите, в каком месте темы находится wp_get_nav_menu_items, для Текущая подсветка навигации для меню, которое может быть изменено пользователем? Подкатегория и категория в структуре постоянных ссылок Показать все сообщения о таксономии с одним конкретным термином, не работающим Клонирование wordpress intsall на mac Удаление ссылки по умолчанию Сделайте больше действий после успешного входа в систему Создание собственных форм администратора в WordPress CMS? Ограничение количества возвращенных результатов Последовательное создание более 1000 сообщений вызывает 404?

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

У меня есть иерархический пользовательский тип сообщений типа « Географии» , в котором каждой географии присваивается пользовательская таксономия ( 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() показалось лучшим способом получения внуков (или правнуков или великих граждорей) и использования пользовательской таксономии запрос.