Cyr-To-Lat

Описание

Преобразует кириллические символы в ярлыках записей, страниц и рубрик в латинские. Полезно для создания URL-ов, легко читаемых людьми.

Особенности

  • Единственный плагин с полностью редактируемой таблицей транслитерации. Позволяет добавлять/удалять пары, например: ‘Я’ => ‘Ya’, или даже ‘Пиво’ => ‘Beer’
  • Конвертирует любое количество ярлыков существующих постов, страниц и терминов в фоновых процессах
  • Сохраняет целостность постоянных ссылок уже существующих записей и страниц
  • Выполняет транслитерацию названий файлов из вложений
  • Включает русские, белорусские, украинские, болгарские, македонские, сербские, греческие, армянские, грузинские, казахские, идиш и китайские символы
  • Имеет много преимуществ перед аналогичными плагинами
  • Официально совместим с WPML

Основано на оригинальном плагине Rus-To-Lat от Антона Скоробогатова.

Спонсируется проектом Blackfire.

Поддержка плагина

Скриншоты

  • Страница опций таблиц
  • Страница опций конвертера
  • Блочный редактор с транслитерированным слагом
  • Сертификат WPML

Установка

  1. Загрузите папку cyr2lat в директорию /wp-content/plugins/.
  2. Активируйте плагин на странице «Плагины» в панели управления WordPress.

Часто задаваемые вопросы

Как назначить свои правила для замены?

Добавьте этот код к файлу functions.php вашей темы:

/**
 * Modify conversion table.
 *
 * @param array $table Conversion table.
 *
 * @return array
 */
function my_ctl_table( $table ) {
   $table['Ъ'] = 'U';
   $table['ъ'] = 'u';

   return $table;
}
add_filter( 'ctl_table', 'my_ctl_table' );

Как я могу переопределить нестандартную локаль?

Например, если ваша нестандартная локаль uk_UA, вы можете переопределить её в uk добавлением следующего кода в function.php вашей темы:

/**
 * Use non-standard locale.
 *
 * @param string $locale Current locale.
 *
 * @return string
 */
function my_ctl_locale( $locale ) {
    if ( 'uk_UA' === $locale ) {
        return 'uk';
    }

    return $locale;
}
add_filter( 'ctl_locale', 'my_ctl_locale' );

Как я могу определить собственную транслитерацию заголовков?

Добавьте примерно такой код в functions.php вашей темы.

/**
 * Filter title before sanitizing.
 *
 * @param string|false $result Sanitized title.
 * @param string       $title  Title.
 *
 * @return string|false
 */
function my_ctl_pre_sanitize_title( $result, $title ) {
    if ( 'пиво' === $title ) {
        return 'beer';
    }

    return $result;
}
add_filter( 'ctl_pre_sanitize_title', 10, 2 );

Как вы могу определить собственную транслитерацию имён файлов?

Добавьте примерно такой код в functions.php вашей темы.

/**
 * Filter filename before sanitizing.
 *
 * @param string|false $result   Sanitized filename.
 * @param string       $filename Title.
 *
 * @return string|false
 */
function my_ctl_pre_sanitize_filename( $result, $filename ) {
    if ( 'пиво' === $filename ) {
        return 'beer';
    }

    return $result;
}
add_filter( 'ctl_pre_sanitize_filename', 10, 2 );

Как я могу разрешить плагину работать на фронтенде?

Добавьте примерно такой код в functions.php вашей темы.

/**
 * Filter status allowed Cyr To Lat plugin to work.
 *
 * @param bool $allowed
 *
 * @return bool
 */
function my_ctl_allow( bool $allowed ): bool {
    $uri = isset( $_SERVER['REQUEST_URI'] ) ?
        sanitize_url( wp_unslash( $_SERVER['REQUEST_URI'] ) ) :
        '';

    if ( 0 === strpos( $uri, '/divi-comments' ) ) {
        return true;
    }

    return $allowed;
}

add_filter( 'ctl_allow', 'my_ctl_allow' );

Как я могу ограничить типы постов для фоновой конвертации?

