WordPress query_posts orderby rand funktioniert nicht in der Kategoriearchivvorlage

Lesezeit: 3 Minuten

Benutzer-Avatar
iiz

Ich kann mein WordPress-Design nicht dazu bringen, die Beiträge, die ich in den Kategoriearchiven anzeige, zufällig anzuordnen [I’m using it as a CMS]. Die Homepage randomisiert normal, und das bin ich [I think] Korrekte Änderung der WP_query. Unten ist das genaue args-Array:

array(4) { ["orderby"]=> string(4) "rand" ["order"]=> string(3) "ASC" ["posts_per_page"]=> string(2) "-1" ["category_name"]=> string(8) "branding" }

Zum leichteren Lesen ist es:

orderby => rand
order => ASC
posts_per_page => -1
category_name => branding (or whatever the query_string brings in)

Ich bekomme alle Posts aus der Kategorie, aber sie sind in der Reihenfolge des Post-Datums.

Irgendwelche Hinweise? oder alternative Methoden zum Mischen des Ergebnisses meiner WP_query in den have_posts?

Vielen Dank.

************EDIT************

Entschuldigung, ich hätte das args-Array oben deutlicher machen sollen. Es ist ein var_dump des Abfragearrays, nicht meine Argumente, die ich der Abfrage hinzufüge.

    $args = array(
        'orderby'        => 'rand',
        'order'      => 'ASC',
        'posts_per_page' => '-1',
    );
    global $wp_query;           
    remove_all_filters('posts_orderby');
    $theq = array_merge($args, $wp_query->query);
    query_posts($theq);

Ich habe die remove_all_filters gemäß dem Vorschlag von Sheikh Heera hinzugefügt, aber es hat keinen Unterschied gemacht.

Benutzer-Avatar
Paul Phillips

Vielleicht ist es dann besser, eine neue Abfrage zu erstellen. Dies sollte jedoch nur in einer Taxonomievorlage wie category.php oder taxonomy-yourcustomtaxonomy.php verwendet werden.

global $wp_query;

$term = $wp_query->queried_object;

$args=array(
    'orderby' => 'rand',
    'posts_per_page' => -1,
    'post_type' => 'post',
    'tax_query' => array(
            array(
                'taxonomy'  => $term->taxonomy,
                'field'     => 'slug',
                'terms'     => $term->slug,
                )
            )
    );

$new_query = null;
$new_query = new WP_Query($args);

while ($new_query->have_posts()) : $new_query->the_post(); ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <h2 class="entry-title"><a href="https://stackoverflow.com/questions/10918814/<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div class="entry-meta"><?php // Meta ?></div><!-- .entry-meta -->
        <div class="entry-content"><?php the_content(); ?></div>
    </div>
<?php
endwhile;
wp_reset_postdata();

  • Danke, dass die Randomisierung richtig funktioniert hat. Beachten Sie für alle anderen Betrachter, dass Sie für eine tax_query der Kategorie das obige Argumentarray bearbeiten müssen, um: 'taxonomy' => 'category', 'field' => 'slug', 'terms' => array( 'the_category_name' )

    – d.h

    19. Juni 2012 um 15:23 Uhr


Es könnte ein anderes Plugin sein, das das Problem verursacht, aber Sie können wie folgt vorgehen

remove_all_filters('posts_orderby');
$args=array(
    orderby => 'rand'
    order => 'ASC'
    posts_per_page => -1
    category_name => 'branding'
);
query_posts($args);

Aber denken Sie daran, dass Sie mit dieser Lösung die Funktionalität eines Plugins zerstören können, aber es könnte nützlich sein, das Problem zu lösen, aber möglicherweise nicht perfekt.

  • Hi & thnx, ich habe diesen Vorschlag ausprobiert, aber es hat keinen Unterschied gemacht. Ich habe meiner Frage weitere Details und Code hinzugefügt.

    – d.h

    7. Juni 2012 um 9:22 Uhr

Ich denke, Sie möchten es mit der ursprünglichen Abfrage zusammenführen. Die Kategorie muss dann nicht angegeben werden und funktioniert auch auf diese Weise, wenn eine benutzerdefinierte Taxonomie verwendet wird.

$args = array(
    'posts_per_page' => -1,
    'orderby' => 'rand'
    );

query_posts( array_merge( $wp_query->query, $args) ); 

  • Hi & thnx, aber ich mache das schon. Ich habe einige weitere Details und meinen vollständigen Code hinzugefügt.

    – d.h

    7. Juni 2012 um 9:21 Uhr

  • Und du benutzt while ( have_posts() ) : the_post(); danach ganz normal? Sie müssen die nicht einschließen order => ASC da es sowieso zufällig ist.

    – Paul Philips

    7. Juni 2012 um 14:10 Uhr


  • Ja. Nach der Abfrage habe ich: if ( have_posts() ) : while (have_posts() ) : the_post(); $count = $wp_query->current_post + 1; $meta = get_post_custom(); und dann direkt zur Schleife

    – d.h

    7. Juni 2012 um 14:15 Uhr


1085950cookie-checkWordPress query_posts orderby rand funktioniert nicht in der Kategoriearchivvorlage

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy