Coder Social home page Coder Social logo

mihdan / cyr2lat Goto Github PK

View Code? Open in Web Editor NEW
36.0 5.0 10.0 3.7 MB

Converts Cyrillic characters in post, page and term slugs to Latin characters. Useful for creating human-readable URLs.

Home Page: https://wordpress.org/plugins/cyr2lat/

License: GNU General Public License v2.0

PHP 91.75% CSS 1.24% JavaScript 6.22% Shell 0.44% Makefile 0.35%
wordpress wordpress-plugin converts-cyrillic-characters latin-characters php php5 php7 wpml cyr lat

cyr2lat's Introduction

Cyr-To-Lat

Converts Cyrillic characters in post, page and term slugs to Latin characters. Useful for creating human-readable URLs.

Banner

Features

  • The only plugin with fully editable transliteration table. Allows add/remove and edit pairs like 'Я' => 'Ya', or even 'Пиво' => 'Beer'
  • Converts any number of existing post, page and term slugs in background processes
  • Saves existing post and page permalinks integrity
  • Performs transliteration of attachment file names
  • Includes Russian, Belorussian, Ukrainian, Bulgarian, Macedonian, Serbian, Greek, Armenian, Georgian, Kazakh, Hebrew, and Chinese characters
  • Has many advantages over similar plugins
  • Officially compatible with WPML

WPML Certificate

Installation

git clone https://github.com/mihdan/cyr2lat.git
cd cyr2lat
make install-prod

Development

git clone https://github.com/mihdan/cyr2lat.git
cd cyr2lat
make install

WP-CLI support

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

Where -post_type is list of post types, -post_status is list of post statuses.

Packagist

Total Downloads

License

Latest Stable Version

Latest Unstable Version

composer.lock

Code Coverage

Coverage Status

License

The WordPress Plugin Cyr-To-Lat is licensed under the GPL v2 or later.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

A copy of the license is included in the root of the plugin’s directory. The file is named LICENSE.

Credits

The current version of the Cyr-To-Lat was developed by Sergey Biryukov, Mikhail Kobzarev, and Igor Gergel.

Contributors: SergeyBiryukov, mihdan, karevn, webvitaly, kagg-design.

Sponsor: Blackfire

Blackfire Logo

cyr2lat's People

Contributors

dependabot[bot] avatar kagg-design avatar mihdan avatar sergeybiryukov avatar versusbassz avatar wppunk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

cyr2lat's Issues

Оптимизация работы с Polylang

На данный момент возможна эффективная транслитерация только одного языка. При установке плагина Polylang и добавлении 2 дополнительных языков с которыми по отдельности отлично справляется Cyr-To-Lat, получаем транслитерацию только того языка, который выбран как основной язык сайта WP.

Удаление символов вне кодировки

При создании/конвертации поста/термина с символами вне текущей кодировки, эти символы удаляются, даже если они являются валидными для UTF-8.

Пример: при локали сайта ru_RU создать запись с заголовком на иврите: מה המצב
Результат: создаётся пустой слаг, и WordPress заменяет его на нечто вроде /1656-2.

Предложение: не трогать символы вне кодировки. Заголовок вида מה המצב, Иван? преобразовывать к מה-המצב-ivan.

Cyrillic variations disappearing in woocommerce

Hi there!

Please, help me to solve this issue with my cyrillic product variations ..

Then I activate plugin “Cyr to Lat enhanced” .. all my variations somehow disappear ..

Please see the screenshots
before I activated “Cyr to Lat enhanced”:
https://prnt.sc/let1vx

after:
https://prnt.sc/let23r

Thank you!

The page I need help with: https://www.specialistweb.info/tvoiprotein/?product=vp-lab-l-carnitine-500-ml

Источник - https://wordpress.org/support/topic/cyrillic-variations-disappearing-in-woocommerce/
Этот баг в форке, но cyr2lat так же подвержен

При импорте товаров проблемы с картинками на кириллице

