Мне нужно заполнить параметр terms в моем tax_query текущим сроком публикации.
Я пытаюсь использовать функцию WP wp_get_post_terms в переменной, а затем ссылаюсь на эту переменную в параметре параметров, чтобы ввести имя текущего имени.
Я использую страницу codex как ссылку, но я не могу заставить ее заполнять.
Может кто-то указать мне верное направление??
//Returns Array of Term Names for "topic" $term_list = wp_get_post_terms($post->ID, 'topic', array("fields" => "names")); echo $term_list; $args = array ( 'post_type' => 'knowledge-base', 'orderby' => 'meta_value_num', 'meta_key' => 'top_four_num', 'tax_query' => array( array( 'taxonomy' => 'topic', 'field' => 'slug', 'terms' => $term_list, ), ), ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); echo '<h2>' . the_title() . '</h2>'; } } // Restore original Post Data wp_reset_postdata();
Любая помощь высоко ценится!
У вас здесь пара проблем.
Как ваш стенд кода, $post
не определено. На самом деле лучше использовать get_the_ID()
чтобы получить идентификатор сообщения вместо $post
wp_get_post_terms()
делает дополнительный вызов db, поэтому, если вы действительно настроены на производительность, я предпочел бы использовать get_the_terms()
Вы возвращаете имена терминов, но затем tax_query
параметр field
в вашем tax_query
для slug
. Значение поля должно соответствовать значению переданного термина. Просто заметьте, никогда не используйте поле name
в tax_query
, есть проблема с санацией имени в классе WP_Tax_Query
. Если вы используете wp_get_post_terms()
, установите для параметра fields
значение ids
для возврата массива терминов ids
wp_get_post_terms()
$term_list = wp_get_post_terms( get_the_ID(), 'topic', array( 'fields' => 'ids' ) ); if ( $term_list && !is_wp_error( $term_list ) ) { $args = array ( 'post_type' => 'knowledge-base', 'orderby' => 'meta_value_num', 'meta_key' => 'top_four_num', 'tax_query' => array( array( 'taxonomy' => 'topic', 'terms' => $term_list, ), ), ); // Run your custom query here }
get_the_terms()
$terms = get_the_terms( get_the_ID(), 'topic' ); if ( $terms && !is_wp_error( $terms ) ) { $term_list = wp_list_pluck( $terms, 'term_id' ); $args = array ( 'post_type' => 'knowledge-base', 'orderby' => 'meta_value_num', 'meta_key' => 'top_four_num', 'tax_query' => array( array( 'taxonomy' => 'topic', 'terms' => $term_list, ), ), ); // Run your custom query here }