Чи є десь сторінка, де детально вказано, як WordPress генерує кулі для URL-адрес? Я пишу сценарій, який повинен генерувати URL-коди, ідентичні тим, які створює WordPress.
Чи є десь сторінка, де детально вказано, як WordPress генерує кулі для URL-адрес? Я пишу сценарій, який повинен генерувати URL-коди, ідентичні тим, які створює WordPress.
Відповіді:
Я не можу дати вам сторінку / підручник / документацію про те, як створюються WP-роги, але погляньте на sanitize_title()
функцію.
Не створюйте помилкового враження від імені функції, це не призначене для очищення заголовка для подальшого використання як назви сторінки / публікації . Він бере рядок заголовка і повертає його для використання в URL-адресі:
Там може бути крайні випадки , коли ядро робить що - то додаткове (ви повинні дивитися на джерело , щоб переконатися в тому , що sanitize_title()
буде завжди вистачає в генерації точно такий же ви очікували), але це повинно охоплювати принаймні , 99%, а то й у всіх випадках .
sanitize_title
фільтра, застосованого у функції, чи це обробляється чимось іншим після запуску функції.
sanitize_title
-фільтр, який потрібно перевірити. Але є й інші пов'язані функції . Я насправді про це не здогадувався. Іноді здається, що SimplePie
це легше зрозуміти, ніж WP_Rewrite
річ. Btw: Toscho працює над інтеграцією функціоналу "Monkeyman Rewrite Analyzer" у свій плагін. Ось де починають справді ставати цікавими.
Ви можете використовувати цю функцію:
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.
У WordPress немає вбудованого режиму розробникаWP_DEBUG
, який не дуже допоможе вам у цьому випадку. В основному WP використовує "Переписати API" , який є функцією, низькорівневою обгорткою для WP_Rewrite
класу, про яку можна прочитати в Codex . global $wp_rewrite
Об'єкт знаходиться в вашому розпорядженні , щоб перевірити його або взаємодіяти з класом.
Toschos "T5 Rewrite" -Plugin та Jan Fabrys "Monkeyman Rewrite Analyzer" -Плагін направить вас на ваш шлях. Я написав невелике розширення для "T5 Rewrite", щоб плавно інтегрувати його з "Monkeyman Rewrite Analyzer", який ви можете знайти у вікі репостів "T5 Rewrite" тут, на GitHub .
Додаток «Мавпа» додає нову сторінку, подану в меню інтерфейсу адміністратора в розділі Інструменти . Додаток "Перепишіть T5" додає нову вкладку довідки на сторінку Налаштування > Постійні посилання . Моє розширення також додає вкладки довідки до згаданої сторінки Інструменти .
Ось скріншот того, як виглядає вміст довідкової вкладки "Перепишіть T5" на додатки.
Vorlage = Візерунок | Beschreibung = Пояснення | Beispiele = Приклади
Додаток "Перепишіть T5" виконує чудову роботу, допомагаючи перевірити об'єкт перезапису. І це робить ще більше: це додає нових можливостей. Тому це (принаймні в моїх установках) частина мого базового пакету плагінів.
Насправді, якщо ви подивитеся на основну функцію wp_insert_post (post.php), ви побачите, що вона робить наступне:
$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 );
Головне, що слід зазначити, це те, що використовується і wp_unique_post_slug, і sanitize_title:
wp_unique_post_slug( sanitize_title(
Пробачте, що відновив старе питання, але в мене була така ж необхідність, як я з'ясував, що цей метод для мене прекрасно працює:
$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now
Цей метод використовує подвійну санітарію.
Перший використовує save
режим, коли теги HTML та PHP знімаються, а наголоси видаляються (символи наголосів замінюються на неакцентовані еквіваленти).
Другий query
режим забезпечує те, що всі пробіли замінені тире -
та інші пунктуаційні знаки.
Сподіваюся, це комусь допоможе! :)