WordPress hat eine wirklich nützliche API namens „the API umschreiben“. Ich vermute, dass das schon von „URL Rewriting“ ist, dies ist der Prozess, der URLs lesbarer macht. Zum Beispiel eine so geschriebene URL http://mysite.com/?page=12&category=12&author=47 sieht nicht so gut aus. Es ist schwer, sich daran zu erinnern, und Suchmaschinen mögen es nicht so sehr. Aus diesem Grund hat fast jedes CMS eine eingebaute Funktion, die URLs „umschreibt“, damit sie wie folgt aussehen: http://mysite.com/category/business/finance.
Die Rewrite-API und die WP_Rewrite-Klasse
In WordPress wird dieser Prozess auch als Permalinks-Struktur. Wenn Sie von der standardmäßigen Permalink-Struktur zu einer benutzerdefinierten Struktur wechseln, aktivieren Sie automatisch die Rewrite-API. Dies geschieht vollautomatisch. Manchmal müssen Sie jedoch Ihre eigenen benutzerdefinierten Rewrite-Regeln erstellen.
In diesem Beitrag werden wir einfache Funktionen erstellen, um eine einfache benutzerdefinierte Rewrite-Regel zu erstellen. Nehmen wir an, wir möchten einen Referrer-Wert erhalten, der einem $_GET . entspricht[‘referrer’].
Wenn wir uns den Codex ansehen, können wir auf der Rewrite-API-Seite sehen, dass diese API 6 eingebaute Funktionen hat. Die häufigste Verwendung des Rewrites ist die Verwendung dieser Funktionen, dazu gibt es viele Tutorials, deshalb werde ich Filter anstelle von Funktionen verwenden. Denn ja, die Rewrite-API kann auch mit Filtern verwendet werden! Diese Filter sind auf der Liste aufgeführt WP_Rewrite-Klasse Codex-Seite.
Hinzufügen einer neuen Abfragevariable
Um zu beginnen, müssen wir eine Funktion erstellen, die WordPress mitteilt, dass eine neue Rewrite-Regel festgelegt wurde. Das ist die Aufgabe des add_rewrite_rule() und add_rewrite_tag() Funktionen, aber Sie können dies auch mit den query_vars und rewrite_rules_array Filter. Dazu müssen wir zwei Funktionen und zwei Filter erstellen. Die erste Funktion fügt dem query_vars-Filter einfach eine neue Variable hinzu, und die zweite wird diese neue Variable in den globalen Rewrite-Regeln registrieren:
/*
|--------------------------------------------------------------------------
| Start Rewrite. Sample: http://mysite.com/referrer/remi
|--------------------------------------------------------------------------
*/
// Register a new var
function rc_add_query_vars( $vars) {
$vars[] = "referrer"; // name of the var as seen in the URL
return $vars;
}
// Hook our function into query_vars
add_filter('query_vars', 'rc_add_query_vars');
// Add the new rewrite rule to existings ones
function rc_add_rewrite_rules($rules) {
$new_rules = array('referrer/([^/]+)/?$' => 'index.php?referrer=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
// Hook the function into rewrite_rules_array
add_filter('rewrite_rules_array', 'rc_add_rewrite_rules');
Sobald Sie diesen Code zu einer Ihrer Plugin-Dateien oder Ihrer themefunctions.php-Datei hinzugefügt haben, gehen Sie zu Einstellungen > Permalinks und speichern Sie die Permalinks-Struktur. Diese Aktion ist erforderlich. Sie sollten jetzt mit dieser Art oder URL auf Ihre Website zugreifen können: http://mysite.com/referrer/Ihr-Name. Wenn Sie auf eine bestimmte Seite weitergeleitet werden möchten, ändern Sie index.php?referrer=$matches[1] von index.php?pagename=my-page&referrer=$matches[1] wobei „my-page“ die Seite ist, die an Slug umgeleitet werden soll.
Abrufen des Variablenwerts
Nachdem Ihre Rewrite-Regel nun festgelegt ist, möchten Sie möglicherweise auf den Variablenwert zugreifen. Aber wenn du ein einfaches $_GET . machst[‘referrer’], Sie erhalten keinen Wert. Um die URL-Vars-Werte abzurufen, müssen Sie eine Funktion mit dem Filter „template_redirect“ verknüpfen. Das Einhängen in den „init“-Filter ist zu früh. Dann können Sie über das $wp_query-Objekt auf die benötigten Variablen zugreifen. Hier ist ein kurzes Beispiel für die Vorgehensweise:
// Retrieve URL var
function rc_get_my_vars() {
global $wp_query;
if(isset($wp_query->query_vars['referrer'])) {
$referrer = get_query_var('referrer');
}
}
// Hook the function into template_redirect
add_action( 'template_redirect', 'rc_get_my_vars');
Sie können als nächstes den $referrer-Wert zurückgeben oder ihn wie mit einer normalen GET-Variablen verwenden.
Sie können natürlich mehr als eine Variable verwenden:
// in rc_add_query_vars()
$vars[] = "referrer";
$vars[] = "campaign";
// in rc_add_rewrite_rules()
$new_rules = array('referrer/([^/]+)/([^/]+)/?$' => 'index.php?pagename=my-page&referrer=$matches[1]&campaign=$matches[2]');
Vergessen Sie nicht, dass Sie das PHP-Modul mod_rewrite aktivieren müssen, um das Umschreiben von URLs zu verwenden.