


Блог IT-шника
Блог IT-шника
Привіт:) Після встановлення україномовної копії 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 ) );
}