WordPress Entwickler für Programmierung Ihrer Webprojekte
WordPress Entwickler für Programmierung Ihrer Webprojekte
  • Start
  • Unser Angebot
  • Blog
  • Kontakt
Avatar (Thumbnail) zum Blogeintrag

Anzahl der (angezeigten/verwendeten ) Posts ändern – Ein Problem, viele Lösungsmöglichhkeiten

Jeder Artikel ist ein keines Kunstwerk, meint: souri | wp-entwickler.at | 11. Juni 2021

4.0 4.1 parse_request posts_per_page pre_get_posts pre_option_posts_per_page

Eine Versuchsanordnung: Wie kann ich die Anzahl der angezeigten Posts ändern.

Egal ob es um das Anzeigen von Artikeln auf den diversen Seiten geht, oder darum,  mit zb der WP_Query]}** Posts zu holen. Die Anzahl spielt oft eine Rolle.

Um die verschiedenen Wege aufzuzeigen, gibt es diesen Artikel :)

Es sind ein paar schräge bzw ungewöhnliche Lösungswege dabei, aber da geht es auch darum, grundsätzliche Funktionen von WordPress zu veranschaulichen.

 

Wie viele Posts auf der Seite aufscheinen oder ich mit einer Query bekommen möchte, lässt sich auf mehrere Arten lösen.

Hier der Kurzüberblick über die Möglichkeiten:

  1. Einstellen im Backend
  2. Mit  wp_query]}** Parameter posts_per_page
  3. Mit  Action pre_get_posts
  4. Mit Filter parse_query
  5. Mit Action parse_request
  6. Mit Filter post_limits
  7. Mit Filter pre_option_posts_per_page
  8. Durch Ändern des wp_option Werts posts_per_page (!)
  9. Mit PHP

 

    Inhalt auf dieser Seite:

  1. Eine Versuchsanordnung: Wie kann ich die Anzahl der angezeigten Posts ändern.
  2. 1. Einstellen im Backend
  3. 2. Mit  wp_query Parameter posts_per_page
  4. 3. Mit Action pre_get_posts
  5. 4. Mit Filter parse_query
  6. 5. Mit Action parse_request
  7. 6. Mit dem Filter post_limits
  8. 7. Mit dem Filter pre_option_posts_per_page
  9. 8. Durch Ändern des wp_option Werts posts_per_page
  10. 9. Durch PHP eigene Funktionen oder mit JavaScript usw usf

1. Einstellen im Backend

Der einfachste Weg ist sicherlich, Im WordPress Backend unter Einstellungen -> Lesen die gewünschte Anzahl zu ändern.

Wobei die Anzahl separat für Einträge auf den Seiten und für den RSS Feed angepasst werden kann:

Veranschaulicht, wie man im Backend die Anzahl der Posts verändern kann
Veranschaulicht, wie man im Backend die Anzahl der Posts verändern kann

 

Telefon+436603100000
E-Mailsouri@wp-entwickler.at
AdresseWP-Entwickler
Safenauer-Straße 62,
8230 Hartberg

2. Mit  wp_query]}** Parameter posts_per_page

Wenn eigene Loops oder Queries mit wp_query]}** angestoßen werden, kann man ganz einfach den Parameter „posts_per_page“ verwenden:

$meine_neue_query = new WP_Query( 'posts_per_page=3' );      oder      $args_fuer_custom_posts = array(      'posts_per_page'             => 3  );    $custom_posts = new WP_Query( $args_fuer_custom_posts );

 

Man kann für Archivseiten den Parameter posts_per_archive_page verwenden, der den vorhergehenden Parameter eben auf Archivseiten überschreibt.

 

3. Mit Action pre_get_posts

Die pre_get_posts Action ist mächtig und bietet viele Möglichkeiten, um das Query Ergebnis anzupassen. Eine davon verändert die Anzahl der zurückgegebenen Posts:

function aendere_post_anzahl_wpent( $query ) {      if ( ! is_admin() && ! $query->is_main_query() )          $query->set( 'posts_per_page', 3 );    }    add_action( 'pre_get_posts', 'aendere_post_anzahl_wpent' );

Bei pre_get_posts lassen sich einige (aber nicht alle) Conditional Tags verwenden.

4. Mit Filter parse_query

Der Filter parse_query funktioniert ähnlich wie die Action pre_get_posts

function aendere_post_anzahl_mit_pq_wpent( $query ) {      if ( ! is_admin() && 'portfolio' == $query->query_vars['post_type'] ) {          $query->set( 'posts_per_page', 1 );      }            return $query;  }        add_filter( 'parse_query', 'aendere_post_anzahl_mit_pq_wpent' );

Wie bei pre_get_posts kann man auch bei parse_query Conditional Tags verwenden.

 

5. Mit Action parse_request

