WordPress-Paginierung funktioniert nicht

Lesezeit: 7 Minuten

Wordpress Paginierung funktioniert nicht
verdammt

Ich habe mehrere Lösungen ausprobiert, aber es funktioniert nicht.

Wenn ich zu /page/2 gehe, funktioniert es nicht.

Ich führe eine benutzerdefinierte Abfrage in index.php meines Designs aus.

if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
    $paged = get_query_var('page');
} else {
    $paged = 1;
}

$args = array(
    'post_type' => array('post', 'music', 'videos'),
    'post_status' => 'publish',
    //'meta_key' => 'featured',
    //'meta_value' => '1',
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged
);

query_posts($args);

Hier der Link zu meiner Website: Startseite meiner Website

Diese Seite funktioniert nicht (wirft 404) – Seite, die nicht funktioniert(im Format – meinewebsite/seite/2/)

Habe gerade festgestellt, dass diese Seite 2 funktioniert – Seite die funktioniert (im Format – meinewebsite.com/?page=2)

  • wordpress.se würde sich meiner Meinung nach um diese Frage kümmern

    – John

    7. Dezember 2012 um 18:32 Uhr

  • Ich habe mehrere Lösungen ausprobiert, aber es funktioniert nicht.

    – Mist

    7. Dezember 2012 um 18:34 Uhr

  • wordpress.stackexchange.com ist eine Seite wie diese, aber speziell für WordPress-Fragen. Sie machen dort drüben nichts als WordPress-Zeugs, also wenn Sie hier nicht genug Antworten bekommen, versuchen Sie es dort.

    – John

    7. Dezember 2012 um 18:35 Uhr

  • Hier finden Sie eine gute Übersicht über Abfrageposts und Paginierung: codex.wordpress.org/…

    – keine Ponys

    12. Dezember 2012 um 7:37 Uhr

1647317348 110 Wordpress Paginierung funktioniert nicht
GregT

Ich hatte das gleiche Problem und das hat alles für mich behoben. Dadurch kann ich sowohl auf index.php als auch auf meiner page.php mit hübschen Permalinks paginieren.

HTML/PHP:

<?php
    //Fix homepage pagination
    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } else if ( get_query_var('page') ) {$paged = get_query_var('page'); } else {$paged = 1; }

    $temp = $wp_query;  // re-sets query
    $wp_query = null;   // re-sets query
    $args = array( 'post_type' => array('post', 'music', 'videos'), 'orderby'=>'date', 'order'=>'DESC', 'posts_per_page' => 10, 'paged' => $paged);
    $wp_query = new WP_Query();
    $wp_query->query( $args );
    while ($wp_query->have_posts()) : $wp_query->the_post(); 
?>

<!--your loop stuff here -->

<?php endwhile; ?>
<nav>
   <?php paginate(); ?>
   $wp_query = null;
   $wp_query = $temp; // Reset
</nav>

Dies ermöglicht mehrere Dinge. Einmal prüft es, ob Sie auf Home, Page oder Single sind und teilt der $paged-Variablen mit, wie sie darauf reagieren soll. Außerdem können Sie Ihre Paginierung mit benutzerdefinierten Beitragstypen abfragen. Wenn Sie query_post nicht verwenden, können Sie auch einige wirklich abgefahrene Dinge vermeiden, die Sie manchmal bekommen, wenn Sie es verwenden. Die paginate(); ist eine benutzerdefinierte Funktion, die wir jetzt einbringen:

Innerhalb Ihrer functions.php

function paginate() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;

$pagination = array(
    'base' => @add_query_arg('page','%#%'),
    'format' => '',
    'total' => $wp_query->max_num_pages,
    'current' => $current,
    'show_all' => true,
    'type' => 'list',
    'next_text' => '&raquo;',
    'prev_text' => '&laquo;'
    );

if( $wp_rewrite->using_permalinks() )
    $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );

if( !empty($wp_query->query_vars['s']) )
    $pagination['add_args'] = array( 's' => get_query_var( 's' ) );

echo paginate_links( $pagination );
}

Diese stammte ursprünglich aus http://bavotasan.com/2011/simple-pagination-for-wordpress/ Ich habe es leicht modifiziert, damit die Paginierung auf der Homepage funktioniert.

Dies bewirkt wiederum mehrere Dinge. Es paginiert Ihre Seite, wobei jede Seite einen eigenen Link erhält (was ich nett finde) und es schreibt auch die URL neu, um hübsche Permalinks zu ermöglichen. Wenn Sie den Link überprüfen, wurde teilweise die Variable ‘s’ anstelle von ‘paged’ verwendet. Ich habe das ‘s’ durch ‘paged’ ersetzt und bei mir hat alles perfekt funktioniert.

Optionale Gestaltung der Paginierung

ul.page-numbers {
    margin: 20px 0 10px;
    width: 100%;
    padding: 0;
    font-size: 12px;
    line-height: normal;
    clear: both;
    float: left;
}

ul.page-numbers li {
       float: left;
    }

