webentwicklung-frage-antwort-db.com.de

Wie zeige ich einen Beitrag aus der aktuellen Taxonomie auf der Archivseite an?

Ich verwende den folgenden Code, um einen zufälligen Beitrag aus der aktuellen Kategorie auf der Kategoriearchivseite anzuzeigen (mit archive.php). Wenn Sie sich jedoch auf Tag- oder Taxonomie-Archivseiten befinden, wird der Beitrag aus dem aktuellen Tag oder der aktuellen Taxonomie nicht korrekt angezeigt (nur aufgrund der Einschränkung der Kategorie). Wie kann ich ändern, damit es mit Tag und Taxonomie funktioniert (oder einfach nur Taxonomie, da Kategorie und Tag auch Taxonomien sind)? Vielen Dank!

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

Bearbeiteter Code in Bezug auf die Antwort von 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

Sie müssen das abgefragte Objekt für die Seite abrufen und Ihre Taxonomie-Informationen dynamisch eingeben.

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

Es ist nicht klar, ob Sie diese Schleife zusätzlich zu der Hauptschleife oder als Ersatz dafür benötigen. Ich gehe davon aus, dass dies "zusätzlich" ist, da es die Archivierungsfunktionalität effektiv entfernen würde, wenn es die Hauptabfrage ersetzen würde. Sie haben keine echten Archive, nur einen zufälligen Beitrag aus dem Archiv, der für sich genommen nicht sehr freundlich ist.

Sie können die Archivvorlagen category.php und tag.php verwenden, um Tags und Kategorien separat zu verarbeiten. Sie müssen archive.php nicht verwenden.

Referenz

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

7
s_ha_dum

Sie können die Hauptabfrage mit einem benutzerdefinierten pre_get_posts-Hook verwenden:

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

}

und die übliche Schleife anstelle der zusätzlichen WP_Query().

1
birgire