J'utilise le code suivant pour afficher une publication aléatoire de la catégorie dans la page d'archives de la catégorie (en utilisant archive.php). Toutefois, dans les pages d'archive Tag ou Taxonomy, la publication n'est pas correctement affichée à partir de la balise ou de la taxonomie actuelle (en raison de la limitation de la catégorie uniquement). Comment puis-je modifier pour le faire fonctionner avec Tag et Taxonomy (ou simplement Taxonomy puisque Catégorie et Tag sont aussi des Taxonomies). Merci!
// 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();
Code édité dans concernant la réponse de 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(); ?>
Vous devrez saisir l'objet interrogé pour la page et remplir vos informations de taxonomie de manière dynamique.
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
}
}
}
Il n'est pas clair si vous avez besoin de cette boucle en plus de la boucle principale ou en remplacement de celle-ci. Je suppose que ceci est "en plus" car cela supprimerait efficacement la fonctionnalité d'archivage si cela remplaçait la requête principale. Vous n’avez pas d’archives réelles, mais une publication aléatoire des archives qui n’est pas très conviviale.
Vous pouvez utiliser les modèles d'archive category.php
et tag.php
pour traiter les balises et les catégories séparément. Vous n'avez pas besoin d'utiliser archive.php
.
http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
http://codex.wordpress.org/Function_Reference/get_queried_object
Vous pouvez envisager d'utiliser la requête principale avec un hook pre_get_posts
personnalisé:
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 );
}
}
et la boucle habituelle, au lieu de la WP_Query()
supplémentaire.