Apakah ada halaman di suatu tempat yang merinci persis bagaimana WordPress menghasilkan siput untuk URL? Saya sedang menulis sebuah skrip yang perlu menghasilkan siput URL yang identik dengan yang dihasilkan WordPress.
Apakah ada halaman di suatu tempat yang merinci persis bagaimana WordPress menghasilkan siput untuk URL? Saya sedang menulis sebuah skrip yang perlu menghasilkan siput URL yang identik dengan yang dihasilkan WordPress.
Jawaban:
Dari kelelawar, saya tidak bisa memberi Anda halaman / tutorial / dokumentasi tentang bagaimana siput WP dihasilkan, tetapi lihat sanitize_title()
fungsinya.
Jangan mendapatkan kesan yang salah dengan nama fungsi, itu tidak dimaksudkan untuk membersihkan judul untuk penggunaan lebih lanjut sebagai judul halaman / posting . Dibutuhkan string judul dan mengembalikannya untuk digunakan dalam URL:
Ada mungkin menjadi kasus di mana tepi inti melakukan sesuatu tambahan (Anda harus melihat sumber untuk memverifikasi bahwa sanitize_title()
akan selalu cukup dalam menghasilkan persis sama yang Anda harapkan), tapi ini harus mencakup setidaknya 99%, jika tidak semua, kasus .
sanitize_title
filter yang diterapkan dalam fungsi juga, atau apakah itu ditangani oleh sesuatu yang lain setelah fungsi dijalankan.
sanitize_title
filter yang perlu diperiksa. Tetapi ada juga fungsi terkait lainnya . Saya benar-benar tidak tahu tentang ini. Kadang-kadang tampaknya SimplePie
lebih mudah dipahami daripada WP_Rewrite
itu. Btw: Toscho berfungsi mengintegrasikan fungsi "Monkeyman Rewrite Analyzer" ke dalam plugin-nya. Di situlah hal-hal mulai menjadi sangat menarik.
Anda dapat menggunakan fungsi ini:
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;
}
Ini semacam bagaimana fungsi wp url berfungsi.
Tidak ada mode pengembang selain WordPress WP_DEBUG
yang tidak banyak membantu Anda dalam hal ini. Pada dasarnya WP menggunakan "Rewrite API" , yang merupakan fungsi, pembungkus tingkat rendah untuk WP_Rewrite
kelas, yang dapat Anda baca di Codex . The global $wp_rewrite
objek berdiri di layanan Anda untuk memeriksa atau berinteraksi dengan kelas.
Toschos "T5 Rewrite" -Plugin dan Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin akan memandu jalan Anda. Saya telah menulis ekstensi kecil untuk "T5 Rewrite" untuk memadukannya dengan lancar dengan "Monkeyman Rewrite Analyzer", yang dapat Anda temukan di wiki wiki "T5 Rewrite" di GitHub .
"Monkeyman" -plugin menambahkan halaman baru, diajukan di menu UI admin di bawah Tools . "T5 Rewrite" -plugin menambahkan tab bantuan baru ke halaman Pengaturan > Permalinks . Ekstensi saya menambahkan tab bantuan ke Alat- halaman yang disebutkan juga.
Berikut adalah tangkapan layar dari apa yang tampak seperti konten tab "T5 Rewrite" bantuan.
Vorlage = Pola | Beschreibung = Penjelasan | Beispiele = Contoh
"T5 Rewrite" -plugin melakukan pekerjaan yang luar biasa dengan membantu Anda memeriksa objek penulisan ulang. Dan itu bahkan lebih: itu menambah kemungkinan baru. Oleh karena itu (paling tidak di instalasi saya) bagian dari paket plugin dasar saya.
Sebenarnya, jika Anda melihat fungsi inti wp_insert_post (post.php), Anda akan melihat bahwa ia melakukan hal berikut:
$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 );
Kuncinya adalah menggunakan wp_unique_post_slug dan sanitize_title:
wp_unique_post_slug( sanitize_title(
Maafkan untuk melanjutkan pertanyaan lama, tetapi saya memiliki kebutuhan yang sama ketika mengetahui metode ini bekerja dengan baik untuk saya:
$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now
Metode ini menggunakan sanitasi ganda.
Yang pertama menggunakan save
mode, di mana tag HTML dan PHP dilucuti, dan aksen dihapus (karakter beraksen diganti dengan non-aksen setara).
Kedua query
Mode memastikan semua ruang diganti dengan tanda hubung -
dan tanda baca lainnya dihapus.
Semoga ini bisa membantu seseorang! :)