it-swarm.com.de

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

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

Ich habe eine Weile damit gerungen und ich befürchte, dass mein Verständnis von WordPress einfach nicht dazu passt ... was ich versucht habe, ist:

  1. hinzufügen einer Abfragezeichenfolge zur URL:? onepageprint = 1 (funktioniert)
  2. registrieren einer Funktion zum Deaktivieren der Paginierung (funktioniert)
  3. testen der Abfragezeichenfolge und bedingtes Aufrufen der Funktion (funktioniert nicht).

Das Problem, das ich denke habe, ist, dass die Paginierung zu früh im WordPress-Prozess eingerichtet wird, bevor sie an eine Stelle gelangt, an der ich die Abfragezeichenfolge aus der URL abrufen und darauf testen kann (ohne die URL zu hacken) Ader!)

Also zwei Fragen und ein Gedanke:

  1. gehe ich das richtig an?
  2. ist mein Verständnis des Problems korrekt und gibt es eine Problemumgehung? und wenn das wirklich nicht klappt (letzter versuch unten) ...
  3. könnte es möglich sein, dies mit redirect_canonical zu tun (was ich zugegebenermaßen nicht wirklich verstehe!)

Ich habe mit endlosen Variationen davon rumgespielt - hier ist der neueste Versuch (obwohl es einige Duplikate geben kann). Die Abfragezeichenfolge zu setzen und sie aus der URL zu entfernen, scheint in Ordnung zu sein, und die Funktion zum Deaktivieren der Paginierung funktioniert auch ... aber wenn sie vorhanden ist, funktioniert always (oder funktioniert nie), und ich kann Es gibt keine Möglichkeit, es bedingt ein- und auszuschalten:

In functions.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, dies oder etwas Ähnliches muss sowohl in search.php als auch in archive.php angegeben werden:

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

Ich hoffe, das ergibt einen Sinn und lass es mich wissen, wenn du mehr über meine Konfiguration benötigst, um es zu beantworten. Leider kann ich keine Links zur eigentlichen Website veröffentlichen, da es sich um eine private Forschungssite handelt und alles darauf vertraulich ist!

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

[Edit: Titel gleich nach dem Posten verbessert!]

1
wwwolf

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

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 ändern, bevor sie abgerufen wird und das Abfrageobjekt vom Hook direkt an die Funktion übergeben wird. Es gibt auch eine Überprüfung, um nur die Hauptabfrage zu beeinflussen.

0
JHoffmann