Добавьте примерно такой код в functions.php вашей темы.

/**
 * Filter post types allowed for background conversion.
 *
 * @param array $post_types Allowed post types.
 *
 * @return array
 */
function my_ctl_post_types( $post_types ) {
    return [
        'post'          => 'post',
        'page'          => 'page',
        'attachment'    => 'attachment',
        'product'       => 'product',
        'nav_menu_item' => 'nav_menu_item',
    ];
}
add_filter( 'ctl_post_types', 'my_ctl_post_types' );

Как я могу сконвертировать много постов/терминов, используя wp-cli?

Используйте следующую команду в консоли:

wp cyr2lat regenerate [--post_type=<post_type>] [--post_status=<post_status>]

Где
-post_type список типов постов,
-post_status список статусов постов.

Как я могу безопасно регенерировать миниатюры?

Регенерация миниатюр командой wp media regenerate может сломать ссылки в старых постах, потому что имена файлов транлитерируются.

Чтобы избежать этого, деактивируйте плагин cyr2lat на время регенерации.

wp media regenerate --skip-plugins=cyr2lat

Могу ли я внести свой вклад?

Да, вы можете!

Отзывы

15.10.2023 3 ответа
Плагин отличный (6.0.5), транслитерировал урлы (слаги для продвинутых) записей, страниц и меню и всего остального.Обратите внимание, что транслитерацию урлов всех меток (/tag/) и категорий (/category/) он тоже сделает, а в настройках нет отдельных пунктов отвечающих за метки и категории.
02.05.2023 4 ответа
Українська транслітерація не відповідає постанові Кабінету Міністрів України від 27 січня 2010 р. № 55, яка визначає стандарт для транслітерації української мови, треба вручну виправляти.
17.05.2023 2 ответа
После обновления WordPress перестал выполняться запрос к базе данных , т.е. просто ничего не выдавало. я обновила все плагины , в том числе и Cyr2Lat. проблема не решилась. На хостинге проверили БД, ошибок не было. Меня спас тестовый аналогичный сайт, на котором WP был обновлен, но все работало хорошо. и вот там после обновления вашего плагина, картина с запросом повторилась, т.е не работал запрос к БД у меня была старая версия 5.3.0. после отката на нее, запрос отрабатывает отлично.
Посмотреть все 92 отзыва

Участники и разработчики

«Cyr-To-Lat» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

«Cyr-To-Lat» переведён на 9 языков. Благодарим переводчиков за их работу.

Перевести «Cyr-To-Lat» на ваш язык.

Заинтересованы в разработке?

Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.

Журнал изменений

6.0.5 (09.10.2023)

  • Fixed displaying file descriptions in the Theme Editor; now in the current locale.

6.0.4 (23.09.2023)

  • Fixed disappeared file descriptions on the Theme File Editor page.

  • = 6.0.3 (29.07.2023) =

  • Исправлена фатальная ошибка с Jetpack sync.

6.0.2 (26.07.2023)

  • Исправлена фатальная ошибка с admin_footer_text().

6.0.1 (26.07.2023)

  • Исправлена фатальная ошибка на странице Системной Информации при пустых настройках.

6.0.0 (26.07.2023)

  • Прекращена поддержка PHP 5.6. Минимально требуемая версия PHP теперь 7.0.
  • Протестировано с WordPress 6.3.
  • Протестировано с WooCommerce 7.9.
  • Добавлена вкладка Системная Информация.
  • Добавлен фильтр ‘ctl_allow’
  • Исправлена консольная ошибка при сохранении табличных данных.
  • Исправлена установка текущей таблицы на странице Таблицы с WPML.

5.5.3 (15.07.2023)

  • Протестировано с WooCommerce 7.8.
  • Исправлена deprecation error «strpos(): Passing null to parameter», возникавшая в debug.log.

5.5.2 (31.03.2023)

  • Исправлена транслитерация тегов с Polylang и WPML.

5.5.1 (21.03.2023)

  • Исправлена транслитерация атрибутов на фронтенде WC.

