Verständnisproblem: showposts, posts_per_page, limit

  • Kann mir jemand sagen, wo die Unterschiede bei diesen 3 Parametern (showposts, posts_per_page und limit) liegen?

    Egal wie und wo (z.B. query_posts) ich diese verändere, die Anzahl bezieht sich scheinbar immer nur auf die Anzahl pro Seite, nie auf die Anzahl aller auszugebenden Datensätze.
    Soll heißen: Wie schaffe ich es per Plugin, WordPress mitzuteilen, dass er nur beispielsweise die letzten 6 erfassten Posts ausgeben soll (Startseite, Kategorien, Archiv, Feeds), wobei auf jeder Seite nur 3 Posts angezeigt werden sollen.
    Oder anders gefragt: Welche Funktionen bzw. Variablen muss ich ansprechen?

    Vielen Dank im Voraus für Eure Hilfe.

    VG Elke

    Es gibt keine dummen Fragen, es gibt nur dumme Antworten...
    http://u-portal.de/

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hm, also laut Codex:
    Template Tags/query posts « WordPress Codex
    ist posts_per_page eben die Anzahl der Beiträge pro Seite sein und showposts die Gesamtzahl der Posts. Limit wird dort nicht erwähnt, aber ich habe nicht in den Quelltext geschaut. Ist mir bisher nicht aufgefallen, falls da was nicht funktioniert, aber ich hab jetzt auch nicht wirklich Zeit zum Testen. :-/

  • Zitat

    ist posts_per_page eben die Anzahl der Beiträge pro Seite sein und showposts die Gesamtzahl der Posts.


    Das habe ich auch immer gedacht, aber m. E. funktioniert es nicht so, wie ich es mir vorstelle.
    Das Argument limit gibt es beim Tag query_posts nicht, das kann man aber beispielsweise mit dem Filter add_filter('post_limits', 'Funktionsname' );
    beeinflussen. Damit habe ich es leider auch nicht geschafft, die Gesamtanzahl zu beeinflussen.

    Hat noch jemand eine Idee?

    VG Elke

    Es gibt keine dummen Fragen, es gibt nur dumme Antworten...
    http://u-portal.de/

  • So, ich habe das jetzt doch mal lokal getestet, und Du hast recht, da passieren eher merkwürdige Dinge. Ein Blick in den Quelltext klärt das auch: In "wp-includes\query.php" gibt es die Funktion "&get_posts()", die macht die Arbeit beim Holen der Posts.

    Und da findet sich z.B. folgendes: Wenn posts_per_page nicht gegeben ist, wird der Wert aus den Optionen genommen. Wenn showposts gegeben ist, wird posts_per_page damit überschrieben. Soweit so unschön. Da kann man sich nun streiten, ob das so richtig ist. Da es keine verbindliche Dokumentation der API gibt, kann man aber nicht mal sagen, dass das wirklich falsch ist. :-(

    Was mich da nur sehr stutzig macht und was wohl kaum stimmen kann:

    PHP
    $posts = query_posts('posts_per_page=2&showposts=3');

    Da hätte ich ja eigentlich zwei Seiten erwartet, eine mit zwei und eine mit einem Beitrag. Gut, mit obigem Blick in den Quelltext würde ich eine Seite mit drei Beiträgen erwarten. Angezeigt werden mir aber 15 Seiten oder so, alle weiteren Seiten werfen aber einen 404. Liegt das nun am PageNavi-Plugin?!?

    Was Dein Problem betrifft: Müsste das nicht gehen, wenn Du posts_per_page mit 3 angibst und dann per Filter "limit = 6" ergänzt?!? Das schreibt sich dann direkt in die SQL-Query mit einer LIMIT-Anweisung, oder? Wobei die Frage wäre, ob sich da LIMIT und showposts vertragen, denn showposts müsste eigentlich ja auch schon ein Limit erzeugen?!?

  • Herzlichen Dank für die Mühe, die Du Dir gemacht hast.
    Auch wenn ich bislang noch nicht das Problem lösen kann, es beruhigt mich ungemein, dass auch Du dieses Problem hast. Ich fing schon an, an mir zu zweifeln.:-D

    Zitat

    So, ich habe das jetzt doch mal lokal getestet, und Du hast recht, da passieren eher merkwürdige Dinge. Ein Blick in den Quelltext klärt das auch: In "wp-includes\query.php" gibt es die Funktion "&get_posts()", die macht die Arbeit beim Holen der Posts.

    Danke für den Hinweis: Ich werde mir die besagte Datei und Funktion mal näher ansehen. Vielleicht finde ich ja da die Lösung.

    Zitat

    Da hätte ich ja eigentlich zwei Seiten erwartet, eine mit zwei und eine mit einem Beitrag.

    Das erwarte ich eigentlich auch.

    Zitat
    PHP
    $posts = query_posts('posts_per_page=2&showposts=3');

    Gut, mit obigem Blick in den Quelltext würde ich eine Seite mit drei Beiträgen erwarten.

    Lt. Codex müsste der Befehl dann so aussehen:

    PHP
    $posts = query_posts('page=2&showposts=3');

    Oder?

    Zitat

    Angezeigt werden mir aber 15 Seiten oder so, alle weiteren Seiten werfen aber einen 404. Liegt das nun am PageNavi-Plugin?!?

    Weiß ich nicht. Ich kenne es nicht.
    Welche WP Version nutzt Du?

    Was mir gerade einfällt:
    In einem anderem Zusammenhang benutze ich ebenfalls die Funktion get_posts(). Und auch da, wirft mir die Funktion zunächst die max. Anzahl pro Seite aus.
    Erst wenn ich das Argument 'numberposts=9999' setze, dann gibt er mir alle (d.h. max. 9999) Datensätze aus.
    Ich glaube, es lohnt sich wirklich der Funktionsweise von get_posts auf den Grund zu gehen. Ich bin mir (fast) sicher, dass dort das Übel zu finden ist.

    Nebenbei: Gibt es eine andere Funktion, die grundsätzlich alle Beiträge auswirft? Leider bin ich bislang nicht fündig geworden, obwohl ich den Codex wie eine Wilde durchsucht habe.

    Bis später. Ich werde dann über meine Eindrücke und Erkenntnisse berichten. ;-)

    VG Elke

    Es gibt keine dummen Fragen, es gibt nur dumme Antworten...
    http://u-portal.de/

    Einmal editiert, zuletzt von redcat63 (14. März 2008 um 10:39)

  • PHP
    query_posts(posts_per_page=-1');


    Vielen Dank. Da hätte ich auch wirklich selber drauf kommen können. :oops:
    Aber manchmal sieht man den Wald vor lauter Bäumen nicht mehr...

    Ammaletu:
    1000 Dank für den Tipp mit der Datei query.php
    Die fand ich nicht nur in dieser Hinsicht sehr aufschlussreich.

    Aber nun zurück zu meinem Problem, das ich leider noch nicht lösen konnte.
    In der Funktion get_posts finde ich folgenden Code:

    PHP
    if ( !empty($limits) ) {
                $found_posts_query = apply_filters( 'found_posts_query', 'SELECT FOUND_ROWS()' );
                $this->found_posts = $wpdb->get_var( $found_posts_query );
                $this->found_posts = apply_filters( 'found_posts', $this->found_posts );
                $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']);
            }

    Die Frage ist nun, wie kann ich $this->max_num_pages beeinflussen? Denn ich glaube, dass die Navigationsfunktionen darauf zugreifen. Vielleicht aber auch auf die class WP_Query. Da gibt es eine Variable mit dem Namen max_num_pages. Sie erhält den Wert 0 ($max_num_pages=0). Aber auch da weiß ich nicht, wie und wo ich diese ändern könnte.
    Kann mir jemand auf die Sprünge helfen?
    Herzlichen Dank im Voraus.

    VG Elke

    Es gibt keine dummen Fragen, es gibt nur dumme Antworten...
    http://u-portal.de/

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!