it-swarm.com.de

Bereinigen Sie URLs für benutzerdefinierte $ _GET-Variablen

Ich habe eine Abfrage var show=othertemplate, die ich zu jeder URL hinzufügen kann, um jeden Beitrag, jede Seite oder jedes Archiv in Wordpress in einer anderen Vorlage anzuzeigen: mysite.com/[any URL] /? Show = othertemplate . Ich möchte, dass über eine saubere URL darauf zugegriffen werden kann, z. B. [jede URL]/othertemplate oder [jede URL]/show/othertemplate.

Ich habe versucht, dies zu erreichen, indem ich die Abfragevariable mit einem query_vars-Filter registrierte und den folgenden Code zu .htaccess hinzufügte, aber Wordpress intervenierte und löste eine 404 aus. WP Die Debug-Leiste gibt an, dass die Abfrage Anhang = Druck sucht.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)/othertemplate/?$ /index.php/$1?view=othertemplate [L]

Ich habe auch versucht, die Wordpress-Umschreibefunktionen zu verwenden, aber das gleiche passiert.

function st_myqueryvars($vars) {
    $vars[] = 'show';
    return $vars;
}

add_filter('query_vars', 'st_myqueryvars');

function st_myrewriterules( $wp_rewrite ) {
  $newrules = array();
  $new_rules['^(.*)/othertemplate/?$'] = 'index.php/$matches[1]?show=othertemplate';
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules','st_myrewriterules');

Fehlt mir hier etwas?

Update: Nach dem Löschen von Permalinks sehe ich, dass diese WP - Funktion / [beliebige URL] / Vorlage in index.php? Show umschreibt = template anstelle von index.php? [die entsprechende Abfragezeichenfolge der URL] & show = template. Ich kann eine Abfragezeichenfolge wie post_type = $ matches [1] & name = $ matches [2] nicht in die Umschreiberegel einprogrammieren, da sie für alle Seiten/Posts/Archive funktionieren muss, die einen anderen Permalink haben Strukturen. Wie komme ich darum herum?

3
supertrue

Sie sollten sich "Endpunkte umschreiben" ansehen, die viel einfacher zu handhaben sind als benutzerdefinierte Umschreibungen. Und sie passen perfekt zu Ihrem Anwendungsfall: http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

Sie könnten Ihren "show" -Endpunkt folgendermaßen hinzufügen:

function wpsx_37961_add_endpoints() {

    // Add the "show" rewrite endpoint to all URLs
    add_rewrite_endpoint('show', EP_ALL);

}
add_action('init','wpsx_37961_add_endpoints');

Dann können Sie den Wert in der Aktion WP überprüfen (oder vielleicht früher, da bin ich mir nicht sicher), zum Beispiel:

function wpsx_37961_check_endpoint() {

    $show = $wp_query->get( 'show' );

    // Now, do whatever template switching you want based on the $show var's value

}
add_action('wp','wpsx_37961_check_endpoint');

Das eigentliche Wechseln von Vorlagen liegt bei Ihnen. Damit werden Ihre Endpunkte jedoch eingerichtet. Keine Filterung von Abfragevariablen, kein Zusammenhacken von Rewrite-Regeln, keine harten Sachen :)

2
MathSmath

Schau dir meinen Beitrag an hier . Dies sollte Ihnen auf Ihrem Weg helfen. Du bist auf dem richtigen Weg. Denken Sie daran, nach dem Hinzufügen einer Umschreiberegel die Perms zu leeren, indem Sie Einstellungen-> Permalinks aufrufen

0
Brian Fegter