Intereting Posts
Как добавить правило Rewrite / структуру категории Добавить столбец с редактируемыми полями в список таксономии X-Pingback и XMLRPC получить второй идентификатор из массива Медиа галерея: удалите кнопку «вставить в сообщение», удерживая кнопку «Вставить галерею» Как получить роль Подписаться на пользователей в меню администратора только в Pages in WordPress Правильный подход к перемещению полного сайта из одного домена в другой И сохранение виджетов Почему неправильно использовать admin_print_scripts- {hook} для вставки файла сценария (.js)? Проверьте, имеет ли пост определенный tag_ID в пользовательском типе сообщения Вертикальное меню боковой панели Родитель и ребенок не отображаются правильно Где я могу скачать темы WordPress? Атрибуты Shortcodes по умолчанию Показать родительские категории текущей категории Автоматически перемещать ожидающие сообщения через 30 дней и обновлять дату публикации, когда пользователи обновляют сообщения Разбиение страниц на странице archive.php

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

У меня есть две пользовательские таксономии в 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);