При импорте картинок названия переводятся на латиницу, а ссылки на них нет(
Импортирую плагином wp all import товары, но если название картинки на кириллице, то она транслитерируется на латиницу, а ссылка на изображение остается кириллическая. Соответственно товар отображается без картинки(
Что посоветуете?

Обработка ошибки работы wp_remote_post()

Вызов \Cyr_To_Lat\KAGG\WP_Background_Processing\WP_Background_Process::dispatch() возвращает результат работы wp_remote_post(), который никак не обрабатывается. В некоторых случаях может возникать ошибка отправки данных через wp_remote_post(), например, ошибка 401 Unauthorized в случае наличия Basic-авторизации на тестовом сервере или для /wp-admin/.

Вызов dispatch() происходит в двух местах:
\Cyr_To_Lat\Converter::convert_existing_post_slugs()
\Cyr_To_Lat\Converter::convert_existing_term_slugs()

Ошибка может возникать при нажатии кнопки "Конвертировать существующие ярлыки" на странице настроек плагина, при наличии ошибки этот функционал не работает. В идеале, желательно выводить информацию об ошибке работы wp_remote_post() в интерфейс и в лог ошибок.

Новые записи получают ярлык 'chernovik'

WordPress 5.2.2, чистая установка:

  1. Создаю запись с заголовком «Тест».
  2. Получаю ярлык тест (%d1%82%d0%b5%d1%81%d1%82), как и ожидал.

WordPress 5.2.2 с Cyr-To-Lat 4.2.1:

  1. Создаю запись с заголовком «Тест».
  2. Получаю ярлык chernovik. Если не поправить вручную, после публикации таким и остаётся. Видимо, берётся из __( 'Auto Draft' ) в get_default_post_to_edit().

Именно об этом я говорил, когда предупреждал, что код ctl_sanitize_post_name() — это примерный вариант, который стоит тщательно протестировать перед релизом, а не выкладывать как есть :)

Конфликт с Lingotek Translation

Написали в ВК:

Плагин Cyr-To-Lat конфликтует с плагином Lingotek Translation. Последний перестает корректно работать. Разработчикам Lingotek я уже сообщил, а тебе пишу тут. Надеюсь, поможет. Удачи!

Из подробностей только это:

Rolf Diedrichs (Lingotek Support)
Feb 13, 4:17 AM MST

Hi Valery,

Suddenly it makes sense while reading about the plugin. The URL of the post/page gets changed and Lingotek does not have a way to send the callback. (At least that is what I think happened)

Regards,
Rolf

The WooCommerce nonce_user_logged_out filter is overwriting

Hi,
The first: nice code ;)

I noticed that the plugin add the nonce_user_logged_out filter. This filter could cause issues with other plugins, like WooCommerce.
WooCommerce adds a nonce_user_logged_out filter and cry2lat overwrites it. I think that adding the filter is no-needed.

The class Cyr_To_Lat_Converter instances an object of Cyr_To_Lat_Post_Conversion_Process, and an object of Cyr_To_Lat_Term_Conversion_Process in the __contruct.

Cyr_To_Lat_Post_Conversion_Process and Cyr_To_Lat_Term_Conversion_Process extend of WP_Async_Request, which adds the nonce_user_logged_out filter on the init hook; but Cyr_To_Lat_Converter only uses the instances in wp_admin. This is creating PHP sessions in the frontend and it is overwriting the WooCommerce nonce based on session cookie.

Why not instance the objects in the admin_init hook?