ul.page-numbers a,
ul.page-numbers span {
    border-radius: 3px;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    background: -webkit-gradient(linear, left top, left bottom, from(#E4E3E3), to(#FFFFFF));
    background: -moz-linear-gradient(top,  #E4E3E3,  #FFFFFF);
    filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr="#E4E3E3", endColorstr="#FFFFFF");
    padding: 3px 4px 2px 4px; 
    margin: 2px;
    text-decoration: none;
    border: 1px solid #ccc;
    color: #666;
}

ul.page-numbers a:hover,
ul.page-numbers span.current {  
    border: 1px solid #666;
    color: #444;
}

Bearbeiten
Später stellte ich fest, dass die Paginierung der Homepage nach dem Klicken auf einen der Seitenreiter unterbrochen wurde. Ich habe dies behoben, indem ich die bedingte Anweisung ersetzt und diese an ihre Stelle gesetzt habe. Ich habe meinen Code oben auch aktualisiert.

$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 'page', get_pagenum_link( 1 ) ) ) . '?page=%#%/', 'paged' );

  • +1 FANTASTISCH !!!!!! Das ist DIE PERFEKTE ANTWORT! Bei mir hat es auf WP 3.5+ einwandfrei funktioniert. Danke an TONNNNNNNN!

    – Devner

    15. Juni 2013 um 15:15 Uhr

Manchmal habe ich auch Probleme, die Paginierung richtig zu machen. Versuchen Sie, die folgende Abfrage zu verwenden, und sehen Sie, ob das hilft. Ich habe im Grunde nur eine Codezeile hinzugefügt und Ihre Abfrage so geändert, dass sie nicht verwendet wird $args Variable.

<?php

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

query_posts( array(
    'post_type' => array(
        'post',
        'music',
        'videos',
    ),
    'post_status' => 'publish',,
    'posts_per_page' => 10,
    'orderby'=>'date',
    'order'=>'DESC',
    'paged' => $paged )
);

if (have_posts()) : while (have_posts()) : the_post();

?> 

    // Display your content here    

    <?php the_title ?>

    <?php the_content(); ?>

<?php endwhile; endif; ?>

  • Haben Sie mehr als 10 Beiträge? Schließen Sie die Seitennavigationslinks ein?

    – AndyWarren

    8. Dezember 2012 um 19:25 Uhr

  • Ja, ich habe mehr als 10 Posts und füge Links zur Seitennavigation hinzu.

    – Mist

    8. Dezember 2012 um 19:59 Uhr

  • Ich habe einen Link zu meiner Website hinzugefügt, könnte dies hilfreich sein?

    – Mist

    8. Dezember 2012 um 20:19 Uhr

  • Leider hilft der Website-Link nicht wirklich, da wir den PHP-Code nicht sehen können. Versuchen Sie, Ihre Permalinks zu aktualisieren. Gehen Sie einfach in Permalinks und speichern Sie sie erneut. Verwenden Sie das WP-PageNavi-Plugin? Es sieht so aus, als ob Ihre Seitenlinks von diesem Plugin stammen.

    – AndyWarren

    8. Dezember 2012 um 21:39 Uhr

  • Ich habe versucht, Permalinks erneut zu speichern, aber es hat auch nicht funktioniert. Ja, mit wp-pagenavi

    – Mist

    9. Dezember 2012 um 12:30 Uhr

Ich habe seit einiger Zeit mit diesem Problem zu kämpfen, es stellte sich heraus, dass unser WordPress eines der erforderlichen Felder nicht für mich einstellte, max_num_pages.

Also setze ich diese Variable innerhalb der Schleife. Hier ist mein Beispielcode.

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array('post_type' => 'cpt', 'paged'=>$paged, 'posts_per_page' => 3);
$loop = new WP_Query($args);
$GLOBALS['wp_query']->max_num_pages = $loop->max_num_pages; // This is the line that did the magic for me.

Beim weiteren Lesen fand ich das heraus;

  1. Auf single.php, singular.php und anderen Single-View-Templates: (int) $page Ist die Seite des Beitrags, wie von der Abfrage-Variablenseite angegeben: get_query_var( 'page' );
  2. Bei allen Arten von archive.php und ähnlichen Archiv-/Post-Typ-Listenansichtsvorlagen: (int) $paged Ist die globale Variable enthält die Seitenzahl einer Auflistung von Beiträgen (wie in Archiven).

Dies bedeutet, dass Sie diese Variable festlegen müssen, wenn Sie sich auf einer Seitenvorlage (die eine Einzelansichtsvorlage ist) befinden und eine Schleife verwenden.

Ein paar Dinge hier, ändern Sie niemals die Hauptabfrage für eine benutzerdefinierte Abfrage auf Ihrer Homepage oder auf einer Archivseite. Sie werden immer Probleme mit der Paginierung haben.

Auch niemals verwenden query_posts um eine benutzerdefinierte Abfrage zu erstellen. Meine Betonung, wie in nie.

Notiz: Diese Funktion ist nicht dafür gedacht, von Plugins oder Themes verwendet zu werden. Wie später erklärt wird, gibt es bessere, leistungsfähigere Optionen, um die Hauptabfrage zu ändern. query_posts() ist eine zu einfache und problematische Möglichkeit, die Hauptabfrage einer Seite zu ändern, indem sie durch eine neue Instanz der Abfrage ersetzt wird. Es ist ineffizient (führt SQL-Abfragen erneut aus) und schlägt unter bestimmten Umständen völlig fehl (besonders häufig, wenn es um die Paginierung von Beiträgen geht).

Wenn Sie das Verhalten der Homepage oder einer Archivseite ändern müssen, verwenden Sie pre_get_posts` um die Hauptabfrage zu ändern/zu modifizieren, bevor sie ausgeführt wird. Dies ist der richtige Weg, um die Hauptabfrage zu ändern. Indem Sie die Hauptabfrage vor der Ausführung ändern, haben Sie kein Problem mit der Paginierung.

pre_get_posts kann in Verbindung mit Bedingungs-Tags verwendet werden, um auf bestimmte Seiten abzuzielen. Sehen Sie sich die Links für Beispiele an.

1003890cookie-checkWordPress-Paginierung funktioniert nicht

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

Privacy policy