5.5.0 (18.03.2023)

  • Протестировано с WordPress 6.2.
  • Протестировано с WooCommerce 7.5.
  • Улучшено быстродействие страницы настроек Таблицы.
  • Исправлен показ постов и тегов на фронтенде.
  • Исправлен показ не-транслитерированных кириллических тегов на бэкенде.

5.4.0 (15.12.2022)

  • Протестировано с WordPress 6.1 и WooCommerce 7.2.
  • Добавлена совместимость с функцией высокопроизводительного хранилища WC (COT).

5.3.0 (23.05.2022)

  • Протестировано с WordPress 6.0 и WooCommerce 6.5.

5.2.7 (14.02.2022)

  • Протестировано с WooCommerce 6.2.
  • Добавлена поддержка PHP 8.1.

5.2.6 (25.12.2021)

  • Отменено исправление, сделанное в 5.2.5 для 404 с WPML, поскольку оно создавало несколько проблем во фронтэнде.
  • Снова исправлена ошибка 404 в архивах, созданных с помощью WPML перед активацией cyr2lat.

5.2.5 (19.12.2021)

  • Протестировано до WordPress 5.9 и WooCommerce 6.0.
  • Исправлена проблема с Polylang — не меняйте язык администратора при редактировании записи.
  • Исправлена проблема с JetPack — фатальная ошибка при синхронизации.
  • Исправлена ошибка 404 в архивах, созданных с помощью WPML перед активацией cyr2lat.

5.2.4 (07.09.2021)

  • Исправлена проблема с тем, что WooCommerce Не показывал атрибуты вариативного товара.
  • Исправлена проблема с Elementor и WPML, бесконечный цикл.

5.2.3 (07.09.2021)

  • Исправлена проблема с плагином WP Foro — транслитерация ярлыка топика, создаваемого на фронтенде.
  • Исправлена ошибка Polylang с REST-запросом.

5.2.2 (06.09.2021)

  • Исправлена проблема, связанная с ошибкой в синхронизации Jetpack.
  • Оптимизирован код, связанный с фильтрацией локали WPML.
  • Исправлена бесконечная загрузка страницы таксономии с WPML.
  • Исправлено: ‘не найдено’ на странице таксономии с WPML.

5.2.1 (29.07.2021)

  • Определение языка WPML производится лишь один раз, для повышения производительности.
  • Уведомления о неверном запросе SQL не выводятся, когда таксономия пуста.

5.2.0 (27.07.2021)

  • Добавлена поддержка для категорий и тегов на других языках с wpml.

5.1.0 (19.07.2021)

  • Исправлено issue-95 — 404 на локализованных терминах, созданных до установки плагина.
  • Добавлен сброс кэша после массовой конвертации.
  • Протестировано с WordPress 5.8

5.0.4 (17.04.2021)

  • Исправлена ошибка в конвертере при отсутствии сохранённых опций

5.0.3 (03.04.2021)

  • Добавлен фильтр ‘ctl_locale’
  • Исправлен перевод вкладок на странице настроек
  • Исправлены зарегистрированные типы постов в настройках конвертера

5.0.2 (27.03.2021)

  • Исправлена ошибка при создании тега с тем же слагом, что и категория

5.0.1 (22.03.2021)

  • Исправлена фатальная ошибка при загрузке плагина на некоторых серверах

5.0.0 (18.03.2021)

  • Реализованы вкладки на странице опций.
  • Добавлены опции выбора типов и статусов постов для фоновой конвертации
  • Цвета приведены в соответствие с официальной палитрой WP
  • Исправлена ошибка с Polylang, когда локаль не совпадает со слагом языка

4.6.4 (03.03.2021)

  • Протестировано до WordPress 5.7

4.6.3 (21.02.2021)

  • Исправлена ошибка с типом поста attachment, отфильтрованным ‘ctl_post_types’.
  • Исправлена ошибка с фоновой конвертацией терминов атрибутов товаров.

4.6.2 (11.02.2021)

  • Исправлена ошибка с несуществующие функцией PLL().

4.6.1 (10.02.2021)

  • Исправлена ошибка с Polylang.

