Intereting Posts
Портфолио + Блог: мультисайт или плагин? Реагирующие рамки – редактировать дочерние js Подтверждение подлинности электронной почты для регистрации (сохранение неутвержденных пользователей из таблицы пользователей) Как получить уведомление об уведомлении об обновлении безопасности? Дерево категорий сглажено внутри администратора при сохранении Проблема с wpdb-запросом для доступа к предыдущим 3-дневным сообщениям Магазин WordPress: включение custormers для выбора цвета продукта с помощью эскизов изображений на пользовательских полях Добавить персонализированное уведомление после публикации Попытка получить сообщение мета Плагины отключены и настройки «отключены» после изменения прав доступа к файлам Архив таксономии 404ing (несрочный архив) Скрипты в очереди на основе опций Получить продолжительность с момента регистрации enqueue css в состоянии плагина wordpress Уведомление об ожидающем сообщении для участников

Вложенные пользовательские таксономии | Неправильные сообщения при запросе

У меня есть две пользовательские таксономии в wordpress, у которых есть сообщения, прикрепленные к ним, например, следующий пример:

Таксономия A
Таксономия B
Сообщение 1
Сообщение 2

Каждая должность имеет две связанные с ней таксономии, зависит от необходимости. Мне нужно вывести, что для каждой таксономии A существует таксономия B и для каждой таксономии B есть X количество сообщений.

Я хочу достичь этого в массивах, чтобы в конечном итоге вывести его в формате JSON, и это то, что мне удалось написать и работать, однако результаты неверны:

$TaxanomiesA = get_terms("TaxanomyA", array('hide_empty' => false)); $TaxanomiesB = get_terms("TaxanomyB", array('hide_empty' => false)); $TaxanomyAArray = array(); $TaxanomyBArray = array(); $postssArray = array(); foreach($TaxanomiesA as $TaxanomyA) { $TaxanomyAArray[] = array ( 'id' => $TaxanomyA->term_id, 'name' => $TaxanomyA->name, 'TaxanomyB' => $TaxanomyBArray ); $args = array(//Arguments); $posts = get_posts( $args ); foreach($TaxanomiesB as $TaxanomyB){ $TaxanomyBArray[] = array ( 'id' => $TaxanomyB->term_id, 'name' => $TaxanomyB->name, 'posts' => $postssArray ); foreach($posts as $post){ $postssArray[] = array ( 'id' => $post->ID, 'name' => $post->title ); } } } $jsonOutput=array( 'JSON' => $TaxanomyAArray ); echo json_encode($jsonOutput, JSON_UNESCAPED_SLASHES); } 

Это результат, который я хочу достичь:

 { "JSON":[ { "id":"1", "name":"TaxonomyA Name", "Taxonomy":[ { "id":"1", "name":"TaxonomyB Name", "posts":[ { "id":"1", "name":"Post Title" }, { "id":"2", "name":"Post Title 2" } ] } ] } ] } 

Solutions Collecting From Web of "Вложенные пользовательские таксономии | Неправильные сообщения при запросе"

Проблема в том, что функция get_posts вызывается за пределами цикла $TaxanomiesB . Переместите его внутрь и убедитесь, что текущий $TaxanomyB используется в $ args в get_posts .

Добавьте данные в $TaxanomyAArray и $TaxanomyBArray в конце каждого цикла каждый, иначе первый объект в массиве будет пустым.

Вам также необходимо повторно инициализировать переменные $array в начале каждого родительского цикла, иначе вы получите повторения каждого столбца / таксономии несколько раз за каждый набор (например, 'a' => (1 => (foo, bar), 2 => (foo, bar, foo, bar)), 'b' => 1 => (foo, bar, foo, bar, foo, bar) … и т. д.).

 $TaxanomiesA = get_terms("TaxanomyA", array('hide_empty' => false)); $TaxanomiesB = get_terms("TaxanomyB", array('hide_empty' => false)); $TaxanomyAArray = array(); foreach($TaxanomiesA as $TaxanomyA) { $TaxanomyBArray = array(); foreach($TaxanomiesB as $TaxanomyB){ $args = array(//Arguments with $TaxonomyB); $posts = get_posts( $args ); $postsArray = array(); foreach($posts as $post){ $postsArray[] = array ( 'id' => $post->ID, 'name' => $post->title ); } $TaxanomyBArray[] = array ( 'id' => $TaxanomyB->term_id, 'name' => $TaxanomyB->name, 'posts' => $postsArray ); } $TaxanomyAArray[] = array ( 'id' => $TaxanomyA->term_id, 'name' => $TaxanomyA->name, 'TaxanomyB' => $TaxanomyBArray ); } $jsonOutput = array( 'JSON' => $TaxanomyAArray ); echo json_encode($jsonOutput, JSON_UNESCAPED_SLASHES);