Повертаємо назад кириличні слаги WordPress після вимкнення плагінів транслітерації типу Cyr-To-Lat

Привіт:) Після встановлення україномовної копії WordPress, слаги записів, сторінок, рубрик і тегів генерується також українською. Наприклад,

site.com/привіт-світ

Часто власники сайтів хочуть, щоб усі адреси мали лише латинські символи. Для цього використовують плагіни транслітерації (наприклад, Cyr-To-Lat), які автоматично перетворюють усі кириличні символи на латинські:

site.ru/pryvit-svit

Мені якось знадобилося повернути українські адреси назад. Я видалив плагін, але він не повернув слагам початкові кириличні значення.

У результаті з'ясував, що плагін змінює на латинські символи в таблиці wp_posts, у полі post_name.

Повернути початкову адресацію можна через SQL-запит до бази даних.

Замість wp може бути інший префікс таблиць конкретної бази даних.

У табиці wp_posts -> post_name кирилиця зберігається у Punycode-форматі. Наприклад, "привіт-світ" виглядає як

%d0%bf%d1%80%d0%b8%d0%b2%d1%96%d1%82-%d1%81%d0%b2%d1%96%d1%82

Для зворотного перетворення на звичний вигляд потрібно застосувати функцію sanitize_title().

Вказаний нижче код вставте у файл functions.php і видаліть відразу після завершення виконання запиту.

/** Для сторінок/записів */

$posts = $wpdb->get_results( "SELECT ID, post_title, post_name FROM {$wpdb->posts} WHERE post_status = 'publish'" );
foreach ( (array) $posts as $post ) {
    $orig_post_slugs = sanitize_title( $post->post_title );
    $wpdb->update( $wpdb->posts, array( 'post_name' => $orig_post_slugs ), array( 'ID' => $post->ID ) );
}

/** Для рубрик/тегів */

$terms = $wpdb->get_results( "SELECT term_id, name, slug FROM {$wpdb->terms}" );
foreach ( (array) $terms as $term ) {
    $orig_term_slugs = sanitize_title( $term->name );
    $wpdb->update( $wpdb->terms, array( 'slug' => $orig_term_slugs ), array( 'term_id' => $term->term_id ) );
}

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, блоги на WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *