Ich kann mein Plugin nicht paginieren

Lesezeit: 4 Minuten

Ich habe einen Code eines von mir erstellten Plugins, der eine benutzerdefinierte Tabelle anzeigt, und ich muss Paging hinzufügen.

Dieser Code zeigt Paginierung und Ergebnisse an, funktioniert aber nicht, wenn Sie auf die folgenden Seiten klicken (1, 2, 3 … usw.), zeigt aber dasselbe an.

Das ist mein Code:

$per_page = 3;
$page = intval(get_query_var('page')); // cast to int to be on the safe side
$total_pages = ceil($wpdb->get_var("SELECT COUNT(*) FROM wp_puntos_log") / $per_page);  


//use $wpdb->prepare to help against sql injection
$sql  = $wpdb->prepare("SELECT * FROM wp_puntos_log LIMIT %d, %d", $page * per_page, $per_page);

$mylink = $wpdb->get_results($sql);

foreach ($mylink as $mostrar) 
{

echo"
        <tr>
            <td>".$mostrar->punto_user_ID."</td>
            <td>".$mostrar->punto_nombre."</td>
            <td>".number_format($mostrar->punto_canjeados, 0, ',', '.')."</td>
            <td>".cambiarFormatoFecha($mostrar->punto_fecha)."</td>";

}

echo"       </tr>
    </tbody>
</table>";

$big=999999999; // dummy used by 'base' below

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?page=%#%',
    'current' => max( 1, $page ),
    'total' => $total_pages,
) );

Lange versucht und nicht funktioniert. Ich schätze Ihre Hilfe.

Grüße!

Ich kann mein Plugin nicht paginieren
Piotr Kaluza

Bearbeiten: (Ich habe das Problem in der ursprünglichen Antwort gefunden, ich habe das $-Zeichen vermisst

$sql  = $wpdb->prepare("SELECT * FROM wp_puntos_log LIMIT %d, %d", $page * per_page, $per_page);

sollte sein:

$sql  = $wpdb->prepare("SELECT * FROM wp_puntos_log LIMIT %d, %d", $page * $per_page, $per_page);

  • Es funktioniert nicht. Das war jetzt und immer noch dasselbe: $per_page = 3; $page = intval(get_query_var('page')); // cast to int to be on the safe side $total_pages = ceil($wpdb->get_var("SELECT COUNT(*) FROM wp_puntos_log") / $per_page); //use $wpdb->prepare to help against sql injection $next_page = $page+1; $sql=$wpdb->prepare("SELECT * FROM wp_puntos_log LIMIT %d, %d", $page * per_page, $next_page*$per_page);

    – Nacho Sarmiento

    5. Dezember 2012 um 16:32 Uhr

  • Ich werde Ihnen bald die richtige Version besorgen, ich muss nur diesen Code, den ich aus dem Gedächtnis geschrieben habe, tatsächlich ausführen

    – Piotr Kaluza

    5. Dezember 2012 um 16:35 Uhr


  • Funktioniert immer noch nicht! : (Wenn ich zu Seite 2 oder 3 gehe, zeigt es immer noch dasselbe von Seite 1 und markiert auch die aktuelle Seite (bleibt immer noch auf Seite 1). URL in der Navigationsleiste ist: options-general.php?page=ver_puntos.php&paged=2

    – Nacho Sarmiento

    5. Dezember 2012 um 17:25 Uhr

  • seltsam, funktioniert hier. Versuchen Sie noch etwas. Ändern Sie die Zeile $page = get_query_var(“page”) in get_query_var(“paged”)

    – Piotr Kaluza

    5. Dezember 2012 um 17:51 Uhr


  • Wenn Sie noch Hilfe benötigen, posten Sie Ihren Code irgendwo und geben Sie einen Link an

    – Piotr Kaluza

    5. Dezember 2012 um 17:59 Uhr

<?php
/* Plugin Name: Pagination */

function pag_test() {
global $wpdb;
echo "<h1> Custom Pagination Example </h1>";
$per_page = 3;
$page = intval($_GET['paged']); // cast to int to be on the safe side
$total_pages = floor($wpdb->get_var("SELECT COUNT(*) FROM wp_options") / $per_page);  


//use $wpdb->prepare to help against sql injection
$sql  = $wpdb->prepare("SELECT * FROM wp_options LIMIT %d, %d", max($page-1, 0) * $per_page, $per_page);

$mylink = $wpdb->get_results($sql);
?> <table> 
<thead>
<tr>
<th> Option </th>
<th> Value </th>
</tr>
<?php foreach ($mylink as $mostrar) 
{

echo"
        <tr>
            <td>".$mostrar->option_name."</td>
            <td>".$mostrar->option_value."</td>
";}

echo"       </tr>
    </tbody>
</table>";


$big=999999999; // dummy used by 'base' below

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?page=%#%',
    'current' => max( 1, $page ),
    'total' => $total_pages,
) );


}
function pag_addmenu() {
add_menu_page('Pagination', 'pagination', 'manage_options', 'pgtest', pag_test);
}
add_action('admin_menu', 'pag_addmenu');
?>

  • Hier ist ein funktionierendes Beispiel. Ich habe die wp_options-Tabelle verwendet, weil ich Ihre Daten nicht habe. Der Schlüssel war, $page = $_GET zu verwenden[‘paged’] statt get_query_var. Ich habe auch einen kleinen Fehler im Code bemerkt, bei dem die Seite 1 wäre und Sie den ersten Datensatz nicht sehen würden, der getestet wurde und zu 100% funktioniert

    – Piotr Kaluza

    6. Dezember 2012 um 0:47 Uhr


  • Perfekt! Das Paging funktioniert! 🙂 Das einzige Problem ist, dass weniger entsprechende Ergebnisse angezeigt werden. Es gibt 8 Einträge in der Datenbank und wenn ich wähle, 3 Ergebnisse pro Seite anzuzeigen, werden nur 6 Ergebnisse (2 Seiten) angezeigt und sollten 3 Seiten anzeigen: Die erste mit 3 Ergebnissen, die zweite mit 3 Ergebnissen und die dritte mit 2 Ergebnissen . Ich schätze Ihre Hilfe und Ihre Zeit sehr!

    – Nacho Sarmiento

    6. Dezember 2012 um 21:49 Uhr

  • Das Problem ist mit $total_pages 8 / 3 = 2,66 floor(2,66) = 2. Vielleicht möchten Sie die Untergrenze (die abgerundet wird) in eine Obergrenze ändern, damit sie aufgerundet wird. In einigen Fällen kann es zu einer zusätzlichen leeren Seite kommen

    – Piotr Kaluza

    8. Dezember 2012 um 23:15 Uhr


995770cookie-checkIch kann mein Plugin nicht paginieren

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

Privacy policy