WordPress'in URL'ler için salyangozları tam olarak nasıl oluşturduğunu ayrıntılandıran bir sayfa var mı? WordPress'in oluşturduğu URL sümüklerini oluşturması gereken bir komut dosyası yazıyorum.
WordPress'in URL'ler için salyangozları tam olarak nasıl oluşturduğunu ayrıntılandıran bir sayfa var mı? WordPress'in oluşturduğu URL sümüklerini oluşturması gereken bir komut dosyası yazıyorum.
Yanıtlar:
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:
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 .
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 .
sanitize_title
biri kontrol edilmesi gereken -filter. Ancak başka ilgili işlevler de var . Bu konuda gerçekten hiçbir fikrim yok. Bazen SimplePie
anlaşı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.
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ığı.
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_Rewrite
okuyabileceğ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_rewrite
Nesne sınıfla veya etkileşime incelemek için hizmetinizde duruyor.
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ü.
Vorlage = Desen | Beschreibung = Açıklama | Beispiele = Örnekler
"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ı.
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(
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 query
mod, 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! :)