Wordpress-Paginierung funktioniert nicht - Zeigt immer den Inhalt der ersten Seiten an

9

Ich arbeite an einer Website, auf der ich ein Blog habe, aber ich habe auch einen benutzerdefinierten Beitragstyp, mit dem ich einige Videos einfügen kann.

Ich möchte die Paginierung verwenden, damit bei mehr als 9 angezeigten Videos eine Paginierung auftritt.

Der erste Teil davon funktioniert. Die Videos sind in der Tat auf 9 pro Seite begrenzt und die Paginierung wird unten korrekt angezeigt.

Wenn ich jedoch auf den Link für die zweite Seite klicke, werden die Videos der ersten Seite angezeigt, obwohl sich die URL ändert.

Bei meinen "normalen" Blog-Posts funktioniert die Paginierung genau wie beabsichtigt.

Dies ist der aktuelle Code, den ich für meinen benutzerdefinierten Beitragstyp verwende:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Jede Hilfe wäre sehr dankbar.

Johnny
quelle

Antworten:

18

Warum Ihr aktueller Code fehlschlägt

Sie erhalten immer den Inhalt der ersten Seite, da die Folge von Parametern, die an einfache Anführungszeichenquery_posts gekapselt werden, verhindert, dass Variablen (sowie Escape-Sequenzen für andere Sonderzeichen als ) erweitert werden.$

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); würde sich um dieses Problem kümmern.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); würde auch.

Und schließlich, vorbei an einer Reihe von gemischten Argumente anstelle einer URL-Abfrage-String würde auch.

That being said aber man sollte nicht query_posts überhaupt verwenden :

Wie es gemacht werden soll

Gemäß Ihrem Kommentar haben Sie versucht, zu verwenden get_posts.
Das ist zwar eine sehr nützliche Funktion, aber nicht der richtige Weg, wenn Sie danach eine WordPress-Schleife verwenden möchten . get_postsGibt ein Array von Post-Objekten zurück - die Eigenschaft des WP_QueryObjekts posts. Aber nur diese eine Eigenschaft, ohne all die anderen Extras und Methoden, die WP_Querybietet.

Um mit dem obigen Code-Snippet fortzufahren, gehen Sie wie folgt vor:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* The Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // do something
        }
    } else {
        echo 'Sorry, no posts found.';
    }
?>
Johannes Pille
quelle
1
Vielen Dank dafür, interessante Lektüre. Bitte geben Sie die Alternative jedoch mit der Methode get_posts () an. Ist es so einfach wie: <? Php $ paged = (get_query_var ('paged'))? get_query_var ('paged'): 1; get_posts ("post_type = videos & posts_per_page = 9 & paged = $ paged"); ?> Das funktioniert bei mir eigentlich nicht, aber das könnte an anderem Code liegen?
Johnny
1
Siehe aktualisierte Antwort.
Johannes Pille
2
Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu zeigen, wie man das benutzt. Ich weiß das wirklich zu schätzen.
Johnny