Die Action parse_request ist etwas kniffliger zu  handhaben, weil diese nur für die eigentliche Query gilt. Ich kann damit keine Custom Queries / Loops ändern, die ich mit wp_query]}** o.ä. anstoße.

Parse_request macht aus der Url die Query und befüllt $wp->query_vars.

Das ist der Grund, warum ich hier keine wp_query]}** Dinge ändern kann sondern nur die Standardquerie. Und das geht so:

add_action( 'parse_request', 'aendere_post_anzahl_mit_pr_wpent' );      function aendere_post_anzahl_mit_pr_wpent( $query ) {      if (  'mein_cpt' == $query->query_vars['post_type'] ) {          $query->query_vars[ 'posts_per_page' ] = 3;      }            return $query;  }

Zusätzliche Inspiration zu parse_request findet man hier:

https://wordpress.stackexchange.com/questions/27158/wordpress-multiple-category-search?answertab=active#tab-top
https://wordpress.stackexchange.com/questions/27158/wordpress-multiple-category-search?answertab=active#tab-top

 

6. Mit dem Filter post_limits

Mit post_limits kann man wiederum jede Query ändern und so die Anzahl der Posts einstellen:

add_filter( 'post_limits', 'andere_post_anzahl_durch_pl_wpent', 10, 2 );    function andere_post_anzahl_durch_pl_wpent( $limit, $query ) {        if ( ! is_admin() && ! $query->is_main_query() && ! $query->is_search() ) {          return 'LIMIT 0, 3';      }        return $limit;  }

 

7. Mit dem Filter pre_option_posts_per_page

Der Filter pre_option_posts_per_page gehört zum Filterbundle pre_option_(option_name). Dieser Filter ist besonders praktisch, wenn ich Werte aus der Options Tabelle verwende/brauche, ich diese aber nicht verändert in der Datenbank abspeichern will.

Wenn ich den Options Wert also nur kurz abwandeln und damit arbeiten will, ohne fix vorgegebene Werte zu verändern.

In unserem Fall ist ja der Wert, wie viele Posts angezeigt werden sollen, in der wp_options mit dem Eintrag „posts_per_page“ gespeichert. Dieser Options Eintrag hat standardmäßig den Wert 10 und kann vom User (siehe Screenshot oben) im Backend verändert werden.

Man könnte den Wert jetzt in den Options ändern (schlechte Idee, siehe unten) oder einfach einen temporären Wert verwenden, siehe:

add_filter( 'pre_option_posts_per_page', 'anzahl_aendern_mit_ppp_wpent' );    function anzahl_aendern_mit_ppp_wpent( $posts_per_page ) {        global $wp_query;      if ( 'mein_cpt' == $wp_query->query_vars['post_type'] )          return 3;                   return $posts_per_page;  }

Ein weiterer Options Eintrag besteht für die Anzahl der angezeigten Artikel im RSS Feed (siehe Screenshot oben). Das Gegenstück zu pre_option_posts_per_page ist dann pre_option_posts_per_rss. (Options Eintrag „posts_per_rss„)

 

8. Durch Ändern des wp_option Werts posts_per_page

Wenn im Backend der Punkt „Blogseiten zeigen maximal [  x  ] Werte“ geändert wird, wird der Wert in der Datenbank gespeichert. Genauer gesagt in der Tabelle wp_options.

Man kann daher hergehen und einfach diesen options Wert ändern, zb mit

update_option( 'posts_per_page', 3 );  

Der Options-Eintrag lautet „posts_per_page“ (oder posts_per_rss für RSS Feeds) und kann per PHP Code angepasst werden.

Das ist aber meist eine schlechte Idee, weil dadurch Usereingaben verändert werden können. Der Benutzer bekommt von der Änderung nichts mit und sieht dann andere Ergebnisse, als er sich eigentlich erwartet hat.

 

9. Durch PHP eigene Funktionen oder mit JavaScript usw usf

Wenn die Daten von der Datenbank geholt wurden, habe ich immer noch die Möglichkeit mit stinknormalen PHP Funktionen die Anzahl zu ändern.

Oder aber auch auf der letzten Instanz, per JavaScript im Browser des Users, des Seitenbetrachters.

Dieser Punkt hat mit WordPress selbst nicht mehr viel zu tun, daher werden die Möglichkeiten hier nicht besprochen.

 

 

Alle hier gezeigten Funktionen/Hooks wurden getestet und funktionieren unter WordPress 4.1.

Navigation

Start Unser Angebot Blog

Impressum & Kontakt

wp-entwickler.at wird betrieben von

  • wp-entwickler Rene Souri
  • UID: ATU60950509
  • Safenauer-Straße 62
  • 8230 Hartberg

Wir lieben WordPress und freuen uns, mit Ihnen ein Projekt entwickeln zu können!

  • Impressum
  • AGB

wp-entwickler.at ist eine indit.at Division