wp_query: Как получить текущий термин slug в пользовательской таксономии?

Используя плагин WP Types , я настраиваю пользовательский тип сообщения (slug: portfolio ), который имеет пользовательскую таксономию (slug: portfolio-category ).

Таможенная таксономия имеет три элемента (пули: group1 , group2 , group3 ) для организации портфолио.

На каждой странице портфолио я показываю 3 связанных должности из одного и того же таксономического термина, отфильтрованного по slug:

 global $post; $term_list = wp_get_post_terms($post->ID, 'portfolio-category', array("fields" => "names")); $wpex_port_query = new WP_Query( array( 'post_type' => 'portfolio', 'showposts' => '3', 'orderby' => 'rand', 'post__not_in' => array($post->ID), 'no_found_rows' => true, 'tax_query' => array( array( 'taxonomy' => 'portfolio-category', 'field' => 'slug', 'terms' => $term_list, ) ) ) ); 

Это в основном работает, но мне интересно, есть ли лучший способ, чем создание глобальной переменной $post ? Каков рекомендуемый способ справиться с этим?

Я не уверен, какова ваша проблема, вы не создаете $post , просто получаете доступ к ней. Это очень распространенное зрелище в WordPress.

Однако с точки зрения API, идентификатор текущего сообщения – единственное, что вам нужно – используйте get_the_ID() чтобы получить именно это, не имея дело с глобальным.

Вы можете использовать get_queried_object_id() если по какой-то причине глобальная $post настоящее время не содержит объект post основного запроса, хотя wp_reset_postdata() должен исправить это, если это так. Как сказал Рарст, на самом деле не вредно попасть в глобальную $post , она уже существует.