Wie kann ich die Paginierung in Suchergebnissen und Kategorielisten über einen Link ein- / ausschalten?

Auf dieser Website möchte der Benutzer die Paginierung deaktivieren können, um die gesamten Ergebnisse einer Such– oder Kategorieabfrage als ein großes Dokument drucken zu können. Scheint offensichtlich, also war ich überrascht, kein Plugin zu finden … jetzt weiß ich vielleicht warum.

Ich habe schon eine Weile mit diesem Thema gekämpft, und ich fürchte, dass mein Verständnis von WordPress nicht dazu passt … was ich versucht habe ist:

  1. Hinzufügen einer Abfragezeichenfolge zur URL:? onepageprint = 1 (funktioniert)
  2. Registrieren der function “Paginierung deaktivieren” (funktioniert)
  3. Testen für die Abfragezeichenfolge und bedingter Aufruf der function (funktioniert nicht).

Das Problem, das ich denke , ist, dass die Paginierung zu früh im WordPress-process eingerichtet wird, bevor es an einen Ort kommt, an dem ich den Abfrage-String aus der URL herausholen und testen kann (ohne den Core zu hacken!)

Also zwei Fragen und ein Gedanke:

  1. gehe ich das richtig an?
  2. ist mein Gefühl für das Problem richtig und, wenn ja, gibt es einen Workaround? und wenn das wirklich nicht funktioniert (letzter Versuch unten) …
  3. könnte es möglich sein, dies mit redirect_canonical (was ich zugeben, nicht wirklich verstehen!)

Ich habe mich mit endlosen Variationen davon beschäftigt – hier ist der neueste Versuch (obwohl es einige Überschneidungen geben kann). Das Festlegen der Abfragezeichenfolge und das Abrufen der URL scheint einwandfrei zu funktionieren, und die function zum Deaktivieren der Seitennummerierung funktioniert auch … aber wenn sie vorhanden ist, funktioniert sie immer (oder funktioniert nie) und ich kann keinen Weg finden bedingt ein- und ausschalten:

In functionen.php:

 /* register custom query var (from URL) to toggle pagination */ function jr_add_query_vars_filter( $displayvars ){ $displayvars[] = "onepageprint"; return $displayvars; } add_filter( 'query_vars', 'jr_add_query_vars_filter' ); get_query_var( 'onepageprint', 0 ); /* disable pagination conditionally on custom query var setting (from URL query string) * NOT WORKING YET */ add_Action('init', 'remove_pagination'); function remove_pagination() { if ( ! $onepageprint == 1 ) return; // stop here. /* Disable content pagination, based on * https://wp-types.com/forums/topic/remove-pagination-from-archive-view/ */ add_action('parse_query', 'no_nopaging'); function no_nopaging($query) { $query->set('nopaging', 1); } } 

In Seitenvorlagen (einer von vielen Versuchen) – ich denke, das oder etwas ähnliches muss in search.php und archive.php gehen:

 // call no-pagination function - DIDN'T WORK if ( $onepageprint == 1 ) { no_nopaging($query); } 

Ich hoffe, das macht Sinn, und lassen Sie mich wissen, wenn Sie mehr über meine Konfiguration brauchen, um es zu beantworten. Leider kann ich keine Links zu der eigentlichen Website veröffentlichen, da es sich um eine private Forschungsseite handelt und alles vertraulich ist!

Sogar einige Hinweise auf eine bessere Vorgehensweise wären großartig. Danke vielmals.

[Bearbeiten: Titel verbessert direkt nach dem Posten!]

Solutions Collecting From Web of "Wie kann ich die Paginierung in Suchergebnissen und Kategorielisten über einen Link ein- / ausschalten?"

Ich denke, es sollte funktionieren, indem man sich in pre_get_posts :

 function wpse_254661_remove_pagination( $query ) { if ( $query->is_main_query() && get_query_var( 'onepageprint', 0 ) ) { $query->query_vars['nopaging'] = 1; $query->query_vars['posts_per_page'] = -1; } } add_action( 'pre_get_posts', 'wpse_254661_remove_pagination' ); 

Auf diese Weise können Sie Ihre Abfrage direkt ändern, bevor sie abgerufen wird, und das Abfrageobjekt wird vom Hook direkt an die function übergeben. Es gibt auch eine Prüfung, die nur die Hauptabfrage betrifft.