/**
	 * Cyr_To_Lat_Converter constructor.
	 *
	 * @param Cyr_To_Lat_Main                    $main              Plugin main class.
	 * @param Cyr_To_Lat_Settings                $settings          Plugin settings.
	 * @param Cyr_To_Lat_Post_Conversion_Process $process_all_posts Plugin settings.
	 * @param Cyr_To_Lat_Term_Conversion_Process $process_all_terms Plugin settings.
	 * @param Cyr_To_Lat_Admin_Notices           $admin_notices     Plugin settings.
	 */
	public function __construct(
		$main, $settings, $process_all_posts = null, $process_all_terms = null, $admin_notices = null
	) {
		$this->main              = $main;
		$this->settings          = $settings;
		$this->option_group      = Cyr_To_Lat_Settings::OPTION_GROUP;
		$this->process_all_posts = $process_all_posts;
		$this->process_all_terms = $process_all_terms;

		$this->admin_notices = $admin_notices;
		if ( ! $this->admin_notices ) {
			$this->admin_notices = new Cyr_To_Lat_Admin_Notices();
		}

		$this->init_hooks();
	}

	/**
	 * Init class hooks.
	 */
	public function init_hooks() {
		add_action( 'admin_init', array( $this, 'instance_conversion_process' ), 5 );
		add_action( 'admin_init', array( $this, 'process_handler' ) );
		add_action( 'admin_init', array( $this, 'conversion_notices' ) );
	}

	/**
	 * Instances the conversion process objects.
	 */
	public function instance_conversion_process() {
		if ( ! $this->process_all_posts ) {
			$this->process_all_posts = new Cyr_To_Lat_Post_Conversion_Process( $main );
		}

		if ( ! $this->process_all_terms ) {
			$this->process_all_terms = new Cyr_To_Lat_Term_Conversion_Process( $main );
		}
	}

Or check if is_admin before instance the objects:

$this->process_all_posts = $process_all_posts;
		if ( ! $this->process_all_posts && is_admin() ) {
			$this->process_all_posts = new Cyr_To_Lat_Post_Conversion_Process( $main );
		}

		$this->process_all_terms = $process_all_terms;
		if ( ! $this->process_all_terms && is_admin() ) {
			$this->process_all_terms = new Cyr_To_Lat_Term_Conversion_Process( $main );
		}

Thanks for your work :)

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

Нужно простая поддержка словоформ в URL для популярных плагинов:

  • Yoast SEO
  • Rank Match
  • The SEO Framework
  • All in one SEO pack

Перекодировать ссылки для woocommerce

Мне нужно перекодировать все ссылки на woocommerce, надо что бы "щ" было не "shh", а "sh".
Я попробовал поменять символ в настройках плагина в админке, и нажать на кнопку конвектировать существующие ярлыки, но появилась ошибка
Cyr To Lat не нашёл существующих ярлыков записей для конвертации.

Тогда я в function.php добавил
add_filter( 'ctl_table', 'my_cyr_to_lat_table' );
function my_cyr_to_lat_table($ctl_table) {
$ctl_table['щ'] = 'SH';
$ctl_table['щ'] = 'sh';
return $ctl_table;
}
А потом через WP-CLI выполнил команду
wp cyr2lat regenerate [—post_type='product'] [—post_status='publish']

Но опять же, не чего не произошло...

Версия cyr-to-lat 4.3.2
WordPress 5.3.2

Поддержка WP-CLI

Например, можно перегенерить все URL для старых постов, при смене таблицы транслитерации или при первичной инсталляции

Заголовок файла на русском языке

Здравствуйте.
Столкнулся с небольшой проблемой. Есть сайт, на который загружают прайс-листы. Названия файлов на русском языке.

При редактировании страницы и прямом переносе файла в блок транслируется заголовок.
Прайс от 13.05.19 (Скачать) -> Prajs-ot-13.05.19 (Скачать)
Каждый раз приходится редактировать название заголовка, что несколько неудобно.

Если предварительно загружать файлы в “Библиотеку файлов”, заголовок не меняется и остаётся на русском.

https://wordpress.org/support/topic/%d0%b7%d0%b0%d0%b3%d0%be%d0%bb%d0%be%d0%b2%d0%be%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0-%d0%bd%d0%b0-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%be%d0%bc-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b5/#post-11986097

WordPress 5.2+ сообщает об ошибке

