wake-up-neo.net

Wie generiert WordPress URL-Slugs?

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.

14
George Edison

Auf Anhieb kann ich Ihnen keine Seite/Tutorial/Dokumentation darüber geben, wie WP Slugs erzeugt werden, aber werfen Sie einen Blick auf die sanitize_title() -Funktion.

Verstehen Sie sich nicht durch den Funktionsnamen falsch, er soll nicht einen Titel bereinigen zur weiteren Verwendung als Seiten-/Beitragstitel . Es wird eine Titelzeichenfolge verwendet und zur Verwendung in einer URL zurückgegeben:

  • streifen HTML & PHP
  • streifen spezielle Zeichen
  • wandelt alle Zeichen in Kleinbuchstaben um
  • ersetzt Leerzeichen, Unterstriche und Punkte durch Bindestriche
  • reduziert mehrere aufeinanderfolgende Striche auf einen

Es kann möglicherweise Edge - Fälle geben, in denen der Core zusätzliche Aktionen ausführt (Sie müssen sich die Quelle ansehen, um sicherzustellen, dass sanitize_title() immer ausreicht, um genau zu generieren) Dies sollte jedoch mindestens 99%, wenn nicht sogar alle Fälle abdecken.

12
Johannes Pille

Kern zu Ihren Diensten

Abgesehen von WP_DEBUG ist in WordPress kein Entwicklermodus integriert, was Ihnen in diesem Fall nicht allzu viel hilft. Grundsätzlich verwendet WP das "Rewrite API" , ein funktionsbasierter Low-Level-Wrapper für die Klasse WP_Rewrite, über den Sie im Codex lesen können. Das Objekt global $wp_rewrite steht zu Ihren Diensten, um es zu überprüfen oder mit der Klasse zu interagieren.

Plugins, die bei der Suche helfen.

Toschos "T5 Rewrite" -Plugin und Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin führen 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 finden hier auf GitHub .

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 auch der erwähnten Tools - Seite hinzu.

Hier ist ein Screenshot, wie der Inhalt der Registerkarte "T5 Rewrite" -Plugins-Hilfe aussieht.

enter image description here

Vorlage = Pattern | Beschreibung = Erklärung | Beispiele

Anmerkungen

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.

4
kaiser

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.

4
Vivek Sancheti

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( 
2
Jahmic

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 Modus verwendet den Modus save, in dem HTML- und PHP-Tags entfernt und Akzente entfernt werden (Akzentzeichen werden durch nicht akzentuierte Entsprechungen ersetzt).

Der zweite query-Modus stellt sicher, dass alle Leerzeichen durch Bindestriche - ersetzt und andere Satzzeichen entfernt werden.

Hoffe das hilft jemandem! :)

0
GigiSan