Gibt es irgendwo eine Seite, die genau beschreibt, wie WordPress Slugs für URLs generiert? Ich schreibe ein Skript, das URL-Slugs generiert, die mit denen von WordPress identisch sind.
Gibt es irgendwo eine Seite, die genau beschreibt, wie WordPress Slugs für URLs generiert? Ich schreibe ein Skript, das URL-Slugs generiert, die mit denen von WordPress identisch sind.
Antworten:
Auf Anhieb kann ich Ihnen keine Seite / Anleitung / Dokumentation zur Erzeugung von WP-Slugs geben, aber werfen Sie einen Blick auf die sanitize_title()
Funktion.
Verursachen Sie keinen falschen Eindruck durch den Funktionsnamen. Es ist nicht dazu gedacht, einen Titel für die weitere Verwendung als Seiten- / Beitragstitel zu bereinigen . Es wird eine Titelzeichenfolge verwendet und zur Verwendung in einer URL zurückgegeben:
Es könnte Rand Fälle, in denen der Kern tut etwas zusätzliche (Sie an der Quelle aussehen müsste , um das überprüfen sanitize_title()
wird immer ausreichen , bei der Erzeugung von genau den gleichen Sie erwarten), aber dies mindestens 99% abdecken sollte, wenn nicht sogar alle Fälle .
sanitize_title
in der Funktion angewendeten Filter durchgeführt wird oder ob dies von etwas anderem erledigt wird, nachdem die Funktion ausgeführt wurde.
sanitize_title
Filter, den man auschecken muss. Es gibt aber auch andere verwandte Funktionen . Ich habe wirklich keine Ahnung davon. Manchmal scheint SimplePie
es einfacher zu verstehen als das WP_Rewrite
Ding. Btw: Toscho arbeitet daran, die "Monkeyman Rewrite Analyzer" -Funktionalität in sein Plugin zu integrieren. Dort werden die Dinge wirklich interessant.
Sie können diese Funktion verwenden:
static public function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\pL\d]+~u', '-', $text);
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
// trim
$text = trim($text, '-');
// remove duplicate -
$text = preg_replace('~-+~', '-', $text);
// lowercase
$text = strtolower($text);
if (empty($text)) {
return 'n-a';
}
return $text;
}
Genau so funktioniert die Funktion wp url desinfizieren.
Abgesehen von WordPress gibt es keinen integrierten EntwicklermodusWP_DEBUG
, der Ihnen in diesem Fall nicht allzu viel hilft. Grundsätzlich verwendet WP die "Rewrite API" , einen funktionsbasierten Low-Level-Wrapper für die WP_Rewrite
Klasse, über den Sie im Codex lesen können . Das global $wp_rewrite
Objekt steht zu Ihren Diensten, um es zu inspizieren oder mit der Klasse zu interagieren.
Toschos "T5 Rewrite" -Plugin und Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin leiten Sie Ihren Weg. Ich habe eine kleine Erweiterung für "T5 Rewrite" geschrieben, um sie nahtlos in den "Monkeyman Rewrite Analyzer" zu integrieren, den Sie im "T5 Rewrite" -Repos-Wiki hier auf GitHub finden .
Das "Monkeyman" -Plugin fügt eine neue Seite hinzu, die im Admin-UI-Menü unter Tools abgelegt ist . Das "T5 Rewrite" -Plugin fügt der Seite Einstellungen > Permalinks eine neue Hilferegisterkarte hinzu . Meine Erweiterung fügt die Hilferegisterkarten zu den genannten hinzu Tools-Seite hinzu.
Hier ist ein Screenshot, wie der Inhalt der Registerkarte "T5 Rewrite" -Plugins-Hilfe aussieht.
Vorlage = Pattern | Beschreibung = Erklärung | Beispiele
Das "T5 Rewrite" -Plugin leistet hervorragende Arbeit bei der Überprüfung des Rewrite-Objekts. Und es macht noch mehr: Es fügt neue Möglichkeiten hinzu. Daher ist es (zumindest in meinen Installationen) Teil meines Basis-Plugins-Pakets.
Wenn Sie sich die Kernfunktion wp_insert_post (post.php) ansehen, werden Sie feststellen, dass sie Folgendes bewirkt:
$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );
$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
Das Wichtigste ist, dass sowohl wp_unique_post_slug als auch sanitize_title verwendet werden:
wp_unique_post_slug( sanitize_title(
Verzeihen Sie die Wiederaufnahme einer alten Frage, aber ich hatte die gleiche Notwendigkeit herausgefunden, dass diese Methode für mich perfekt funktioniert:
$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now
Diese Methode verwendet eine doppelte Desinfektion.
Der erste benutzt den save
Modus Modus, in dem HTML- und PHP-Tags entfernt und Akzente entfernt werden (Zeichen mit Akzent werden durch nicht akzentuierte Entsprechungen ersetzt).
Der zweite query
Modus stellt sicher, dass alle Leerzeichen durch Bindestriche ersetzt werden-
und andere Satzzeichen ersetzt werden.
Hoffe das hilft jemandem! :)