benutzerdefinierte wordpress umschreiben

Ich versuche benutzerdefinierte Umschreiben für folgende URL …

http://www.domain.com/lp/1 

und es würde geparst werden mit

 lp.php?p=1 

Ich habe versucht zu folgen …

 add_action( 'init', 'aagt_rewrite_add_rewrites' ); function aagt_rewrite_add_rewrites() { add_rewrite_rule( '^lp/(\d+)/?$', // p followed by a slash, a series of one or more digits and maybe another slash 'lp.php?p=$matches[1]', 'top' ); } 

Aber wenn ich nach dem obigen Code URL ( http://www.domain.com/lp/1 ) versuche, hat es nicht funktioniert. vermisse ich etwas, ich habe versucht, Htaccess-Regeln zu löschen. bitte helfen, danke.

Solutions Collecting From Web of "benutzerdefinierte wordpress umschreiben"

WordPress hat zwei Arten von Rewrite-Regeln – intern und extern. Interne Regeln werden von WordPress analysiert und an index.php . Externe Umschreibungen werden in .htaccess geschrieben und nicht an WordPress weitergeleitet.

Im Moment ist deine Regel eine Mischung aus intern und extern – du hast sie als interne Regel strukturiert, aber du hast sie falsch auf eine andere Datei als index.php verwiesen.

Wenn Sie die WordPress-Umgebung innerhalb des Codes verwenden möchten, der diese Rewrite-Regel empfängt, sollte sie intern neu geschrieben werden. Wenn Sie möchten, dass dies eine externe Regel ist, die nicht von WordPress verarbeitet wird, müssen Sie Ihre Regel so ändern, dass $1 anstelle von $matches[1] .

BEARBEITEN

Hier sind ein paar Methoden, die erste ist die schnelle und schmutzige Methode –

Methode eins

Schritt 1 für beide Methoden ist das Hinzufügen einer Abfrage var lpid zum WordPress-Array der erkannten Abfragevariablen:

 function wpa55759_query_vars( $query_vars ){ $query_vars[] = 'lpid'; return $query_vars; } add_filter( 'query_vars', 'wpa55759_query_vars' ); 

Schritt 2, fügen Sie die Rewrite-Regel hinzu, um nur lpid zu setzen, wenn unsere Regel übereinstimmt:

 function wpa55759_rewrites(){ add_rewrite_rule( 'lp/(\d+)/?$', 'index.php?lpid=$matches[1]', 'top' ); } add_action( 'init', 'wpa55759_rewrites' ); 

Schritt 3, hook parse_request und prüfen, ob unsere Abfrage var gesetzt ist. Wenn ja, laden Sie lp.php aus dem Vorlagenverzeichnis und lp.php :

 function wpa55759_parse_request( $request ){ if( isset( $request->query_vars['lpid'] ) ): include( get_template_directory() . "/lp.php" ); exit(); endif; return $request; } add_action( 'parse_request', 'wpa55759_parse_request' ); 

Um den Wert von lpid in lp.php :

 global $wp; echo $wp->query_vars['lpid']; 

Im Grunde suchen wir nach unserer Abfrage var und schneiden früh aus. WordPress führt niemals eine databaseabfrage durch, um Posts oder Seiten zu laden. Nicht sicher, welche Nebenwirkungen dies sonst haben könnte.

Methode zwei

Die zweite Methode besteht darin, eine Seite innerhalb von WordPress, lp , zu erstellen und unsere Regel darauf zu richten, wobei auch die Abfrage var übergeben wird:

 function wpa55759_rewrites(){ add_rewrite_rule( 'lp/(\d+)/?$', 'index.php?pagename=lp&lpid=$matches[1]', 'top' ); } add_action( 'init', 'wpa55759_rewrites' ); 

Jetzt können Sie eine Template- page-lp.php und auf lpid zugreifen mit:

 echo get_query_var( 'lpid' ); 

Eine weitere Option bei dieser zweiten Methode ist das Filtern von template_redirect und das Verknüpfen der Vorlagenhierarchie mit dem Laden Ihrer eigenen benutzerdefinierten Datei:

 function wpa55759_template_redirect(){ global $wp_query; if( $wp_query->get( 'lpid' ) ): include( get_template_directory() . "/lp.php" ); exit(); endif; } add_filter( 'template_redirect', 'wpa55759_template_redirect' ); 

Gehe zu wp-admin / options-permalink.php

nichts zu tun außer “Änderungen speichern”