4.6.0 (10.02.2021)

  • Добавлена совместимость с Polylang.
  • Добавлен попап подтверждения перед массовой конвертацией слагов.
  • Улучшена выборка постов и терминов для конвертации во избежание выборки лишних элементов при массовой конвертации слагов.
  • Исправлена ошибка с редиректом со старых слагов но новые после фоновой конвертации слагов.
  • Исправлен код js для совместимости со старыми браузерами типа IE

4.5.2 (08.12.2020)

  • Исправлена ошибка с деплоем на wp.org.

4.5.1 (07.12.2020)

  • Протестировано с WordPress 5.6
  • Протестировано на PHP 5.6-8.0

4.5.0 (18.05.2020)

  • Добавлены греческий и армянский языки
  • Добавлена фоновая конвертация вложений и миниатюр
  • Исправлено фоновое конвертирование существующих слагов

4.4.0 (18.04.2020)

  • Полная гибкость в редактировании таблицы транслитерации: теперь возможно добавлять/удалять пары на странице настроек
  • Возвожность редактирования не только значений, но и ключей в таблице транслитерации
  • Сохранение активной таблицы через ajax
  • Отслеживание изменений в активной таблице
  • Авто-сохранение настроек
  • Информация о текущей локали на странице настроек
  • Активация таблицы текущей локали во время загрузки страницы настроек
  • Добавлен китайский язык
  • Исправлено: ярлык не обновлялся при создании копии товара woocommerce

4.3.5 (28.03.2020)

  • Протестировано с WordPress 5.4
  • Исправлена ошибка с исчезновением атрибутов WooCommerce

4.3.4 (22.02.2020)

  • Исправлено не-преобразование ярлыков с WPML
  • Ограничена конвертация постов: теперь только публичные и nav_menu_item
  • Добавлен фильтр ctl_post_types

4.3.3 (20.02.2020)

  • Переработан основной фильтр плагина
  • Улучшено быстродействие путём минимизации числа вызовов
  • Исправлена таблица грузинского языка
  • Исправлено дублирование ярлыков в таксономиях
  • Исправлено предупреждение с WooCommerce, когда mbstring не загружена
  • Исправлена транслитерация ярлыка черновика поста
  • Таблицы сортированы по локальному алфавиту

4.3.2 (29.12.2019)

  • Исправлена проблема с установкой max_input_vars на некоторых хостингах

4.3.1 (27.12.2019)

  • Добавлено требование иметь max_input_vars >= 5000
  • Добавлена автоматическая деактивация плагина, если требования не соблюдены
  • Добавлена попытка авто-коррекции значения max_input_variable

4.3 (14.12.2019)

  • Добавлена поддержка китайского языка
  • Протестировано до WordPress 5.3
  • Протестировано до PHP 7.4
  • Внешняя библиотека `wp-background-processing` спрятана под неймспейс плагина, чтобы избежать ошибок в некоторых кейсах

4.2.3 (29.08.2019)

  • Полифил Symphony Mbstring перенесён в собственное пространство имён, чтобы избежать проблем с автозагрузкой composer на некоторых сайтах.

4.2.2 (28.08.2019)

  • Добавлена поддержка плагина ACF (Advanced Custom Fields)
  • Добавлена поддержка сербского языка
  • Добавлен новый фильтр ctl_pre_sanitize_filename
  • Исправлена неверная конвертация букв Ё, ё, Й, й в названиях файлов под операционной системой Mac (старая известная проблема Mac’ов)

4.2.1 (23.06.2019)

  • Исправлена проблема с сессиями
  • Исправлена последовательность сообщений при конвертации существующих ярлыков.
  • Добавлена проверка версии PHP для избежания фатальной ошибки при активации на старых сайтах.
  • Добавлены вертикальные табы в настройках плагина.

4.2 (28.05.2019)

  • Минимально необходимая версия php поднята до 5.6
  • Добавлены phpunit-тесты для всех версий php от 5.6 до 7.3
  • Устранено предупреждение php во время конвертации существующих ярлыков
  • Исправлен выбор локали при конвертации существующих ярлыков записей, когда активирован WPML
  • Исправлена ошибка с бесконечной переадресацией некоторых ярлыков после конвертации существующих ярлыков