Здравствуйте,
в работе плагина проблем не замечено было, но после обновления Wordpress 5.2.1 на администраторский адрес пришло сообщение об автоматическом обнаружении ошибки. В конце вот такой вот лог:

Подробности ошибки

Ошибка с типом E_ERROR возникла на строке 133 файла ...../wp-content/plugins/cyr2lat/includes/class-cyr-to-lat-main.php.
Сообщение об ошибке: Maximum execution time of 30 seconds exceeded

Поддержка ACF

Перевод полей acf через cyr2lat, посмотреть как сделано у WPML
Заюзать хуки acf.addFilter( 'generate_field_object_name', function(val) {} )

Ломаются старые русские урлы

  1. Создать пост с русским урлом
  2. Поставить плагин
  3. Зайти в редактирование поста
  4. Сохранить пост
  5. URL сломается - не переведётся в транслит и пропадут проценты, что нельзя будет использовать urldecode

Ломаются страницы категорий и тегов с кириллическим URL

После активации плагина ломаются страницы тегов и категорий с кириллическим URL (типа site.ru/category/имя-категории) - выдают ошибку 404. После отключения плагина снова все работает.
Если есть необходимость сохранить для старых категорий старые кириллические URL, приходится искать другой плагин.

Заметил это на существующем большом сайте WP 5.6.2, подтвердилось и на пустом WP 5.7 со стандартной темой и отключенными другими плагинами.
Версия плагина 4.6.4

Предусмотреть отмену транслитерации при перегенерации миниатюр

Использую WP CLI для перегенерации миниатюр, команда

wp media regenerate

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

Скорее всего та же проблема будет и при использовании подобных плагинов по перегенерации миниатюр.

При переходе с Rus-To-Lat меняются классы меню

Из Slack:

...Переделываю сайт. Там был когда-то Rus-to-Lat, но я его давно заменил на Cyr-to-Lat. Это меню редактировал (не помню, создавал ли или было, но по-моему и создавал я) уже давненько. Но точно уже с Cyr-to-Lat.
И вот сегодня я обновил и плагин и WP, опять отредактировал меню, и оно у меня поплыло.
После редактирования меню поменялся его класс, который формируется из названия меню.
Меню называется «Верхнее меню». Класс был menu-verxnee-menyu-container, а стал menu-verhnee-menyu-container. (verxnee — verhnee)
И id'шки ul также полетели.

Если классы меню уже были на латинице — при редактировании они не должны меняться (как и ярлыки записей).

Не правильно работает с плагином WOOBE

Вот смотри, если ставить старый добрый плагин, то работает как надо с плагином WOOBE, там подвох в том что когда создаешь новый товар, посредством скорее AJAX то URL не прописывается новый до тех пор, пока не пропишешь свой, а по умолчанию там стоит заголовок "Новый продукт", а у твоего плагина сразу прописывается в URL заголовок как "новый продукт", получается мне приходится залазить в свойства товара и удалять принулительно URL, чтобы он потом перепрописался с заголовка.

Неправильное сохранение _wp_old_slug при фоновой конвертации

Вопрос задавался несколько раз.

https://wordpress.org/support/topic/%d0%bd%d0%b5%d1%82%d1%83-%d1%80%d0%b5%d0%b4%d0%b8%d1%80%d0%b5%d0%ba%d1%82%d0%b0-2/

В частности, думаю, что и эта проблема, хоть и невнятно изложенная, того же рода: https://wordpress.org/support/topic/actual-permalink-is-super-long-2/

Последовательность:

  1. Отключаем плагин
  2. Создаём пост со слагом новый
  3. Включаем плагин, проводим фоновую конвертацию
  4. Пост получает слаг novyj, но в _wp_old_slug записывается новый и переадресация со старого слага на новый не работает. Потому что в _wp_old_slug должно быть %d0%bd%d0%be%d0%b2%d1%8b%d0%b9 (url-encoded)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.