Як WordPress генерує URL-молюски?


17

Чи є десь сторінка, де детально вказано, як WordPress генерує кулі для URL-адрес? Я пишу сценарій, який повинен генерувати URL-коди, ідентичні тим, які створює WordPress.


Відповіді на це запитання застаріли - замість цього використовуйте codex.wordpress.org/Function_Reference/wp_unique_post_slug .
SinisterBeard

Відповіді:


16

Я не можу дати вам сторінку / підручник / документацію про те, як створюються WP-роги, але погляньте на sanitize_title()функцію.

Не створюйте помилкового враження від імені функції, це не призначене для очищення заголовка для подальшого використання як назви сторінки / публікації . Він бере рядок заголовка і повертає його для використання в URL-адресі:

  • смужки HTML та PHP
  • смужки спеціальні символи
  • перетворює всі символи в нижній регістр
  • замінює пробіли, підкреслення та періоди дефісами / тире
  • зменшує кілька послідовних тире до одного

Там може бути крайні випадки , коли ядро робить що - то додаткове (ви повинні дивитися на джерело , щоб переконатися в тому , що sanitize_title()буде завжди вистачає в генерації точно такий же ви очікували), але це повинно охоплювати принаймні , 99%, а то й у всіх випадках .


1
@kaiser: Я зрозумів, що ти просто закоханий у T5 Rewrite :) (що в моєму порядку денному, щоб перевірити) | і взагалі: Якщо заголовок дійсно довгий, WP також обрізає кулісів на певну максимальну довжину. Це один із тих випадків, коли я не зовсім впевнений, чи це робиться також за допомогою sanitize_titleфільтра, застосованого у функції, чи це обробляється чимось іншим після запуску функції.
Йоганнес Піл

Я думаю, що це sanitize_title-фільтр, який потрібно перевірити. Але є й інші пов'язані функції . Я насправді про це не здогадувався. Іноді здається, що SimplePieце легше зрозуміти, ніж WP_Rewriteріч. Btw: Toscho працює над інтеграцією функціоналу "Monkeyman Rewrite Analyzer" у свій плагін. Ось де починають справді ставати цікавими.
кайзер

1
Також врахуйте sanitize_title_with_dashes (), якщо ви хочете бути більш чіткими щодо створення сприятливого для URL-адрес слизу.
Том Ожер

5

Ви можете використовувати цю функцію:

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.


4

Ядро до ваших послуг

У 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" виконує чудову роботу, допомагаючи перевірити об'єкт перезапису. І це робить ще більше: це додає нових можливостей. Тому це (принаймні в моїх установках) частина мого базового пакету плагінів.


2

Насправді, якщо ви подивитеся на основну функцію 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( 

0

Пробачте, що відновив старе питання, але в мене була така ж необхідність, як я з'ясував, що цей метод для мене прекрасно працює:

$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режим забезпечує те, що всі пробіли замінені тире -та інші пунктуаційні знаки.

Сподіваюся, це комусь допоможе! :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.