WordPress URL Salyangozlarını Nasıl Üretir?


Yanıtlar:


16

Yarasadan, size WP sümüklü böceklerinin nasıl oluşturulduğu hakkında bir sayfa / öğretici / dokümantasyon veremiyorum, ancak sanitize_title()işleve bir göz atın .

Fonksiyon adıyla yanlış bir izlenime kapılma, olup değil bir başlık sterilize anlamına bir sayfa / sonrası başlık olarak daha fazla kullanım için . Bir başlık dizesi alır ve bir URL'de kullanılacak şekilde döndürür:

  • HTML ve PHP şeritleri
  • şeritler özel karakter
  • tüm karakterleri küçük harflere dönüştürür
  • boşlukları, alt çizgileri ve noktaları tireler / tire ile değiştirir
  • art arda birden çok tireyi bire indirir

Orada olabilecek çekirdek ek bir şey (eğer doğrulamak için kaynakta bakmak olurdu yapar kenar vakalar sanitize_title()olacak hep oluşturmada yeterli tam olarak , vaka beklediğiniz aynı), ancak bu hepsi değilse, en azından% 99 kapsamalıdır .


1
@kaiser: Ben sadece T5 Rewrite :) aşık olduğunu düşündüm (kontrol etmek benim gündemde) | ve genel olarak: Bir başlık gerçekten uzunsa, WP sümüklü böcekleri belirli bir maksimum uzunluğa da keser. Bu sanitize_title, işlevde de uygulanan filtre tarafından yapılıp yapılmadığından veya işlev çalıştıktan sonra başka bir şey tarafından işlenip işlenmediğinden tam olarak emin olmadığım durumlardan biri .
Johannes Pille

Sanırım sanitize_titlebiri kontrol edilmesi gereken -filter. Ancak başka ilgili işlevler de var . Bu konuda gerçekten hiçbir fikrim yok. Bazen SimplePieanlaşılması gerekenden daha kolaydır WP_Rewrite. Btw: Toscho, "Monkeyman Rewrite Analyzer" işlevinin eklentisine entegre edilmesi üzerinde çalışıyor. Burada işler gerçekten ilginç olmaya başlar.
kaiser

1
URL dostu bir bilgi oluşturma konusunda biraz daha açık olmak istiyorsanız sanitize_title_with_dashes () yöntemini de göz önünde bulundurun .
Tom Auger

5

Bu işlevi kullanabilirsiniz:

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;
}

Wp url sanitize fonksiyonunun tam olarak nasıl çalıştığı.


4

Core hizmetinizde

WordPress'te yerleşik bir geliştirici modu yoktur WP_DEBUG, bu da bu durumda size çok fazla yardımcı olmaz. Temel olarak WP, Codex'ta WP_Rewriteokuyabileceğiniz , sınıf için işlev tabanlı, düşük düzeyli bir paket olan "Yeniden Yazma API'sı" nı kullanır . global $wp_rewriteNesne sınıfla veya etkileşime incelemek için hizmetinizde duruyor.

İçine bakmaya yardımcı olan eklentiler.

Toschos "T5 Rewrite" -Plugin ve Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin size yol gösterecektir. GitHub'da "T5 Rewrite" depolarında bulabileceğiniz "Monkeyman Rewrite Analyzer" ile sorunsuz bir şekilde bütünleştirmek için "T5 Rewrite" için küçük bir uzantı yazdım .

"Monkeyman" eklentisi, Araçlar altındaki yönetici kullanıcı arayüzü menüsünde açılan yeni bir sayfa ekler . "T5 Yeniden Yaz" eklentisi Ayarlar > Kalıcı Bağlantılar sayfasına yeni bir yardım sekmesi ekler . Uzantım yardım sekmelerini belirtilen Araçlar sayfasına da ekliyor .

İşte "T5 Yeniden Yaz" eklentileri yardım sekmesi içeriğinin nasıl göründüğüne dair bir ekran görüntüsü.

resim açıklamasını buraya girin

Vorlage = Desen | Beschreibung = Açıklama | Beispiele = Örnekler

notlar

"T5 Yeniden Yaz" eklentisi, yeniden yazma nesnesini incelemenize yardımcı olan harika bir iş çıkarır. Daha da fazlasını yapar: Yeni olasılıklar ekler. Bu nedenle (en azından kurulumlarımda) temel eklenti paketimin bir parçası.


2

Aslında, wp_insert_post (post.php) çekirdek işlevine bakarsanız, bunun aşağıdakileri yaptığını göreceksiniz:

$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 );

Dikkat edilmesi gereken en önemli şey, hem wp_unique_post_slug hem de sanitize_title kullanmasıdır:

wp_unique_post_slug( sanitize_title( 

0

Eski bir soruyu devam ettirmek için affet, ama bu yöntemin benim için mükemmel çalıştığını öğrendiğim gibi aynı zorunluluk vardı:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

Bu yöntemde çift dezenfeksiyon kullanılır.

Birincisi save, HTML ve PHP etiketlerinin soyulduğu ve aksanların kaldırıldığı modu kullanır (aksanlı karakterler yerine aksanlı eşdeğerler kullanılır).

İkinci querymod, tüm boşlukların çizgilerle değiştirilmesini -ve diğer noktalama işaretlerinin kaldırılmasını sağlar.

Umarım bu birine yardımcı olur! :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.