次のコードを使用して、カテゴリアーカイブページの現在のカテゴリからのランダムな投稿を表示します(archive.phpを使用)。ただし、タグまたは分類のアーカイブページでは、現在のタグまたは分類から投稿が正しく表示されません(カテゴリの制限により)。 TagとTaxonomy(またはCategoryとTagもTaxonomiesなので、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(); ?>
あなたはページのために質問されたオブジェクトをつかみ、動的にあなたの分類法の情報を記入する必要があるでしょう。
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
}
}
}
あなたがこのLoop に加えて _を必要としているのか、それともその代替として必要なのかは明確ではありません。メインクエリに代わるものであれば、アーカイブ機能が事実上削除されるため、これは「追加」であると思います。あなたは本当のアーカイブを持っていない、アーカイブからのランダムな投稿だけを持っていて、それだけではとてもフレンドリーではありません。
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()
ではなく、通常のループです。