Вывод терминов для пользовательских типов записей
Мне удалось вывести все термины, принадлежащие пользовательской таксономии, с помощью следующего кода:
$args = array('post_type' => 'my_post_type','number' => '999');
$terms = get_terms( 'my_taxo',
[
'hide_empty' => true,
'orderby' => 'wpse_last_word',
] , $args );
foreach ( $terms as $term ) {
echo '' . $term->name . '';
}
Этот код дает желаемые результаты на моем локальном сервере (xampp). По сути, он выводит все термины, назначенные конкретной записи. Но когда я загружаю код на рабочий сервер, код перестает работать как ожидалось. Вместо этого он показывает все термины без фильтрации. Я даже обновил версию PHP на рабочем сервере, чтобы она соответствовала локальному серверу, но это не помогло.
Может ли кто-нибудь указать на проблему в моем коде?

Ваш код неправильный. Я не знаю, как он работает у вас на локальном сервере. Причины:
- Вы вызываете
get_terms()
с 3 параметрами, хотя эта функция принимает только 2 параметра. Последний параметр лишний. - Во-вторых,
get_terms()
возвращает все термины таксономии, а не термины, связанные с конкретной записью.
Для получения терминов, связанных с записью, вы можете использовать wp_get_post_terms
.
Использование wp_get_post_terms
внутри цикла WordPress:
Для каждой записи вы получите её термины, вызвав wp_get_post_terms
следующим образом:
// Делаем что-то, если определённое значение массива существует в записи
$term_list = wp_get_post_terms($post->ID, 'your_taxonomy', array("fields" => "all"));
// Затем можно запустить цикл foreach для отображения терминов таксономии
foreach($term_list as $term_single) {
echo $term_single->slug; // делаем что-то здесь
}
Для использования вне цикла:
// Делаем что-то, если определённое значение массива существует в записи
// И каким-то образом вам нужно получить ID записи для передачи ниже
$term_list = wp_get_post_terms($post_id, 'your_taxonomy', array("fields" => "all"));
// Затем можно запустить цикл foreach для отображения терминов таксономии
foreach($term_list as $term_single) {
echo $term_single->slug; // делаем что-то здесь
}
Надеюсь, это поможет.

Спасибо, я проверю кодекс и дам знать, если всё заработает. Спасибо, что указал на это. - @the_dramatist

Привет, я протестировал все возможные скрипты, но ничего не выводит названия терминов для поста, который принадлежит CPT. Не могли бы вы любезно опубликовать код, который решит эту проблему? Обратите внимание, что мой код находится вне цикла, и я сейчас использую:
$args = array('post_type' => 'projects','number' => '1');
$terms = wp_get_post_terms($post_id, 'Client',array("fields" => "names"), $args);
foreach( $terms as $term ){
echo '<h5>' . $term->name . '</h5>'; }

Не могли бы вы уточнить, что именно вы пытаетесь достичь? Лучше отредактируйте вопрос и поясните подробнее! @rosh8111

Хорошо, у меня есть пользовательский тип записи под названием "projects", в нем я создал таксономию "Clients", где на бэкенде я ввожу клиентов. Таким образом, каждый раз при публикации проекта я выбираю клиента, которого хочу отобразить на фронтенде.

Итак, вам нужно отобразить термины, связанные с одним постом, верно? И внутри цикла WordPress или вне цикла WordPress? Если вне цикла, то в каком шаблоне - single.php
или archive.php
?

У меня есть собственный пользовательский шаблон, фактически эта страница загружается в пользовательском single.php, связанном с пользовательским типом записи. Я сообщу вам результаты, спасибо за помощь.

Я проверил код, который вы мне дали, к сожалению, он не возвращает никаких результатов, просто пустой вывод. Я пробовал даже с query post. Ничего не работает...

Сначала замените your_taxonomy
на название вашей таксономии clients
. Затем сделайте print_r($term_list)
и пришлите результат сюда вместе со скриншотом страницы администрирования вашей пользовательской таксономии. @rosh8111

[link]http://pad10.net/assets/tax_error.jpg, во вложении скриншот моей настройки и результатов, которые я получаю.

После нескольких исследований я нашел нижеприведенный скрипт, который выполняет работу. Спасибо @the_dramatist за указание правильного направления. Я использовал global $post, но не совсем корректным образом.
global $post;
$loop = new WP_Query(array('post_type' => 'myCPT', 'posts_per_page' => -1));
while ($loop->have_posts()) : $loop->the_post();
$terms = wp_get_post_terms($post->ID, 'my_taxonomy');
foreach($terms as $term_single) {
echo '' . $term_single->slug. '';
}
endwhile;
Если кто-то получает пустые результаты после этого, просто удалите категории и заново создайте и примените их.
