Как отобразить сообщение из текущей таксономии на странице архива?

Я использую следующий код, чтобы отображать случайную запись из текущей категории в категории архивной страницы (используя archive.php). Однако, когда в архивных страницах Tag или Taxonomy сообщение не отображается правильно из текущего тега или таксономии (из-за ограничения только категории). Как я могу изменить, чтобы он работал с тегом и таксономией (или просто таксономией, поскольку категория и тег также являются таксономиями). Благодаря!

// assign the variable as current category $currentcategory = $cat; // concatenate the query $args = 'showposts=1&cat=' . $currentcategory . '&orderby=rand'; $random_query = new WP_Query( $args ); // The Loop if ( $random_query->have_posts() ) { while ( $random_query->have_posts() ) { $random_query->the_post(); // custom template for the random post } } else { // no posts found } // Restore original Post Data wp_reset_postdata(); 

Отредактированный код в отношении ответа s_ha_dum:

 <?php // The Query if (is_tax() || is_category() || is_tag() ){ $qobj = $wp_query->get_queried_object(); // concatenate the query $args = array( 'posts_per_page' => 1, 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => $qobj->taxonomy, 'field' => 'id', 'terms' => $qobj->term_id ) ) ); } $random_query = new WP_Query( $args ); // The Loop if ( $random_query->have_posts() ) { while ( $random_query->have_posts() ) { $random_query->the_post(); ?> //HTML tempalte <?php } } else { // no posts found } /* Restore original Post Data */ wp_reset_postdata(); ?> 

Solutions Collecting From Web of "Как отобразить сообщение из текущей таксономии на странице архива?"

Вам нужно будет захватить запрошенный объект для страницы и динамически заполнить вашу таксономическую информацию.

 if (is_tax() || is_category() || is_tag() ){ $qobj = get_queried_object(); // var_dump($qobj); // debugging only // concatenate the query $args = array( 'posts_per_page' => 1, 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => $qobj->taxonomy, 'field' => 'id', 'terms' => $qobj->term_id, // using a slug is also possible // 'field' => 'slug', // 'terms' => $qobj->name ) ) ); $random_query = new WP_Query( $args ); // var_dump($random_query); // debugging only if ($random_query->have_posts()) { while ($random_query->have_posts()) { $random_query->the_post(); // Display } } } 

Неясно, нужна ли вам эта петля в дополнение к основной петле или в качестве замены для нее. Я предполагаю, что это «дополнительно», поскольку он эффективно удалит функциональность архива, если он заменит основной запрос. У вас нет реальных архивов, просто случайный пост из архива, который не очень дружелюбен сам по себе.

Вы можете использовать tag.php архива category.php и tag.php для обработки тегов и категорий отдельно. Вам не нужно использовать archive.php .

Справка

http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
http://codex.wordpress.org/Function_Reference/get_queried_object

Вы можете использовать основной запрос с помощью пользовательского pre_get_posts :

 add_action( 'pre_get_posts', 'custom_pre_get_posts' ); function custom_pre_get_posts( $query ) { if ( is_admin() or ! $query->is_main_query() ) return; if ( is_archive() ) { $query->set( 'orderby', 'rand' ); $query->set( 'posts_per_page', 1 ); } } 

и обычный цикл, а не дополнительный WP_Query() .