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.
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 –
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.
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”