¿Cómo mostrar las publicaciones de la taxonomía actual en la página de archivo?

2

Estoy usando el siguiente código para mostrar una publicación aleatoria de la categoría actual en la página de archivo de la categoría (usando archive.php). Sin embargo, cuando se encuentra en las páginas de archivo de Etiqueta o Taxonomía, la publicación no se muestra correctamente desde la Etiqueta o Taxonomía actual (debido a la limitación de la categoría solamente). ¿Cómo puedo modificar para que funcione con la etiqueta y la taxonomía (o solo con la taxonomía ya que la categoría y la etiqueta también son taxonomías). Gracias!

// 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();

Código editado en relación con la respuesta 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(); ?>
    
pregunta Milo 08.06.2013 - 17:44

2 respuestas

7

Deberá tomar el objeto consultado para la página y completar la información de su taxonomía de forma dinámica.

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
        }
    }
} 

No está claro si necesita este Loop además de el Loop principal o como un reemplazo para este. Supongo que esto es "además", ya que eliminaría la funcionalidad del archivo si reemplazara la consulta principal. No tienes archivos reales, solo una publicación aleatoria del archivo que no es muy amigable por sí mismo.

Puede usar las plantillas de archivo category.php y tag.php para procesar etiquetas y categorías por separado. No es necesario utilizar archive.php .

Referencia

enlace
enlace

    
respondido por el s_ha_dum 08.06.2013 - 18:43
1

Podría considerar usar la consulta principal con un gancho personalizado 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 );
    }

}

y el bucle habitual, en lugar del WP_Query() adicional.

    
respondido por el birgire 08.06.2013 - 18:36

Lea otras preguntas en las etiquetas