web-dev-qa-db-fra.com

Comment afficher les messages de la taxonomie actuelle dans la page d'archives?

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(); ?>
2
Milo

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.

Référence

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

7
s_ha_dum

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.

1
birgire