Вывод терминов для пользовательских типов записей
Мне удалось вывести все термины, принадлежащие пользовательской таксономии, с помощью следующего кода:
$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
Roshan Deshapriya
Привет, я протестировал все возможные скрипты, но ничего не выводит названия терминов для поста, который принадлежит 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>'; }
Roshan Deshapriya
Не могли бы вы уточнить, что именно вы пытаетесь достичь? Лучше отредактируйте вопрос и поясните подробнее! @rosh8111
CodeMascot
Хорошо, у меня есть пользовательский тип записи под названием "projects", в нем я создал таксономию "Clients", где на бэкенде я ввожу клиентов. Таким образом, каждый раз при публикации проекта я выбираю клиента, которого хочу отобразить на фронтенде.
Roshan Deshapriya
Итак, вам нужно отобразить термины, связанные с одним постом, верно? И внутри цикла WordPress или вне цикла WordPress? Если вне цикла, то в каком шаблоне - single.php или archive.php?
CodeMascot
У меня есть собственный пользовательский шаблон, фактически эта страница загружается в пользовательском single.php, связанном с пользовательским типом записи. Я сообщу вам результаты, спасибо за помощь.
Roshan Deshapriya
Я проверил код, который вы мне дали, к сожалению, он не возвращает никаких результатов, просто пустой вывод. Я пробовал даже с query post. Ничего не работает...
Roshan Deshapriya
Сначала замените your_taxonomy на название вашей таксономии clients. Затем сделайте print_r($term_list) и пришлите результат сюда вместе со скриншотом страницы администрирования вашей пользовательской таксономии. @rosh8111
CodeMascot
[link]http://pad10.net/assets/tax_error.jpg, во вложении скриншот моей настройки и результатов, которые я получаю.
Roshan Deshapriya
После нескольких исследований я нашел нижеприведенный скрипт, который выполняет работу. Спасибо @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;
Если кто-то получает пустые результаты после этого, просто удалите категории и заново создайте и примените их.