4.1.2 (22.05.2019)

  • Исправлена фатальная ошибка в Cyr_To_Lat_Converter с php 5.2

4.1.1 (22.05.2019)

  • Исправлена фатальная ошибка в Cyr_To_Lat_Converter с php 5.6

4.1 (21.05.2019)

  • Добавлена таблица he_IL
  • Добавлен перевод плагина на украинский
  • Добавлен перевод плагина на шведский
  • Добавлены phpunit-тесты. Все классы плагина покрыты на 100%
  • Добавлены js-тесты. Весь js-код плагина покрыт на 100%
  • Исправлена ошибка с синхронизацией Jetpack
  • Исправлена ошибка с пустыми слагами при использовании символов вне локали

4.0 (24.04.2019)

  • Добавлена кнопка для конвертации существующих ярлыков, вместо чекбокса
  • Добавлены уведомления в консоли во время конвертации существующих ярлыков
  • Добавлены параметры post_type и post_status в команду wp-cli
  • Исправлен текстовый домен
  • Упрощён package.json, чтобы сделать финальный js ещё меньше
  • Добавлены phpunit-тесты для главного класса плагина
  • Добавлен travis.yml для непрерывной интеграции на GitHub, и улучшения надёжности кода

3.7 (12.04.2019)

  • Добавлены белорусская, македонская и казахская таблицы
  • Исправлена ошибка с MariaDB во время конвертации существующих ярлыков
  • Исправлено: не сохранялись пользовательские правки в дефолтной таблице iso9

3.6.5 (11.02.2019)

  • Добавлены очереди для процесса фоновой ковертации существующих ярлыков

3.6.4 (06.02.2019)

  • Исправлена ошибка с редиректом _wp_old_slug
  • Исправлена ошибка с urldecode в постах.

3.6.3 (04.02.2019)

  • Исправлена ошибка с активацией по сети для мультисайта

3.6.2 (01.02.2019)

  • Меню перемещено в секцию Настройки.
  • Исправлен текстовый домен.

3.6.1 (31.01.2019)

  • Текстовый домен скорректирован.

3.6 (31.01.2019)

  • Добавлена страница настроек плагина.
  • Страница настроек позволяет редактировать таблицы конвертации онлайн.
  • Код сконвертирован в ООП.
  • Произведён рефакторинг кода в соответствии со стандартами кодирования WordPress.
  • JS разработан в соответствии со стандартом ECMA-6.
  • Страница настроек также работает при выключенном JS в браузере.
  • Добавлены composer и yarn.
  • Добавлены ресурсы (баннер, иконка, административная иконка).

3.4 (21.01.2019)

  • Протестировано до WP 5.1
  • Форматирование кода по WPCS.
  • Строгое соответствие.
  • Фигурные скобки {} удалены из оператора MySQL, чтобы разрешить проверку имён таблиц в PhpStorm.
  • Обновлены .gitignore и README.md
  • Добавлен новый фильтр ctl_pre_sanitize_title

3.3 (18.01.2019)

  • wpcs 1.0
  • Исправлено много ошибок
  • Добавлена поддержка Gutenberg

3.2

  • Добавлена транслитерация при публикации через XML-RPC
  • Исправлена ошибка «неправильная таксономия» при просмотре часто используемых тегов

3.1

  • Исправлена транслитерация при сохранении черновика

3.0

  • Добавлена автоматическая конвертация ярлыков существующих постов, страниц и терминов
  • Добавлено сохранение существующих постов и интеграция с постоянными ссылками страниц
  • Добавлена транслитерация имён файлов вложений
  • Таблица транслитерации обновлена в соответствии со стандартом ISO9
  • Включает белорусские, украинские, болгарские и греческие символы
  • Добавлен фильтр для таблицы транслитерации

2.1

  • Оптимизирован вызов фильтра

2.0

  • Добавлены проверки существующих терминов

1.0.1

  • Обновлено описание

1.0

  • Релиз первой версии плагина.