it-swarm.com.de

Sicherstellen, dass klebrige Posts zuerst abgerufen werden (ohne zwei Abfragen zu verwenden)?

Ich muss die Paginierung für die Verwendung mit unendlicher Schriftrolle beibehalten.

Gibt es keine Möglichkeit, query_posts anzuweisen, erst klebrige Posts abzurufen?

Es scheint ein Standardverhalten in einem Standard-WordPress-Blog auf der Homepage zu sein, ist jedoch in einer benutzerdefinierten Vorlage für eine Seite etwas umständlich, soweit ich das beurteilen kann.

Vielen Dank.

Bearbeitet, um die aktuelle Abfrage anzuzeigen:

query_posts( array( 
    'post_type' => array('post', 'careers-post'),
    'paged' => $paged,
    'posts_per_page' => 6,
    'category__in' => $page_categories,
    'ignore_sticky_posts' => 0
) );

Edit 2: Scheint, als ob "category__in" einen Konflikt mit lange zurückliegenden Haftnotizen hat: http://wordpress.org/support/topic/category_in-ampamp- klebrig

Nur zur Bestätigung: Wenn Sie "category__in" entfernen, sprudeln klebrige Posts zwar wie erwartet nach oben, lösen das Problem jedoch offensichtlich nicht.

3
Kayo

Beim Durchstöbern des Quellcodes konnte ich keine seltsame Logik finden, die dazu führen würde, dass 'category__in' die Reihenfolge der Ergebnisse verändert. Wenn Sie dies tun, können Sie auch einen Fehler im WordPress Trac melden.

Es ist auch schwierig, diese Art von Problem zu reproduzieren, da dies möglicherweise von einem anderen Problem abhängt, das für Ihre Datenbank spezifisch ist oder davon, wie die Daten zuvor mit benutzerdefiniertem Code bearbeitet wurden.

Unabhängig davon können Sie mit ein wenig Aufwand diese Art von Problem immer umgehen. Hier ist etwas, das Ihre Abfrageergebnisse filtert und wichtige Beiträge nach oben sendet:

add_filter('the_posts', 'bump_sticky_posts_to_top');
function bump_sticky_posts_to_top($posts) {
    $stickies = array();
    foreach($posts as $i => $post) {
        if(is_sticky($post->ID)) {
            $stickies[] = $post;
            unset($posts[$i]);
        }
    }
    return array_merge($stickies, $posts);
}

Da Sie die Abfrage auf 6 Posts beschränken, sehe ich keine wesentlichen Auswirkungen auf die Verarbeitungszeit. Sie können die Funktion auch mit zusätzlichen Überprüfungen versehen, damit dieser Filter nur ausgeführt wird, wenn Sie diese spezielle Abfrage verwenden (obwohl ich mir vorstellen kann, wenn Sie nicht das Schlimmste tun, ist das Verdoppeln auf etwas, das WP hat schon gemacht).

Ich hoffe es hilft! Lass uns wissen, wie es geht.

9
Tomas Buteler