first commit

This commit is contained in:
User A0264400
2026-04-01 23:20:16 +03:00
commit a766acdc90
23071 changed files with 4933189 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
<?php
/**
* Activator for the cyrlitera
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 09.03.2018, Webcraftic
* @see Wbcr_Factory480_Activator
* @version 1.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class WCTR_Activation extends Wbcr_Factory480_Activator {
/**
* Runs activation actions.
*
* @since 1.0.0
*/
public function activate() {
WCTR_Plugin::app()->updatePopulateOption( 'use_transliteration', 1 );
WCTR_Plugin::app()->updatePopulateOption( 'use_transliteration_filename', 1 );
WCTR_Plugin::app()->updatePopulateOption( 'filename_to_lowercase', 1 );
}
}

View File

@@ -0,0 +1,41 @@
jQuery(function($){
// transliterate field-name
acf.addFilter('generate_field_object_name', function(val){
return replace_field(val);
});
$(document).on('keyup change', '.acf-field .field-name', function(){
if ( $(this).is(':focus') ){
return false;
}else{
var val = $(this).val();
val = replace_field( val );
if ( val !== $(this).val() ) {
$(this).val(val);
}
}
});
function replace_field( val ){
console.log(val);
val = $.trim(val);
if(window.cyr_and_lat_dict === undefined){
console.error('Cyrlitera for ACF: lang dictionary not loaded!')
return val;
}
var table = window.cyr_and_lat_dict;
$.each( table, function(k, v){
var regex = new RegExp( k, 'g' );
val = val.replace( regex, v );
});
val = val.replace( /[^\w\d-_]/g, '' );
val = val.replace( /_+/g, '_' );
val = val.replace( /^_?(.*)$/g, '$1' );
val = val.replace( /^(.*)_$/g, '$1' );
return val;
}
});

View File

@@ -0,0 +1,239 @@
<?php
/**
* Admin boot
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright Webcraftic 25.05.2017
* @version 1.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* @return array
*/
function wbcr_cyrlitera_install_conflict_plugins() {
$install_plugins = [];
if ( is_plugin_active( 'wp-translitera/wp-translitera.php' ) ) {
$install_plugins[] = 'WP Translitera';
}
if ( is_plugin_active( 'cyr3lat/cyr-to-lat.php' ) ) {
$install_plugins[] = 'Cyr to Lat enhanced';
}
if ( is_plugin_active( 'cyr2lat/cyr-to-lat.php' ) ) {
$install_plugins[] = 'Cyr to Lat';
}
if ( is_plugin_active( 'cyr-and-lat/cyr-and-lat.php' ) ) {
$install_plugins[] = 'Cyr-And-Lat';
}
if ( is_plugin_active( 'rustolat/rus-to-lat.php' ) ) {
$install_plugins[] = 'RusToLat';
}
if ( is_plugin_active( 'rus-to-lat-advanced/ru-translit.php' ) ) {
$install_plugins[] = 'Rus filename and link translit';
}
return $install_plugins;
}
/**
* @return array
*/
function wbcr_cyrlitera_get_conflict_notices_error() {
$notices = [];
$plugin_title = WCTR_Plugin::app()->getPluginTitle();
$default_notice = $plugin_title . ': ' . __( 'We found that you have the plugin %s installed. The functions of this plugin already exist in %s. Please deactivate plugin %s to avoid conflicts between plugins functions.', 'cyrlitera' );
$default_notice .= ' ' . __( 'If you do not want to deactivate the plugin %s for some reason, we strongly recommend do not use the same plugins functions at the same time!', 'cyrlitera' );
$install_conflict_plugins = wbcr_cyrlitera_install_conflict_plugins();
if ( ! empty( $install_conflict_plugins ) ) {
foreach ( (array) $install_conflict_plugins as $plugin_name ) {
$notices[] = sprintf( $default_notice, $plugin_name, $plugin_title, $plugin_name, $plugin_name );
}
}
return $notices;
}
add_filter( 'wbcr_clr_seo_page_warnings', 'wbcr_cyrlitera_get_conflict_notices_error' );
/**
* Печатает ошибки совместимости с похожими плагинами
*/
function wbcr_cyrlitera_admin_conflict_notices_error( $notices, $plugin_name ) {
if ( $plugin_name != WCTR_Plugin::app()->getPluginName() ) {
return $notices;
}
$warnings = wbcr_cyrlitera_get_conflict_notices_error();
if ( empty( $warnings ) ) {
return $notices;
}
$notice_text = '';
foreach ( (array) $warnings as $warning ) {
$notice_text .= '<p>' . $warning . '</p>';
}
$notices[] = [
'id' => 'cyrlitera_plugin_compatibility',
'type' => 'error',
'dismissible' => true,
'dismiss_expires' => 0,
'text' => $notice_text
];
return $notices;
}
add_action( 'wbcr/factory/admin_notices', 'wbcr_cyrlitera_admin_conflict_notices_error', 10, 2 );
if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) ) {
function wbcr_cyrlitera_set_plugin_meta( $links, $file ) {
if ( $file == WCTR_PLUGIN_BASE ) {
$url = 'https://clearfy.pro';
if ( get_locale() == 'ru_RU' ) {
$url = 'https://ru.clearfy.pro';
}
$url .= '?utm_source=wordpress.org&utm_campaign=' . WCTR_Plugin::app()->getPluginName();
$links[] = '<a href="' . $url . '" style="color: #FF5722;font-weight: bold;" target="_blank">' . __( 'Get ultimate plugin free', 'cyrlitera' ) . '</a>';
}
return $links;
}
add_filter( 'plugin_row_meta', 'wbcr_cyrlitera_set_plugin_meta', 10, 2 );
/**
* Виджет отзывов
*
* @param string $page_url
* @param string $plugin_name
*
* @return string
*/
function wbcr_cyrlitera_rating_widget_url( $page_url, $plugin_name ) {
if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) && ( $plugin_name == WCTR_Plugin::app()->getPluginName() ) ) {
return 'https://goo.gl/ecaj2V';
}
return $page_url;
}
add_filter( 'wbcr_factory_pages_480_imppage_rating_widget_url', 'wbcr_cyrlitera_rating_widget_url', 10, 2 );
/**
* Удаляем лишние виджеты из правого сайдбара в интерфейсе плагина
*
* - Виджет с премиум рекламой
* - Виджет с рейтингом
* - Виджет с маркерами информации
*/
add_filter( 'wbcr/factory/pages/impressive/widgets', function ( $widgets, $position, $plugin ) {
if ( WCTR_Plugin::app()->getPluginName() == $plugin->getPluginName() && 'right' == $position ) {
unset( $widgets['business_suggetion'] );
unset( $widgets['rating_widget'] );
unset( $widgets['info_widget'] );
}
return $widgets;
}, 20, 3 );
} else {
/**
* Когда в CLearfy пользователь выполняет быструю настройку "ONE CLICK SEO OPTIMIZATION",
* мы включаем транслитерацию и преобразовываем слаги для уже существующих страниц, терминов
*
* @param string $mode_name - имя режима быстрой настройки
*/
add_action( 'wbcr_clearfy_configurated_quick_mode', function ( $mode_name ) {
if ( $mode_name == 'seo_optimize' ) {
$use_transliterations = WCTR_Plugin::app()->getPopulateOption( 'use_transliteration' );
$transliterate_existing_slugs = WCTR_Plugin::app()->getPopulateOption( 'transliterate_existing_slugs' );
if ( ! $use_transliterations || $transliterate_existing_slugs ) {
return;
}
WCTR_Helper::convertExistingSlugs();
WCTR_Plugin::app()->updatePopulateOption( 'transliterate_existing_slugs', 1 );
}
} );
function wbcr_cyrlitera_group_options( $options ) {
$install_conflict_plugins = wbcr_cyrlitera_install_conflict_plugins();
$is_cyrilic = in_array( get_locale(), [ 'ru_RU', 'bel', 'kk', 'uk', 'bg', 'bg_BG', 'ka_GE' ] );
if ( ! empty( $install_conflict_plugins ) || ! $is_cyrilic ) {
$tags = [];
} else {
$tags = [ 'recommended', 'seo_optimize' ];
}
$options[] = [
'name' => 'use_transliteration',
'title' => __( 'Use transliteration', 'cyrlitera' ),
'tags' => $tags
];
$options[] = [
'name' => 'use_force_transliteration',
'title' => __( 'Force transliteration', 'cyrlitera' ),
'tags' => []
];
$options[] = [
'name' => 'dont_use_transliteration_on_frontend',
'title' => __( 'Don\'t use transliteration in frontend', 'cyrlitera' ),
'tags' => []
];
$options[] = [
'name' => 'use_transliteration_filename',
'title' => __( 'Convert file names', 'cyrlitera' ),
'tags' => $tags
];
$options[] = [
'name' => 'filename_to_lowercase',
'title' => __( 'Convert file names into lowercase', 'cyrlitera' ),
'tags' => $tags
];
$options[] = [
'name' => 'redirect_from_old_urls',
'title' => __( 'Redirection old URLs to new ones', 'cyrlitera' ),
'tags' => []
];
$options[] = [
'name' => 'custom_symbols_pack',
'title' => __( 'Character Sets', 'cyrlitera' ),
'tags' => []
];
return $options;
}
add_filter( "wbcr_clearfy_group_options", 'wbcr_cyrlitera_group_options' );
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,285 @@
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Страница общих настроек для этого плагина.
*
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
* дя плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
*
* Поддерживает режим работы с мультисаймами. Вы можете увидеть эту страницу в панели настройки сети.
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2018 Webraftic Ltd
* @version 1.0
*/
class WCTR_CyrliteraPage extends WBCR\Factory_Templates_134\Pages\PageBase {
/**
* {@inheritDoc}
*
* @var string
*/
public $id = "transliteration";
/**
* {@inheritDoc}
*
* @var string
*/
public $page_parent_page = "seo";
/**
* {@inheritDoc}
*
* @var string
*/
public $page_menu_dashicon = 'dashicons-testimonial';
/**
* {@inheritDoc}
*
* @var bool
*/
public $available_for_multisite = true;
/**
* {@inheritDoc}
*
* @since 1.1.0
* @var bool
*/
public $show_right_sidebar_in_options = true;
/**
* WCTR_CyrliteraPage constructor.
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
*
* @param \Wbcr_Factory480_Plugin $plugin
*/
public function __construct( Wbcr_Factory480_Plugin $plugin ) {
$this->menu_title = __( 'Cyrlitera', 'cyrlitera' );
if ( ! defined( 'LOADING_CYRLITERA_AS_ADDON' ) ) {
$this->internal = false;
$this->menu_target = 'options-general.php';
$this->add_link_to_plugin_actions = true;
$this->page_parent_page = null;
$this->show_search_options_form = false;
}
parent::__construct( $plugin );
$this->plugin = $plugin;
}
public function getPageTitle() {
return defined( 'LOADING_CYRLITERA_AS_ADDON' ) ? __( 'Transliteration', 'cyrlitera' ) : __( 'General', 'cyrlitera' );
}
/**
* Этот метод преобразовываем слаги для уже существующих страниц, терминов. Если это преобразование уже было выполнено,
* то мы больше незапускаем массовую конвертацию
*/
public function convertExistingSlugs() {
$use_transliterations = $this->plugin->getPopulateOption( 'use_transliteration' );
$transliterate_existing_slugs = $this->plugin->getPopulateOption( 'transliterate_existing_slugs' );
if ( ! $use_transliterations || $transliterate_existing_slugs ) {
return;
}
WCTR_Helper::convertExistingSlugs();
$this->plugin->updatePopulateOption( 'transliterate_existing_slugs', 1 );
}
/**
* Метод выполняется после сохранения формы настроек. Когда пользователь включает транслитерацию,
* метод запускает массовую конвертацию слагов для уже существующих страниц,
* терминов. Если это преобразование уже было выполнено, то мы больше незапускаем массовую конвертацию
*/
protected function afterFormSave() {
$this->convertExistingSlugs();
}
/**
* Permalinks options.
*
* @since 1.0.0
* @return mixed[]
*/
public function getPageOptions() {
$options[] = [
'type' => 'html',
'html' => '<div class="wbcr-factory-page-group-header">' . '<strong>' . __( 'Transliteration of Cyrillic alphabet.', 'cyrlitera' ) . '</strong>' . '<p>' . __( 'Converts Cyrillic permalinks of post, pages, taxonomies and media files to the Latin alphabet. Supports Russian, Ukrainian, Georgian, Bulgarian languages. Example: http://site.dev/последние-новости -> http://site.dev/poslednie-novosti', 'cyrlitera' ) . '</p>' . '</div>'
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'use_transliteration',
'title' => __( 'Use transliteration', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
'hint' => __( 'If you enable this option, all URLs of new pages, posts, tags, and categories will automatically be converted to Latin.', 'cyrlitera' ),
'default' => false
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'use_transliteration_filename',
'title' => __( 'Convert file names', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
'hint' => __( 'This option works only for new media library files. All Cyrillic names of the downloaded files will be converted to names with Latin characters.', 'cyrlitera' ),
'default' => false
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'use_force_transliteration',
'title' => __( 'Force transliteration', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
'hint' => sprintf( __( 'If any of your plugins affects transliteration of links and file names, you can use this option to change the plugin of %s to overwrite the changes of the other plugins.', 'cyrlitera' ), WCTR_Plugin::app()->getPluginTitle() ),
'default' => false
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'filename_to_lowercase',
'title' => __( 'Convert file names into lowercase', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'green' ],
'hint' => __( 'This function works only for new upload files. Example: File_Name.jpg -> file_name.jpg', 'cyrlitera' ),
'default' => false
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'redirect_from_old_urls',
'title' => __( 'Redirection old URLs to new ones', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
'hint' => __( 'If at the time of the plugin installation you had pages with unconverted links, use this option to redirect users from old to new URLs with the Latin alphabet.', 'cyrlitera' ),
'default' => false
];
$options[] = [
'type' => 'checkbox',
'way' => 'buttons',
'name' => 'dont_use_transliteration_on_frontend',
'title' => __( 'Don\'t use transliteration in frontend', 'cyrlitera' ),
'layout' => [ 'hint-type' => 'icon', 'hint-icon-color' => 'grey' ],
'hint' => __( 'Enable when have a problem in frontend.', 'cyrlitera' ),
'default' => false
];
$options[] = [
'type' => 'textarea',
'way' => 'buttons',
'name' => 'custom_symbols_pack',
'title' => __( 'Character Sets', 'cyrlitera' ),
'hint' => __( 'You can supplement current base of transliteration characters. Write pairs of values separated by commas. Example:', 'cyrlitera' ) . ' <b>Ё=Jo,ё=jo,Ж=Zh,ж=zh</b>'
];
// Произвольный html код
$options[] = [
'type' => 'html', // тип элемента формы
'html' => [ $this, 'rollbackButton' ]
];
$formOptions = [];
$formOptions[] = [
'type' => 'form-group',
'items' => $options,
//'cssClass' => 'postbox'
];
return apply_filters( 'wbcr_cyrlitera_general_form_options', $formOptions, $this );
}
/**
* @param $html_builder Wbcr_FactoryForms480_Html
*/
public function rollbackButton( $html_builder ) {
$form_name = $html_builder->getFormName();
$rollback = false;
$convert_now = false;
if ( isset( $_POST['wbcr_cyrlitera_rollback_action'] ) ) {
check_admin_referer( $form_name, 'wbcr_cyrlitera_rollback_nonce' );
if ( WCTR_Plugin::app()->isNetworkActive() ) {
foreach ( WCTR_Plugin::app()->getActiveSites() as $site ) {
switch_to_blog( $site->blog_id );
WCTR_Helper::rollbackUrlChanges();
restore_current_blog();
}
} else {
WCTR_Helper::rollbackUrlChanges();
}
$rollback = true;
}
if ( isset( $_POST['wbcr_cyrlitera_convert_now_action'] ) ) {
check_admin_referer( $form_name, 'wbcr_cyrlitera_convert_now_nonce' );
if ( WCTR_Plugin::app()->isNetworkActive() ) {
foreach ( WCTR_Plugin::app()->getActiveSites() as $site ) {
switch_to_blog( $site->blog_id );
WCTR_Helper::convertExistingSlugs();
restore_current_blog();
}
} else {
WCTR_Helper::convertExistingSlugs();
}
$convert_now = true;
}
?>
<div class="form-group form-group-checkbox factory-control-convert_now_button">
<label for="wbcr_clearfy_convert_now_button" class="col-sm-4 control-label">
<span class="factory-hint-icon factory-hint-icon-grey" data-toggle="factory-tooltip" data-placement="right" title="" data-original-title="<?php _e( 'If at the time of the plugin installation you already had posts, pages, tags and categories, click on this button and the plugin will automatically convert URLs into Latin. Attention! Previously uploaded files will not be converted.', 'cyrlitera' ) ?>">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC" alt="">
</span>
</label>
<div class="control-group col-sm-8">
<div class="factory-checkbox factory-from-control-checkbox factory-buttons-way btn-group">
<form method="post">
<?php wp_nonce_field( $form_name, 'wbcr_cyrlitera_convert_now_nonce' ); ?>
<input type="submit" name="wbcr_cyrlitera_convert_now_action" value="<?php _e( 'Convert already created posts and categories', 'cyrlitera' ) ?>" class="button button-default"/>
<?php if ( $convert_now ): ?>
<div style="color:green;margin-top:5px;"><?php _e( 'Url of old posts, pages,terms,tags successfully converted into Latin!', 'cyrlitera' ) ?></div>
<?php endif; ?>
</form>
</div>
</div>
</div>
<div class="form-group form-group-checkbox factory-control-rollback_button">
<label for="wbcr_clearfy_rollback_button" class="col-sm-4 control-label">
<span class="factory-hint-icon factory-hint-icon-grey" data-toggle="factory-tooltip" data-placement="right" title="" data-original-title="<?php _e( 'Allows you to restore converted URLs by using the "Convert already created posts and categories" button. This can be useful in case of incorrect URLs or incorrect transliteration of some characters. You can roll back changes and advance the character sets above to correct the plugin\'s work. ', 'cyrlitera' ) ?>">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAQAAABKmM6bAAAAUUlEQVQIHU3BsQ1AQABA0X/komIrnQHYwyhqQ1hBo9KZRKL9CBfeAwy2ri42JA4mPQ9rJ6OVt0BisFM3Po7qbEliru7m/FkY+TN64ZVxEzh4ndrMN7+Z+jXCAAAAAElFTkSuQmCC" alt="">
</span>
</label>
<div class="control-group col-sm-8">
<div class="factory-checkbox factory-from-control-checkbox factory-buttons-way btn-group">
<form method="post">
<?php wp_nonce_field( $form_name, 'wbcr_cyrlitera_rollback_nonce' ); ?>
<input type="submit" name="wbcr_cyrlitera_rollback_action" value="<?php _e( 'Rollback changes', 'cyrlitera' ) ?>" class="button button-default"/>
<?php if ( $rollback ): ?>
<div style="color:green;margin-top:5px;"><?php _e( 'The rollback of new changes was successful!', 'cyrlitera' ) ?></div>
<?php endif; ?>
</form>
</div>
</div>
</div>
<?php
}
}

View File

@@ -0,0 +1,23 @@
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Рекламная страница.
*
* Используется для рекламы плагина Clearfy. Пользователь может изучить все возможности плагина Clearfy
* и перейти на лендинг плагина, чтобы скачать и попробовать его.
*
* Может быть использована только, если этот плагин используется как отдельный плагин, а не как аддон
* для плагина Clearfy. Если плагин загружен, как аддон для Clearfy, эта страница не будет подключена.
*
* НЕ поддерживает режим работы с мультисаймами!
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2018 Webraftic Ltd
*/
class WCTR_MoreFeaturesPage extends \WBCR\Factory_Templates_134\Pages\MoreFeatures {
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,53 @@
<?php
/**
* Этот файл инициализирует этот плагин, как аддон для плагина Clearfy.
*
* Файл будет подключен только в плагине Clearfy, используя особый вариант загрузки. Это более простое решение
* пришло на смену встроенной системы подключения аддонов в фреймворке.
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2018 Webraftic Ltd
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! defined( 'WCTR_PLUGIN_ACTIVE' ) ) {
define( 'WCTR_PLUGIN_VERSION', '1.2.0' );
define( 'WCTR_TEXT_DOMAIN', 'cyrlitera' );
define( 'WCTR_PLUGIN_ACTIVE', true );
// Этот плагин загружен, как аддон для плагина Clearfy
define( 'LOADING_CYRLITERA_AS_ADDON', true );
if ( ! defined( 'WCTR_PLUGIN_DIR' ) ) {
define( 'WCTR_PLUGIN_DIR', dirname( __FILE__ ) );
}
if ( ! defined( 'WCTR_PLUGIN_BASE' ) ) {
define( 'WCTR_PLUGIN_BASE', plugin_basename( __FILE__ ) );
}
if ( ! defined( 'WCTR_PLUGIN_URL' ) ) {
define( 'WCTR_PLUGIN_URL', plugins_url( '', __FILE__ ) );
}
try {
// Global scripts
require_once( WCTR_PLUGIN_DIR . '/includes/class-helpers.php' );
require_once( WCTR_PLUGIN_DIR . '/includes/3rd-party/class-clearfy-plugin.php' );
new WCTR_Plugin();
} catch( Exception $e ) {
$wctr_plugin_error_func = function () use ( $e ) {
$error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Cyrlitera', $e->getMessage(), $e->getCode() );
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
};
add_action( 'admin_notices', $wctr_plugin_error_func );
add_action( 'network_admin_notices', $wctr_plugin_error_func );
}
}

View File

@@ -0,0 +1,138 @@
<?php
/**
* Plugin Name: Webcraftic Cyrlitera transliteration of links and file names
* Plugin URI: https://webcraftic.com
* Description: The plugin converts Cyrillic, Georgian links, filenames into Latin. It is necessary for correct work of WordPress plugins and improve links readability.
* Author: Webcraftic <wordpress.webraftic@gmail.com>
* Version: 1.2.0
* Text Domain: cyrlitera
* Domain Path: /languages/
* Author URI: https://webcraftic.com
* Framework Version: FACTORY_480_VERSION
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Developers who contributions in the development plugin:
*
* Alexander Kovalev
* ---------------------------------------------------------------------------------
* Full plugin development.
*
* Email: alex.kovalevv@gmail.com
* Personal card: https://alexkovalevv.github.io
* Personal repo: https://github.com/alexkovalevv
* ---------------------------------------------------------------------------------
*/
/**
* -----------------------------------------------------------------------------
* CHECK REQUIREMENTS
* Check compatibility with php and wp version of the user's site. As well as checking
* compatibility with other plugins from Webcraftic.
* -----------------------------------------------------------------------------
*/
require_once( dirname( __FILE__ ) . '/libs/factory/core/includes/class-factory-requirements.php' );
// @formatter:off
$wctr_plugin_info = [
'prefix' => 'wbcr_cyrlitera_',
'plugin_name' => 'wbcr_cyrlitera',
'plugin_title' => 'Webcraftic Cyrlitera',
// PLUGIN SUPPORT
'support_details' => [
'url' => 'https://webcraftic.com',
'pages_map' => [
'support' => 'support', // {site}/support
'docs' => 'docs' // {site}/docs
]
],
// PLUGIN SUBSCRIBE FORM
'subscribe_widget' => true,
'subscribe_settings' => [ 'group_id' => '105408892' ],
// PLUGIN ADVERTS
'render_adverts' => true,
'adverts_settings' => [
'dashboard_widget' => true, // show dashboard widget (default: false)
'right_sidebar' => true, // show adverts sidebar (default: false)
'notice' => true, // show notice message (default: false)
],
// FRAMEWORK MODULES
'load_factory_modules' => [
[ 'libs/factory/bootstrap', 'factory_bootstrap_482', 'admin' ],
[ 'libs/factory/forms', 'factory_forms_480', 'admin' ],
[ 'libs/factory/pages', 'factory_pages_480', 'admin' ],
[ 'libs/factory/templates', 'factory_templates_134', 'all' ],
[ 'libs/factory/adverts', 'factory_adverts_159', 'admin' ]
]
];
$wctr_compatibility = new Wbcr_Factory480_Requirements( __FILE__, array_merge( $wctr_plugin_info, [
'plugin_already_activate' => defined( 'WCTR_PLUGIN_ACTIVE' ),
'required_php_version' => '5.4',
'required_wp_version' => '4.2.0',
'required_clearfy_check_component' => false
] ) );
/**
* If the plugin is compatible, then it will continue its work, otherwise it will be stopped,
* and the user will throw a warning.
*/
if ( ! $wctr_compatibility->check() ) {
return;
}
/**
* -----------------------------------------------------------------------------
* CONSTANTS
* Install frequently used constants and constants for debugging, which will be
* removed after compiling the plugin.
* -----------------------------------------------------------------------------
*/
// This plugin is activated
define( 'WCTR_PLUGIN_ACTIVE', true );
define( 'WCTR_PLUGIN_VERSION', $wctr_compatibility->get_plugin_version() );
define( 'WCTR_PLUGIN_DIR', dirname( __FILE__ ) );
define( 'WCTR_PLUGIN_BASE', plugin_basename( __FILE__ ) );
define( 'WCTR_PLUGIN_URL', plugins_url( '', __FILE__ ) );
/**
* -----------------------------------------------------------------------------
* PLUGIN INIT
* -----------------------------------------------------------------------------
*/
require_once( WCTR_PLUGIN_DIR . '/libs/factory/core/boot.php' );
require_once( WCTR_PLUGIN_DIR . '/includes/class-helpers.php' );
require_once( WCTR_PLUGIN_DIR . '/includes/class-plugin.php' );
try {
new WCTR_Plugin( __FILE__, array_merge( $wctr_plugin_info, [
'plugin_version' => WCTR_PLUGIN_VERSION,
'plugin_text_domain' => $wctr_compatibility->get_text_domain(),
] ) );
} catch ( Exception $e ) {
// Plugin wasn't initialized due to an error
define( 'WCTR_PLUGIN_THROW_ERROR', true );
$wctr_plugin_error_func = function () use ( $e ) {
$error = sprintf( "The %s plugin has stopped. <b>Error:</b> %s Code: %s", 'Webcraftic Cyrlitera', $e->getMessage(), $e->getCode() );
echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
};
add_action( 'admin_notices', $wctr_plugin_error_func );
add_action( 'network_admin_notices', $wctr_plugin_error_func );
}
// @formatter:on

View File

@@ -0,0 +1,93 @@
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Cyrlitera
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2018 Webraftic Ltd
* @version 1.0
*/
class WCTR_Plugin {
/**
* @see self::app()
* @var WCL_Plugin
*/
private static $app;
/**
* Конструктор
*
* Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
* Подробнее о свойстве $app см. self::app()
*
* @param string $plugin_path
* @param array $data
*
* @throws Exception
*/
public function __construct() {
if ( ! class_exists( 'WCL_Plugin' ) ) {
throw new Exception( 'Plugin Clearfy is not installed!' );
}
self::$app = WCL_Plugin::app();
$this->global_scripts();
if ( is_admin() ) {
$this->admin_scripts();
}
// Wordpress 6.7 fix
add_action( 'init', function () {
if ( is_admin() ) {
$this->register_pages();
}
} );
}
/**
* Статический метод для быстрого доступа к интерфейсу плагина.
*
* Позволяет разработчику глобально получить доступ к экземпляру класса плагина в любом месте
* плагина, но при этом разработчик не может вносить изменения в основной класс плагина.
*
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
* классам.
*
* @return WCL_Plugin
*/
public static function app() {
return self::$app;
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @since 1.0.0
* @throws \Exception
*/
private function register_pages() {
self::app()->registerPage( 'WCTR_CyrliteraPage', WCTR_PLUGIN_DIR . '/admin/pages/class-page-cyrlitera.php' );
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @throws \Exception
*/
private function admin_scripts() {
require_once( WCTR_PLUGIN_DIR . '/admin/boot.php' );
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
*/
private function global_scripts() {
require_once( WCTR_PLUGIN_DIR . '/includes/classes/class-configurate-cyrlitera.php' );
new WCTR_ConfigurateCyrlitera( self::$app );
}
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,636 @@
<?php
/**
* Helpers functions
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2017 Webraftic Ltd
* @version 1.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class WCTR_Helper {
public static function transliterate( $title, $ignore_special_symbols = false ) {
$origin_title = $title;
$iso9_table = self::getSymbolsPack();
$title = urldecode( $title );
$title = strtr( $title, $iso9_table );
if ( function_exists( 'iconv' ) ) {
$title = iconv( 'UTF-8', 'UTF-8//TRANSLIT//IGNORE', $title );
}
if ( ! $ignore_special_symbols ) {
$title = preg_replace( "/[^A-Za-z0-9'_\-\.]/", '-', $title );
$title = preg_replace( '/\-+/', '-', $title );
$title = preg_replace( '/^-+/', '', $title );
$title = preg_replace( '/-+$/', '', $title );
}
return apply_filters( 'wbcr_cyrlitera_transliterate', $title, $origin_title, $iso9_table );
}
/**
* @param string $title обработанный заголовок
*
* @return mixed|string
*/
public static function sanitizeTitle( $title ) {
global $wpdb;
$origin_title = $title;
$is_term = false;
$backtrace = debug_backtrace();
foreach ( $backtrace as $backtrace_entry ) {
if ( $backtrace_entry['function'] == 'wp_insert_term' ) {
$is_term = true;
break;
}
}
foreach ( $backtrace as $backtrace_entry ) {
if ( isset( $backtrace_entry['function'] ) && isset( $backtrace_entry['class'] ) ) {
# WOOCOMMERCE FIXES
# We need to cancel the transliteration of attributes for variable products,
# as this brings harm to users.
#------------------------------------
/*if ( class_exists( 'WooCommerce' ) ) {
$is_woo_variations = in_array( $backtrace_entry['function'], array(
'set_attributes',
'output',
'load_variations',
'prepare_set_attributes',
'save_attributes',
'add_variation',
'save_variations',
'read_variation_attributes'
) ) && in_array( $backtrace_entry['class'], array(
'WC_AJAX',
'WC_Product',
'WC_Meta_Box_Product_Data',
'WC_Product_Variable_Data_Store_CPT'
) );
if ( $is_woo_variations ) {
return $origin_title;
}
}*/ #------------------------------------
# FRONTEND FIXES
#------------------------------------
if ( ! is_admin() ) {
$is_query = in_array( $backtrace_entry['function'], [
'query_posts',
'get_terms'
] ) && in_array( $backtrace_entry['class'], [ 'WP', 'WP_Term_Query' ] );
if ( $is_query ) {
return $origin_title;
}
}
#------------------------------------
}
}
$term = $is_term ? $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM {$wpdb->terms} WHERE name = '%s'", $title ) ) : '';
if ( empty( $term ) ) {
$title = self::transliterate( $title );
} else {
$title = $term;
}
return apply_filters( 'wbcr_cyrlitera_sanitize_title', $title, $origin_title );
}
/**
* @return array
*/
public static function getSymbolsPack() {
$loc = get_locale();
$ret = [
// russian
'А' => 'A',
'а' => 'a',
'Б' => 'B',
'б' => 'b',
'В' => 'V',
'в' => 'v',
'Г' => 'G',
'г' => 'g',
'Д' => 'D',
'д' => 'd',
'Е' => 'E',
'е' => 'e',
'Ё' => 'Jo',
'ё' => 'jo',
'Ж' => 'Zh',
'ж' => 'zh',
'З' => 'Z',
'з' => 'z',
'И' => 'I',
'и' => 'i',
'Й' => 'J',
'й' => 'j',
'К' => 'K',
'к' => 'k',
'Л' => 'L',
'л' => 'l',
'М' => 'M',
'м' => 'm',
'Н' => 'N',
'н' => 'n',
'О' => 'O',
'о' => 'o',
'П' => 'P',
'п' => 'p',
'Р' => 'R',
'р' => 'r',
'С' => 'S',
'с' => 's',
'Т' => 'T',
'т' => 't',
'У' => 'U',
'у' => 'u',
'Ф' => 'F',
'ф' => 'f',
'Х' => 'H',
'х' => 'h',
'Ц' => 'C',
'ц' => 'c',
'Ч' => 'Ch',
'ч' => 'ch',
'Ш' => 'Sh',
'ш' => 'sh',
'Щ' => 'Shh',
'щ' => 'shh',
'Ъ' => '',
'ъ' => '',
'Ы' => 'Y',
'ы' => 'y',
'Ь' => '',
'ь' => '',
'Э' => 'Je',
'э' => 'je',
'Ю' => 'Ju',
'ю' => 'ju',
'Я' => 'Ja',
'я' => 'ja',
// global
'Ґ' => 'G',
'ґ' => 'g',
'Є' => 'Ie',
'є' => 'ie',
'І' => 'I',
'і' => 'i',
'Ї' => 'I',
'ї' => 'i',
'Ї' => 'i',
'ї' => 'i',
'Ё' => 'Jo',
'ё' => 'jo',
'й' => 'i',
'Й' => 'I'
];
// ukrainian
if ( $loc == 'uk' ) {
$ret = array_merge( $ret, [
'Г' => 'H',
'г' => 'h',
'И' => 'Y',
'и' => 'y',
'Х' => 'Kh',
'х' => 'kh',
'Ц' => 'Ts',
'ц' => 'ts',
'Щ' => 'Shch',
'щ' => 'shch',
'Ю' => 'Iu',
'ю' => 'iu',
'Я' => 'Ia',
'я' => 'ia',
] );
//bulgarian
} else if ( $loc == 'bg' || $loc == 'bg_BG' ) {
$ret = array_merge( $ret, [
'Щ' => 'Sht',
'щ' => 'sht',
'Ъ' => 'a',
'ъ' => 'a'
] );
}
if ( $loc == 'ka_GE' ) {
$ret = [
'ა' => 'a',
'ბ' => 'b',
'გ' => 'g',
'დ' => 'd',
'ე' => 'e',
'ვ' => 'v',
'ზ' => 'z',
'თ' => 'th',
'ი' => 'i',
'კ' => 'k',
'ლ' => 'l',
'მ' => 'm',
'ნ' => 'n',
'ო' => 'o',
'პ' => 'p',
'ჟ' => 'zh',
'რ' => 'r',
'ს' => 's',
'ტ' => 't',
'უ' => 'u',
'ფ' => 'ph',
'ქ' => 'q',
'ღ' => 'gh',
'' => 'qh',
'შ' => 'sh',
'ჩ' => 'ch',
'ც' => 'ts',
'ძ' => 'dz',
'წ' => 'ts',
'ჭ' => 'tch',
'ხ' => 'kh',
'ჯ' => 'j',
'ჰ' => 'h'
];
}
// Armenian
if ( $loc == 'hy' ) {
$ret = array_merge( $ret, [
'Ա' => 'A',
'ա' => 'a',
'Բ' => 'B',
'բ' => 'b',
'Գ' => 'G',
'գ' => 'g',
'Դ' => 'D',
'դ' => 'd',
' Ե' => ' Ye',
'Ե' => 'E',
' ե' => ' ye',
'ե' => 'e',
'Զ' => 'Z',
'զ' => 'z',
'Է' => 'E',
'է' => 'e',
'Ը' => 'Y',
'ը' => 'y',
'Թ' => 'T',
'թ' => 't',
'Ժ' => 'Zh',
'ժ' => 'zh',
'Ի' => 'I',
'ի' => 'i',
'Լ' => 'L',
'լ' => 'l',
'Խ' => 'KH',
'խ' => 'kh',
'Ծ' => 'TS',
'ծ' => 'ts',
'Կ' => 'K',
'կ' => 'K',
'Հ' => 'H',
'հ' => 'h',
'Ձ' => 'DZ',
'ձ' => 'dz',
'Ղ' => 'GH',
'ղ' => 'gh',
'Ճ' => 'J',
'Ճ' => 'j',
'Մ' => 'M',
'մ' => 'm',
'Յ' => 'Y',
'յ' => 'y',
'Ն' => 'N',
'ն' => 'n',
'Շ' => 'SH',
'շ' => 'sh',
' Ո' => 'VO',
'Ո' => 'VO',
' ո' => ' vo',
'ո' => 'o',
'Չ' => 'Ch',
'չ' => 'ch',
'Պ' => 'P',
'պ' => 'p',
'Ջ' => 'J',
'ջ' => 'j',
'Ռ' => 'R',
'ռ' => 'r',
'Ս' => 'S',
'ս' => 's',
'Վ' => 'V',
'վ' => 'v',
'Տ' => 'T',
'տ' => 't',
'Ր' => 'R',
'ր' => 'r',
'Ց' => 'C',
'ց' => 'c',
'Ու' => 'U',
'ու' => 'u',
'Փ' => 'P',
'փ' => 'p',
'Ք' => 'Q',
'ք' => 'q',
'Եվ' => 'EV',
'և' => 'ev',
'Օ' => 'O',
'օ' => 'o',
'Ֆ' => 'F',
'ֆ' => 'f'
] );
}
// Serbian
if ( $loc == 'sr_RS' ) {
$ret = array_merge( $ret, [
"Ђ" => "DJ",
"Ж" => "Z",
"З" => "Z",
"Љ" => "LJ",
"Њ" => "NJ",
"Ш" => "S",
"Ћ" => "C",
"Ц" => "C",
"Ч" => "C",
"Џ" => "DZ",
"ђ" => "dj",
"ж" => "z",
"з" => "z",
"и" => "i",
"љ" => "lj",
"њ" => "nj",
"ш" => "s",
"ћ" => "c",
"ч" => "c",
"џ" => "dz",
"Ња" => "Nja",
"Ње" => "Nje",
"Њи" => "Nji",
"Њо" => "Njo",
"Њу" => "Nju",
"Ља" => "Lja",
"Ље" => "Lje",
"Љи" => "Lji",
"Љо" => "Ljo",
"Љу" => "Lju",
"Џа" => "Dza",
"Џе" => "Dze",
"Џи" => "Dzi",
"Џо" => "Dzo",
"Џу" => "Dzu"
] );
}
$custom_rules = WCTR_Plugin::app()->getPopulateOption( 'custom_symbols_pack' );
if ( ! empty( $custom_rules ) ) {
$split_rules = explode( ',', $custom_rules );
$split_rules = array_map( 'trim', $split_rules );
foreach ( $split_rules as $rule ) {
$split_symbols = explode( '=', $rule );
if ( sizeof( $split_symbols ) === 2 ) {
if ( empty( $split_symbols[0] ) ) {
continue;
}
$ret[ $split_symbols[0] ] = $split_symbols[1];
}
}
}
return apply_filters( 'wbcr_cyrlitera_default_symbols_pack', $ret );
}
/**
* Делает откат изменений после выполнения метода convertExistingSlugs,
* этот метод не восстановливает вновь конвертированные слаги.
*/
public static function rollbackUrlChanges() {
global $wpdb;
$posts = $wpdb->get_results( "SELECT p.ID, p.post_name, m.meta_value as old_post_name FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} m
ON p.ID = m.post_id
WHERE p.post_status
IN ('publish', 'future', 'private') AND m.meta_key='wbcr_wp_old_slug' AND m.meta_value IS NOT NULL" );
foreach ( (array) $posts as $post ) {
if ( $post->post_name != $post->old_post_name ) {
$wpdb->update( $wpdb->posts, [ 'post_name' => $post->old_post_name ], [ 'ID' => $post->ID ], [ '%s' ], [ '%d' ] );
delete_post_meta( $post->ID, 'wbcr_wp_old_slug' );
}
}
$terms = $wpdb->get_results( "SELECT t.term_id, t.slug, o.option_value as old_term_slug FROM {$wpdb->terms} t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_wp_term_',t.term_id, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $terms as $term ) {
if ( $term->slug != $term->old_term_slug ) {
$wpdb->update( $wpdb->terms, [ 'slug' => $term->old_term_slug ], [ 'term_id' => $term->term_id ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_wp_term_' . $term->term_id . '_old_slug' );
}
}
// BuddyPress group slug
// ! slug maybe urlencoded
if ( is_plugin_active( 'buddypress/bp-loader.php' ) ) {
$groups = $wpdb->get_results( "SELECT t.id, t.name, t.slug, o.option_value as old_term_slug FROM {$wpdb->prefix}bp_groups t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_bp_groups_',t.id, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $groups as $group ) {
if ( $group->slug != $group->old_term_slug ) {
$wpdb->update( "{$wpdb->prefix}bp_groups", [ 'slug' => $group->old_term_slug ], [ 'id' => $group->id ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_bp_groups_' . $group->id . '_old_slug' );
}
}
}
// Asgaros Forum
if ( is_plugin_active( 'asgaros-forum/asgaros-forum.php' ) ) {
$forums = $wpdb->get_results( "SELECT t.id, t.name, t.slug, o.option_value as old_term_slug FROM {$wpdb->prefix}forum_forums t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_asgaros_forums_',t.id, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $forums as $forum ) {
if ( $forum->slug != $forum->old_term_slug ) {
$wpdb->update( "{$wpdb->prefix}forum_forums", [ 'slug' => $forum->old_term_slug ], [ 'id' => $forum->id ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_asgaros_forums_' . $forum->id . '_old_slug' );
}
}
//topic
$topics = $wpdb->get_results( "SELECT t.id, t.name, t.slug, o.option_value as old_term_slug FROM {$wpdb->prefix}forum_topics t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_asgaros_topics_',t.id, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $topics as $topic ) {
if ( $topic->slug != $topic->old_term_slug ) {
$wpdb->update( "{$wpdb->prefix}forum_topics", [ 'slug' => $topic->old_term_slug ], [ 'id' => $topic->id ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_asgaros_topics_' . $topic->id . '_old_slug' );
}
}
}
// WP Foro
if ( is_plugin_active( 'wpforo/wpforo.php' ) ) {
// forums
$forums = $wpdb->get_results( "SELECT t.forumid, t.title, t.slug, o.option_value as old_term_slug FROM {$wpdb->prefix}wpforo_forums t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_wpforo_forums_',t.forumid, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $forums as $forum ) {
if ( $forum->slug != $forum->old_term_slug ) {
$wpdb->update( "{$wpdb->prefix}wpforo_forums", [ 'slug' => $forum->old_term_slug ], [ 'forumid' => $forum->forumid ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_wpforo_forums_' . $topic->id . '_old_slug' );
}
}
// topics
$topics = $wpdb->get_results( "SELECT t.topicid, t.title, t.slug, o.option_value as old_term_slug FROM {$wpdb->prefix}wpforo_topics t
LEFT JOIN {$wpdb->options} o
ON o.option_name=concat('wbcr_wpforo_topics_',t.topicid, '_old_slug')
WHERE o.option_value IS NOT NULL" );
foreach ( (array) $topics as $topic ) {
if ( $topic->slug != $topic->old_term_slug ) {
$wpdb->update( "{$wpdb->prefix}wpforo_topics", [ 'slug' => $topic->old_term_slug ], [ 'topicid' => $topic->topicid ], [ '%s' ], [ '%d' ] );
delete_option( 'wbcr_wpforo_topics_' . $topic->id . '_old_slug' );
}
}
// clear cache
WPF()->phrase->clear_cache();
WPF()->member->clear_db_cache();
wpforo_clean_cache();
}
}
/**
* Массово конвертирует слаги для страниц, записей, терминов и т.д.
* Делает бекап старого слага, чтобы можно было восстановить его. А также использовать в других плагинах.
*/
public static function convertExistingSlugs() {
global $wpdb;
$posts = $wpdb->get_results( "SELECT ID, post_name FROM {$wpdb->posts}
WHERE post_name REGEXP('[^_A-Za-z0-9\-]+') AND post_status IN ('publish', 'future', 'private')" );
foreach ( (array) $posts as $post ) {
$sanitized_name = WCTR_Helper::sanitizeTitle( urldecode( $post->post_name ) );
if ( $post->post_name != $sanitized_name ) {
add_post_meta( $post->ID, 'wbcr_wp_old_slug', $post->post_name );
$wpdb->update( $wpdb->posts, [ 'post_name' => $sanitized_name ], [ 'ID' => $post->ID ], [ '%s' ], [ '%d' ] );
}
}
$terms = $wpdb->get_results( "SELECT term_id, slug FROM {$wpdb->terms} WHERE slug REGEXP('[^_A-Za-z0-9\-]+')" );
foreach ( (array) $terms as $term ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $term->slug ) );
if ( $term->slug != $sanitized_slug ) {
update_option( 'wbcr_wp_term_' . $term->term_id . '_old_slug', $term->slug, false );
$wpdb->update( $wpdb->terms, [ 'slug' => $sanitized_slug ], [ 'term_id' => $term->term_id ], [ '%s' ], [ '%d' ] );
}
}
// BuddyPress group slug
// ! slug maybe urlencoded
if ( is_plugin_active( 'buddypress/bp-loader.php' ) ) {
$groups = $wpdb->get_results( "SELECT `id`, `name`, `slug` FROM {$wpdb->prefix}bp_groups WHERE slug REGEXP('%|[^_A-Za-z0-9\-]+')" );
if ( is_array( $groups ) ) {
foreach ( $groups as $group ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $group->slug ) );
if ( $group->slug != $sanitized_slug ) {
update_option( 'wbcr_bp_groups_' . $group->id . '_old_slug', $group->slug, false );
$wpdb->update( $wpdb->prefix . 'bp_groups', [ 'slug' => $sanitized_slug ], [ 'id' => $group->id ], [ '%s' ], [ '%d' ] );
}
}
}
}
// Asgaros Forum
if ( is_plugin_active( 'asgaros-forum/asgaros-forum.php' ) ) {
// forum slug
$groups = $wpdb->get_results( "SELECT `id`, `name`, `slug` FROM {$wpdb->prefix}forum_forums WHERE slug REGEXP('%|[^_A-Za-z0-9\-]+')" );
if ( is_array( $groups ) ) {
foreach ( $groups as $group ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $group->slug ) );
if ( $group->slug != $sanitized_slug ) {
update_option( 'wbcr_asgaros_forums_' . $group->id . '_old_slug', $group->slug, false );
$wpdb->update( $wpdb->prefix . 'forum_forums', [ 'slug' => $sanitized_slug ], [ 'id' => $group->id ], [ '%s' ], [ '%d' ] );
}
}
}
// topic slug
$groups = $wpdb->get_results( "SELECT `id`, `name`, `slug` FROM {$wpdb->prefix}forum_topics WHERE slug REGEXP('%|[^_A-Za-z0-9\-]+')" );
if ( is_array( $groups ) ) {
foreach ( $groups as $group ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $group->slug ) );
if ( $group->slug != $sanitized_slug ) {
update_option( 'wbcr_asgaros_topics_' . $group->id . '_old_slug', $group->slug, false );
$wpdb->update( $wpdb->prefix . 'forum_topics', [ 'slug' => $sanitized_slug ], [ 'id' => $group->id ], [ '%s' ], [ '%d' ] );
}
}
}
}
// WP Foro
if ( is_plugin_active( 'wpforo/wpforo.php' ) ) {
// forum slug
$forums = $wpdb->get_results( "SELECT `forumid`, `title`, `slug` FROM {$wpdb->prefix}wpforo_forums WHERE slug REGEXP('%|[^_A-Za-z0-9\-]+')" );
if ( is_array( $forums ) ) {
foreach ( $forums as $forum ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $forum->slug ) );
if ( $forum->slug != $sanitized_slug ) {
update_option( 'wbcr_wpforo_forums_' . $forum->forumid . '_old_slug', $forum->slug, false );
$wpdb->update( $wpdb->prefix . 'wpforo_forums', [ 'slug' => $sanitized_slug ], [ 'forumid' => $forum->forumid ], [ '%s' ], [ '%d' ] );
}
}
}
// topic slug
$topics = $wpdb->get_results( "SELECT `topicid`, `title`, `slug` FROM {$wpdb->prefix}wpforo_topics WHERE slug REGEXP('%|[^_A-Za-z0-9\-]+')" );
if ( is_array( $topics ) ) {
foreach ( $topics as $topic ) {
$sanitized_slug = WCTR_Helper::sanitizeTitle( urldecode( $topic->slug ) );
if ( $topic->slug != $sanitized_slug ) {
update_option( 'wbcr_wpforo_topics_' . $topic->topicid . '_old_slug', $topic->slug, false );
$wpdb->update( $wpdb->prefix . 'wpforo_topics', [ 'slug' => $sanitized_slug ], [ 'topicid' => $topic->topicid ], [ '%s' ], [ '%d' ] );
}
}
}
// clear cache
WPF()->phrase->clear_cache();
WPF()->member->clear_db_cache();
wpforo_clean_cache();
}
}
}

View File

@@ -0,0 +1,107 @@
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Transliteration core class
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 19.02.2018, Webcraftic
*/
class WCTR_Plugin extends Wbcr_Factory480_Plugin {
/**
* @see self::app()
* @var Wbcr_Factory480_Plugin
*/
private static $app;
/**
* @since 1.1.0
* @var array
*/
private $plugin_data;
/**
* Конструктор
*
* Применяет конструктор родительского класса и записывает экземпляр текущего класса в свойство $app.
* Подробнее о свойстве $app см. self::app()
*
* @param string $plugin_path
* @param array $data
*
* @throws Exception
*/
public function __construct( $plugin_path, $data ) {
parent::__construct( $plugin_path, $data );
self::$app = $this;
$this->plugin_data = $data;
$this->global_scripts();
if ( is_admin() ) {
$this->admin_scripts();
}
// Wordpress 6.7 fix
add_action( 'init', function () {
if ( is_admin() ) {
$this->register_pages();
}
} );
}
/**
* Статический метод для быстрого доступа к интерфейсу плагина.
*
* Позволяет разработчику глобально получить доступ к экземпляру класса плагина в любом месте
* плагина, но при этом разработчик не может вносить изменения в основной класс плагина.
*
* Используется для получения настроек плагина, информации о плагине, для доступа к вспомогательным
* классам.
*
* @return \Wbcr_Factory480_Plugin|\WCTR_Plugin
*/
public static function app() {
return self::$app;
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @since 1.0.0
*/
protected function init_activation() {
include_once( WCTR_PLUGIN_DIR . '/admin/activation.php' );
self::app()->registerActivation( 'WCTR_Activation' );
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @since 1.0.0
* @throws \Exception
*/
private function register_pages() {
self::app()->registerPage( 'WCTR_CyrliteraPage', WCTR_PLUGIN_DIR . '/admin/pages/class-page-cyrlitera.php' );
self::app()->registerPage( 'WCTR_MoreFeaturesPage', WCTR_PLUGIN_DIR . '/admin/pages/class-page-more-features.php' );
}
/**
* @author Alexander Kovalev <alex.kovalevv@gmail.com>
* @throws \Exception
*/
private function admin_scripts() {
require_once( WCTR_PLUGIN_DIR . '/admin/boot.php' );
$this->init_activation();
}
private function global_scripts() {
require_once( WCTR_PLUGIN_DIR . '/includes/classes/class-configurate-cyrlitera.php' );
new WCTR_ConfigurateCyrlitera( self::$app );
}
}

View File

@@ -0,0 +1,266 @@
<?php
/**
* This class configures cyrlitera
*
* @author Alexander Kovalev <alex.kovalevv@gmail.com>, Github: https://github.com/alexkovalevv
* @copyright (c) 2017 Webraftic Ltd
* @version 1.0
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class WCTR_ConfigurateCyrlitera extends WBCR\Factory_Templates_134\Configurate {
public function registerActionsAndFilters() {
if ( is_admin() || ! $this->getPopulateOption( 'dont_use_transliteration_on_frontend' ) ) {
if ( $this->getPopulateOption( 'use_transliteration' ) ) {
if ( ! $this->getPopulateOption( 'use_force_transliteration' ) ) {
add_filter( 'sanitize_title', 'WCTR_Helper::sanitizeTitle', 0 );
} else {
add_filter( 'sanitize_title', [ $this, 'forceSanitizeTitle' ], 99, 2 );
}
add_action( 'admin_init', [ $this, 'acfScripts' ] );
}
}
if ( $this->getPopulateOption( 'use_transliteration_filename' ) ) {
if ( ! $this->getPopulateOption( 'use_force_transliteration' ) ) {
add_filter( 'sanitize_file_name', [ $this, 'sanitizeFileName' ], 9 );
} else {
add_filter( 'sanitize_file_name', [ $this, 'forceSanitizeFileName' ], 99, 2 );
}
}
if ( ! is_admin() ) {
add_action( 'wp', [ $this, 'redirectFromOldUrls' ], $this->wpForoIsActivated() ? 11 : 10 );
}
// Asgaros Forum set 404
if ( is_plugin_active( 'asgaros-forum/asgaros-forum.php' ) ) {
add_action( 'asgarosforum_prepare_forum', [ $this, 'asgarosSet404' ] );
add_action( 'asgarosforum_prepare_topic', [ $this, 'asgarosSet404' ] );
}
}
public function asgarosSet404() {
$trace = debug_backtrace();
foreach ( $trace as $item ) {
if ( $item['function'] == 'prepare' and $item['class'] == 'AsgarosForum' and is_object( $item['object'] ) ) {
if ( ! $item['object']->parents_set ) {
if ( ! defined( 'ASGAROS_404' ) ) {
define( 'ASGAROS_404', true );
}
}
}
}
}
public function acfScripts() {
global $pagenow;
$on_acf_edit_page = 'post.php' === $pagenow && isset( $_GET['post'] ) && 'acf-field-group' === get_post_type( $_GET['post'] );
if ( is_plugin_active( 'advanced-custom-fields/acf.php' ) and $on_acf_edit_page ) {
$data = "window.cyr_and_lat_dict = " . json_encode( WCTR_Helper::getSymbolsPack() ) . ";";
wp_enqueue_script( 'cyrlitera-for-acf', WCTR_PLUGIN_URL . '/admin/assets/js/cyrlitera-for-acf.js', [
'jquery',
'acf-field-group'
] );
wp_add_inline_script( 'cyrlitera-for-acf', $data, 'before' );
}
}
/**
* @param string $title обработанный заголовок
* @param string $raw_title не обработанный заголовок
*
* @return string
*/
public function forceSanitizeTitle( $title, $raw_title ) {
$title = WCTR_Helper::sanitizeTitle( $raw_title );
$force_transliterate = sanitize_title_with_dashes( $title );
return apply_filters( 'wbcr_cyrlitera_sanitize_title', $force_transliterate, $raw_title );
}
/**
* @param string $title
*
* @return string
*/
public function sanitizeFileName( $filename ) {
$origin_title = $filename;
$filename = WCTR_Helper::transliterate( $filename );
if ( $this->getPopulateOption( 'filename_to_lowercase' ) ) {
$filename = strtolower( $filename );
}
return apply_filters( 'wbcr_cyrlitera_sanitize_filename', $filename, $origin_title );
}
/**
* @param string $title
*
* @return string
*/
public function forceSanitizeFileName( $filename, $filename_raw ) {
$filename = $filename_raw;
$special_chars = [
"?",
"[",
"]",
"/",
"\\",
"=",
"<",
">",
":",
";",
",",
"'",
"\"",
"&",
"$",
"#",
"*",
"(",
")",
"|",
"~",
"`",
"!",
"{",
"}",
"%",
"+",
chr( 0 )
];
/**
* Filters the list of characters to remove from a filename.
*
* @since 2.8.0
*
* @param array $special_chars Characters to remove.
* @param string $filename_raw Filename as it was passed into sanitize_file_name().
*/
$special_chars = apply_filters( 'sanitize_file_name_chars', $special_chars, $filename_raw );
$filename = preg_replace( "#\x{00a0}#siu", ' ', $filename );
$filename = str_replace( $special_chars, '', $filename );
$filename = str_replace( [ '%20', '+' ], '-', $filename );
$filename = preg_replace( '/[\r\n\t -]+/', '-', $filename );
$filename = trim( $filename, '.-_' );
if ( false === strpos( $filename, '.' ) ) {
$mime_types = wp_get_mime_types();
$filetype = wp_check_filetype( 'test.' . $filename, $mime_types );
if ( $filetype['ext'] === $filename ) {
$filename = 'unnamed-file.' . $filetype['ext'];
}
}
// Split the filename into a base and extension[s]
$parts = explode( '.', $filename );
// Return if only one extension
if ( count( $parts ) <= 2 ) {
$filename = WCTR_Helper::transliterate( $filename );
if ( $this->getPopulateOption( 'filename_to_lowercase' ) ) {
$filename = strtolower( $filename );
}
return apply_filters( 'wbcr_cyrlitera_sanitize_filename', $filename, $filename_raw );
}
// Process multiple extensions
$filename = array_shift( $parts );
$extension = array_pop( $parts );
$mimes = get_allowed_mime_types();
/*
* Loop over any intermediate extensions. Postfix them with a trailing underscore
* if they are a 2 - 5 character long alpha string not in the extension whitelist.
*/
foreach ( (array) $parts as $part ) {
$filename .= '.' . $part;
if ( preg_match( "/^[a-zA-Z]{2,5}\d?$/", $part ) ) {
$allowed = false;
foreach ( $mimes as $ext_preg => $mime_match ) {
$ext_preg = '!^(' . $ext_preg . ')$!i';
if ( preg_match( $ext_preg, $part ) ) {
$allowed = true;
break;
}
}
if ( ! $allowed ) {
$filename .= '_';
}
}
}
$filename .= '.' . $extension;
$filename = WCTR_Helper::transliterate( $filename );
if ( $this->getPopulateOption( 'filename_to_lowercase' ) ) {
$filename = strtolower( $filename );
}
return apply_filters( 'wbcr_cyrlitera_sanitize_filename', $filename, $filename_raw );
}
/**
* @return bool
*/
protected function wpForoIsActivated() {
$activeplugins = get_option( 'active_plugins' );
if ( gettype( $activeplugins ) != 'array' ) {
$activeplugins = [];
}
return in_array( "wpforo/wpforo.php", $activeplugins );
}
/**
* Перенаправление со старых url, которые были уже преобразованы
*/
public function redirectFromOldUrls() {
if ( ! WBCR\Factory_Templates_134\Helpers::isPermalink() ) {
return;
}
$is404 = is_404();
if ( $this->wpForoIsActivated() ) {
global $wpforo;
if ( $is404 || $wpforo->current_object['is_404'] || ( $wpforo->current_object['template'] == 'post' and ! count( $wpforo->current_object['topic'] ) ) ) {
$is404 = true;
}
}
if ( is_plugin_active( 'asgaros-forum/asgaros-forum.php' ) and defined( 'ASGAROS_404' ) and ASGAROS_404 === true ) {
$is404 = true;
}
if ( $is404 ) {
if ( $this->getPopulateOption( 'redirect_from_old_urls' ) ) {
$current_url = urldecode( $_SERVER['REQUEST_URI'] );
$new_url = WCTR_Helper::transliterate( $current_url, true );
$new_url = strtolower( $new_url );
if ( $current_url != $new_url ) {
wp_redirect( $new_url, 301 );
}
}
}
}
}

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,2 @@
<?php
// Silence is golden.

View File

@@ -0,0 +1,206 @@
# Translation of Plugins - Clearfy in Spanish (Spain)
# This file is distributed under the same license as the Plugins - Clearfy WordPress optimization plugin and disable ultimate tweaker - Development (trunk) package.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-04-28 06:25+0300\n"
"PO-Revision-Date: 2019-04-28 06:25+0300\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 2.1.1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 2.1.1\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: libs\n"
"X-Poedit-SearchPathExcluded-1: components\n"
"X-Poedit-SearchPathExcluded-2: cache\n"
#: admin/boot.php:77
#, php-format
msgid ""
"We found that you have the plugin %s installed. The functions of this plugin "
"already exist in %s. Please deactivate plugin %s to avoid conflicts between "
"plugins functions."
msgstr ""
"Tienes el plugin%s instalado. Las funciones de este plugin ya existen en %s. "
"Desactive el complemento%s para evitar conflictos entre las funciones ambos."
#: admin/boot.php:78
#, php-format
msgid ""
"If you do not want to deactivate the plugin %s for some reason, we strongly "
"recommend do not use the same plugins functions at the same time!"
msgstr ""
"¡Si no desea desactivar el plugin %s por algún motivo, recomendamos nos usar "
"funciones similares de otros Plugins al mismo tiempo!."
#: admin/boot.php:138 admin/pages/cyrlitera.php:103
msgid "Use transliteration"
msgstr "Usar transliteracion"
#: admin/boot.php:144 admin/pages/cyrlitera.php:121
msgid "Force transliteration"
msgstr "Forzar transliterización"
#: admin/boot.php:150 admin/pages/cyrlitera.php:150
msgid "Don't use transliteration in frontend"
msgstr "No uses la transliteración en la interfaz."
#: admin/boot.php:156 admin/pages/cyrlitera.php:112
msgid "Convert file names"
msgstr "Convertir nombres de archivos"
#: admin/boot.php:162 admin/pages/cyrlitera.php:130
msgid "Convert file names into lowercase"
msgstr "Convertir nombres de archivos a minúsculas"
#: admin/boot.php:168 admin/pages/cyrlitera.php:140
msgid "Redirection old URLs to new ones"
msgstr "Redireccionar las URL antiguas a nuevas."
#: admin/boot.php:174 admin/pages/cyrlitera.php:160
msgid "Character Sets"
msgstr "Conjuntos de caracteres"
#: admin/boot.php:195
msgid "Get ultimate plugin free"
msgstr "Obtener el ultimate plugin gratis"
#: admin/pages/cyrlitera.php:39 admin/pages/cyrlitera.php:55
msgid "Transliteration"
msgstr "Transliterización"
#: admin/pages/cyrlitera.php:55
msgid "General"
msgstr "General"
#: admin/pages/cyrlitera.php:96
msgid "Transliteration of Cyrillic alphabet."
msgstr "Transliteración del alfabeto Cirílico."
#: admin/pages/cyrlitera.php:96
msgid ""
"Converts Cyrillic permalinks of post, pages, taxonomies and media files to "
"the Latin alphabet. Supports Russian, Ukrainian, Georgian, Bulgarian "
"languages. Example: http://site.dev/последние-новости -> http://site.dev/"
"poslednie-novosti"
msgstr ""
"Convierte los enlaces cirílicos de publicaciones, páginas, taxonomías y "
"archivos multimedia al alfabeto latino. Soporta idiomas ruso, ucraniano, "
"georgiano, búlgaro. Ejemplo: http://site.dev/последние-новости -> http://"
"site.dev/poslednie-novosti"
#: admin/pages/cyrlitera.php:105
msgid ""
"If you enable this option, all URLs of new pages, posts, tags, and "
"categories will automatically be converted to Latin."
msgstr ""
"Si habilita esta opción, todas las URL de las nuevas páginas, publicaciones, "
"etiquetas y categorías se convertirán automáticamente al latín."
#: admin/pages/cyrlitera.php:114
msgid ""
"This option works only for new media library files. All Cyrillic names of "
"the downloaded files will be converted to names with Latin characters."
msgstr ""
"Esta opción funciona solo para nuevos archivos de la biblioteca de medios. "
"Todos los nombres cirílicos de los archivos descargados se convertirán en "
"nombres con caracteres latinos."
#: admin/pages/cyrlitera.php:123
#, php-format
msgid ""
"If any of your plugins affects transliteration of links and file names, you "
"can use this option to change the plugin of %s to overwrite the changes of "
"the other plugins."
msgstr ""
"Si alguno de sus plugins afecta la transliteración de enlaces y nombres de "
"archivos, use esta opción para cambiar el plugin de %s y sobrescribir los "
"cambios de los otros complementos."
#: admin/pages/cyrlitera.php:132
msgid ""
"This function works only for new upload files. Example: File_Name.jpg -> "
"file_name.jpg"
msgstr ""
"Esta función solo trabaja para nuevas cargas de archivos. Ejemplo: "
"Nombre_Archivo.jpg -> nombre_archivo.jpg"
#: admin/pages/cyrlitera.php:142
msgid ""
"If at the time of the plugin installation you had pages with unconverted "
"links, use this option to redirect users from old to new URLs with the Latin "
"alphabet."
msgstr ""
"Si en el momento de la instalación del plugin tenía páginas con enlaces no "
"convertidos, use esta opción para redirigir a los usuarios de URL antiguas a "
"nuevas con alfabeto Latino."
#: admin/pages/cyrlitera.php:152
msgid "Enable when have a problem in frontend."
msgstr "Habilite cuando exista problemas en la interfaz."
#: admin/pages/cyrlitera.php:161
msgid ""
"You can supplement current base of transliteration characters. Write pairs "
"of values separated by commas. Example:"
msgstr ""
"Puede complementar la base actual de caracteres de transliteración. Escribe "
"pares de valores separados por comas. Ejemplo:"
#: admin/pages/cyrlitera.php:227
msgid ""
"If at the time of the plugin installation you already had posts, pages, tags "
"and categories, click on this button and the plugin will automatically "
"convert URLs into Latin. Attention! Previously uploaded files will not be "
"converted."
msgstr ""
"Si en el momento de la instalación del plugin ya tenía publicaciones, "
"páginas, etiquetas y categorías, haga clic en este botón y el plugin "
"convertirá automáticamente las URL en Latín. ¡Atención! Los archivos "
"cargados previamente no se convertirán."
#: admin/pages/cyrlitera.php:236
msgid "Convert already created posts and categories"
msgstr "Convertir publicaciones y categorías ya creados"
#: admin/pages/cyrlitera.php:238
msgid "Url of old posts, pages,terms,tags successfully converted into Latin!"
msgstr ""
"URL de entradas antiguas, páginas, términos y etiquetas convertidas con "
"éxito al Latín!"
#: admin/pages/cyrlitera.php:248
msgid ""
"Allows you to restore converted URLs by using the \"Convert already created "
"posts and categories\" button. This can be useful in case of incorrect URLs "
"or incorrect transliteration of some characters. You can roll back changes "
"and advance the character sets above to correct the plugin's work. "
msgstr ""
"Le permite restaurar las URL convertidas usando el botón \"Convertir las "
"publicaciones y categorías ya creadas\". Esto es útil en caso de URL "
"incorrectas o transliteración incorrecta de algunos caractéres. Puede "
"revertir los cambios y avanzar los conjuntos de caractéres anteriores para "
"corregir el trabajo del plugin."
#: admin/pages/cyrlitera.php:257
msgid "Rollback changes"
msgstr "Revertir cambios"
#: admin/pages/cyrlitera.php:259
msgid "The rollback of new changes was successful!"
msgstr "¡La reversión de nuevos cambios fue exitosa!"
#: cyrlitera.php:85
msgid "Webcraftic Cyrlitera"
msgstr "Webcraftic Cyrlitera"

View File

@@ -0,0 +1,208 @@
msgid ""
msgstr ""
"Project-Id-Version: Clearfy\n"
"POT-Creation-Date: 2018-09-06 18:29+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: nl_BE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 2.1.1\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: libs\n"
"X-Poedit-SearchPathExcluded-1: components\n"
"X-Poedit-SearchPathExcluded-2: cache\n"
#: admin/boot.php:56
#, php-format
msgid ""
"We found that you have the plugin %s installed. The functions of this plugin "
"already exist in %s. Please deactivate plugin %s to avoid conflicts between "
"plugins functions."
msgstr ""
#: admin/boot.php:57
#, php-format
msgid ""
"If you do not want to deactivate the plugin %s for some reason, we strongly "
"recommend do not use the same plugins functions at the same time!"
msgstr ""
"Als u de plugin %s om eender welke reden niet wilt deactiveren, raden wij u "
"ten zeerste aan om niet dezelfde plugin functies tegelijkertijd te gebruiken!"
#: admin/boot.php:117 admin/options.php:30
msgid "Use transliteration"
msgstr "Gebruik transliteratie"
#: admin/boot.php:123 admin/options.php:48
msgid "Force transliteration"
msgstr "Forceer transliteratie"
#: admin/boot.php:129 admin/options.php:78
msgid "Don't use transliteration in frontend"
msgstr ""
#: admin/boot.php:135 admin/options.php:39
msgid "Convert file names"
msgstr "Bestandsnamen converteren"
#: admin/boot.php:141 admin/options.php:58
msgid "Convert file names into lowercase"
msgstr "Bestandsnamen converteren naar kleine letters"
#: admin/boot.php:147 admin/options.php:68
msgid "Redirection old URLs to new ones"
msgstr "Redirect oude URL's naar nieuwe"
#: admin/boot.php:153 admin/options.php:88
msgid "Character Sets"
msgstr "Tekensets"
#: admin/boot.php:174
msgid "Get ultimate plugin free"
msgstr "Krijg ultieme plugin gratis"
#: admin/options.php:23
msgid "Transliteration of Cyrillic alphabet."
msgstr "Transliteratie van Cyrillische alfabet."
#: admin/options.php:23
msgid ""
"Converts Cyrillic permalinks of post, pages, taxonomies and media files to the "
"Latin alphabet. Supports Russian, Ukrainian, Georgian, Bulgarian languages. "
"Example: http://site.dev/последние-новости -> http://site.dev/poslednie-novosti"
msgstr ""
"Converteert Cyrillische permalinks van post, pagina's, taxonomieën en "
"mediabestanden naar het Latijnse alfabet. Ondersteunt Russische, Oekraïense, "
"Georgische, Bulgaarse talen. Voorbeeld: http://site.dev/последнивости -> "
"http://site.dev/poslednie-novosti"
#: admin/options.php:32
msgid ""
"If you enable this option, all URLs of new pages, posts, tags, and categories "
"will automatically be converted to Latin."
msgstr ""
"Als u deze optie inschakelt, worden alle URL's van nieuwe pagina's, berichten, "
"tags en categorieën automatisch geconverteerd naar het Latijn."
#: admin/options.php:41
msgid ""
"This option works only for new media library files. All Cyrillic names of the "
"downloaded files will be converted to names with Latin characters."
msgstr ""
"Deze optie werkt alleen voor nieuwe mediabibliotheek bestanden. Alle "
"Cyrillische namen van de gedownloade bestanden worden geconverteerd naar namen "
"met Latijnse tekens."
#: admin/options.php:50
#, php-format
msgid ""
"If any of your plugins affects transliteration of links and file names, you "
"can use this option to change the plugin of %s to overwrite the changes of the "
"other plugins."
msgstr ""
"Als één van uw plugins de transliteratie van koppelingen en bestandsnamen "
"beïnvloedt, kunt u deze optie gebruiken om de plugin van %s te wijzigen om de "
"wijzigingen van de andere plugins te overschrijven."
#: admin/options.php:60
msgid ""
"This function works only for new upload files. Example: File_Name.jpg -> "
"file_name.jpg"
msgstr ""
"Deze functie werkt alleen voor nieuwe uploadbestanden. Voorbeeld: File_Name."
"jpg -> file_name.jpg"
#: admin/options.php:70
msgid ""
"If at the time of the plugin installation you had pages with unconverted "
"links, use this option to redirect users from old to new URLs with the Latin "
"alphabet."
msgstr ""
"Als u op het moment van de installatie van de plugin pagina's had met niet-"
"geconverteerde links, gebruikt u deze optie om gebruikers om te leiden van "
"oude naar nieuwe URL's met het Latijnse alfabet."
#: admin/options.php:80
msgid "Enable when have a problem in frontend."
msgstr ""
#: admin/options.php:89
msgid ""
"You can supplement current base of transliteration characters. Write pairs of "
"values separated by commas. Example:"
msgstr ""
"U kunt de huidige basis van transliteratie tekens aanvullen. Schrijf paren van "
"waardes gescheiden door komma's. Voorbeeld:"
#: admin/options.php:178
msgid ""
"If at the time of the plugin installation you already had posts, pages, tags "
"and categories, click on this button and the plugin will automatically convert "
"URLs into Latin. Attention! Previously uploaded files will not be converted."
msgstr ""
"Als u tijdens de installatie van de plugin al berichten, pagina's, tags en "
"categorieën had, klik dan op deze knop en de plugin converteert URL's "
"automatisch naar Latijn. Aandacht! Eerder geüploade bestanden worden niet "
"geconverteerd."
#: admin/options.php:187
msgid "Convert already created posts and categories"
msgstr "Converteer eerder gemaakte berichten en categorieën"
#: admin/options.php:189
msgid "Url of old posts, pages,terms,tags successfully converted into Latin!"
msgstr "Url van oude berichten, pagina's, voorwaarden, tags omgezet in Latijn!"
#: admin/options.php:199
msgid ""
"Allows you to restore converted URLs by using the \"Convert already created "
"posts and categories\" button. This can be useful in case of incorrect URLs or "
"incorrect transliteration of some characters. You can roll back changes and "
"advance the character sets above to correct the plugin's work. "
msgstr ""
"Hiermee kunt u geconverteerde URL's herstellen met behulp van de knop "
"\"Bestaande berichten en categorieën converteren\". Dit kan handig zijn in het "
"geval van onjuiste URL's of onjuiste transliteratie van sommige tekens. U kunt "
"wijzigingen terugdraaien en de tekensets hierboven verbeteren om het werk van "
"de plugin te corrigeren."
#: admin/options.php:208
msgid "Rollback changes"
msgstr "Wijzigingen terugdraaien"
#: admin/options.php:210
msgid "The rollback of new changes was successful!"
msgstr "Het terugdraaien van nieuwe wijzigingen was succesvol!"
#: admin/pages/cyrlitera.php:33 admin/pages/cyrlitera.php:49
msgid "Transliteration"
msgstr "Transliteratie"
#: admin/pages/cyrlitera.php:50
msgid "General"
msgstr "Algemeen"
#: cyrlitera.php:23
msgid ""
"We found that you have the \"Clearfy - disable unused features\" plugin "
"installed, this plugin already has disable comments functions, so you can "
"deactivate plugin \"Webcraftic Cyrlitera\"!"
msgstr ""
"We hebben vastgesteld dat de plugin \"Clearfy - niet-gebruikte functies "
"uitschakelen\" is geïnstalleerd. Deze plugin heeft reeds de functie "
"opmerkingen uitschakelen, zodat u de plugin \"Webcraftic Cyrlitera\" kunt "
"deactiveren!"
#: cyrlitera.php:81
msgid "Webcraftic Cyrlitera"
msgstr "Webcraftic Cyrlitera"

View File

@@ -0,0 +1,210 @@
msgid ""
msgstr ""
"Project-Id-Version: clearfy\n"
"POT-Creation-Date: 2018-09-06 18:29+0300\n"
"PO-Revision-Date: 2018-09-06 18:29+0300\n"
"Last-Translator: alex.kovalevv@gmail.com <alex.kovalevv@gmail.com>\n"
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: libs\n"
"X-Poedit-SearchPathExcluded-1: components\n"
"X-Poedit-SearchPathExcluded-2: cache\n"
#: admin/boot.php:56
#, php-format
msgid ""
"We found that you have the plugin %s installed. The functions of this plugin "
"already exist in %s. Please deactivate plugin %s to avoid conflicts between "
"plugins functions."
msgstr ""
"Descobrimos que você tem o plugin %s instalado. As funções deste plugin já "
"existem em %s . Por favor, desative o plugin %s para evitar conflitos entre "
"as funções dos plugins."
#: admin/boot.php:57
#, php-format
msgid ""
"If you do not want to deactivate the plugin %s for some reason, we strongly "
"recommend do not use the same plugins functions at the same time!"
msgstr ""
"Se você não quiser desativar o plugin %s por algum motivo, recomendamos que "
"não use as mesmas funções de plugins ao mesmo tempo!"
#: admin/boot.php:117 admin/options.php:30
msgid "Use transliteration"
msgstr "Use transliteração"
#: admin/boot.php:123 admin/options.php:48
msgid "Force transliteration"
msgstr "Forçar transliteração"
#: admin/boot.php:129 admin/options.php:78
msgid "Don't use transliteration in frontend"
msgstr ""
#: admin/boot.php:135 admin/options.php:39
msgid "Convert file names"
msgstr "Converter nomes de arquivos"
#: admin/boot.php:141 admin/options.php:58
msgid "Convert file names into lowercase"
msgstr "Converter nomes de arquivos em minúsculas"
#: admin/boot.php:147 admin/options.php:68
msgid "Redirection old URLs to new ones"
msgstr "Redirecionar URLs antigas para novas"
#: admin/boot.php:153 admin/options.php:88
msgid "Character Sets"
msgstr "Conjuntos de caracteres"
#: admin/boot.php:174
msgid "Get ultimate plugin free"
msgstr "Obtenha o melhor plugin grátis"
#: admin/options.php:23
msgid "Transliteration of Cyrillic alphabet."
msgstr "Transliteração do alfabeto cirílico."
#: admin/options.php:23
msgid ""
"Converts Cyrillic permalinks of post, pages, taxonomies and media files to "
"the Latin alphabet. Supports Russian, Ukrainian, Georgian, Bulgarian "
"languages. Example: http://site.dev/последние-новости -> http://site.dev/"
"poslednie-novosti"
msgstr ""
"Converte permalinks cirílicos de post, páginas, taxonomias e arquivos de "
"mídia para o alfabeto latino. Suporta as línguas russa, ucraniana, georgiana "
"e búlgara. Exemplo: http://site.dev/последние-новости -> http://site.dev/"
"poslednie-novosti"
#: admin/options.php:32
msgid ""
"If you enable this option, all URLs of new pages, posts, tags, and "
"categories will automatically be converted to Latin."
msgstr ""
"Se você ativar essa opção, todos os URLs de novas páginas, postagens, tags e "
"categorias serão convertidos automaticamente para o idioma latino."
#: admin/options.php:41
msgid ""
"This option works only for new media library files. All Cyrillic names of "
"the downloaded files will be converted to names with Latin characters."
msgstr ""
"Esta opção funciona apenas para novos arquivos de biblioteca de mídia. Todos "
"os nomes cirílicos dos arquivos baixados serão convertidos em nomes com "
"caracteres latinos."
#: admin/options.php:50
#, php-format
msgid ""
"If any of your plugins affects transliteration of links and file names, you "
"can use this option to change the plugin of %s to overwrite the changes of "
"the other plugins."
msgstr ""
"Se algum de seus plugins afetar a transliteração de links e nomes de "
"arquivos, você poderá usar essa opção para alterar o plug-in de %s para "
"sobrescrever as alterações dos outros plug-ins."
#: admin/options.php:60
msgid ""
"This function works only for new upload files. Example: File_Name.jpg -> "
"file_name.jpg"
msgstr ""
"Esta função funciona apenas para novos arquivos de upload. Exemplo: "
"File_Name.jpg -> file_name.jpg"
#: admin/options.php:70
msgid ""
"If at the time of the plugin installation you had pages with unconverted "
"links, use this option to redirect users from old to new URLs with the Latin "
"alphabet."
msgstr ""
"Se, no momento da instalação do plug-in, você tivesse páginas com links não "
"convertidos, use essa opção para redirecionar os usuários de URLs antigos "
"para novos com o alfabeto latino."
#: admin/options.php:80
msgid "Enable when have a problem in frontend."
msgstr ""
#: admin/options.php:89
msgid ""
"You can supplement current base of transliteration characters. Write pairs "
"of values separated by commas. Example:"
msgstr ""
"Você pode complementar a base atual de caracteres de transliteração. Escreva "
"pares de valores separados por vírgulas. Exemplo:"
#: admin/options.php:178
msgid ""
"If at the time of the plugin installation you already had posts, pages, tags "
"and categories, click on this button and the plugin will automatically "
"convert URLs into Latin. Attention! Previously uploaded files will not be "
"converted."
msgstr ""
"Se, no momento da instalação do plugin, você já tiver postagens, páginas, "
"tags e categorias, clique neste botão e o plug-in converterá os URLs "
"automaticamente em latim. Atenção! Os arquivos enviados anteriormente não "
"serão convertidos."
#: admin/options.php:187
msgid "Convert already created posts and categories"
msgstr "Converter posts e categorias já criados"
#: admin/options.php:189
msgid "Url of old posts, pages,terms,tags successfully converted into Latin!"
msgstr "URL de postagens, páginas, termos e tags antigos convertidos em latim."
#: admin/options.php:199
msgid ""
"Allows you to restore converted URLs by using the \"Convert already created "
"posts and categories\" button. This can be useful in case of incorrect URLs "
"or incorrect transliteration of some characters. You can roll back changes "
"and advance the character sets above to correct the plugin's work. "
msgstr ""
"Permite restaurar URLs convertidos usando o botão \"Converter postagens e "
"categorias já criadas \". Isso pode ser útil em caso de URLs incorretos ou "
"transliteração incorreta de alguns caracteres. Você pode reverter alterações "
"e avançar os conjuntos de caracteres acima para corrigir o trabalho do "
"plugin. "
#: admin/options.php:208
msgid "Rollback changes"
msgstr "Alterações de reversão"
#: admin/options.php:210
msgid "The rollback of new changes was successful!"
msgstr "A reversão de novas mudanças foi bem sucedida!"
#: admin/pages/cyrlitera.php:33 admin/pages/cyrlitera.php:49
msgid "Transliteration"
msgstr "Transliteração"
#: admin/pages/cyrlitera.php:50
msgid "General"
msgstr "Geral"
#: cyrlitera.php:23
msgid ""
"We found that you have the \"Clearfy - disable unused features\" plugin "
"installed, this plugin already has disable comments functions, so you can "
"deactivate plugin \"Webcraftic Cyrlitera\"!"
msgstr ""
"Descobrimos que você tem o \"Clearfy - desativar os recursos não utilizados "
"\" plugin instalado, este plugin já tem funções de desabilitar comentários, "
"assim você pode desativar o plugin \"Webcraftic Cyrlitera \"!"
#: cyrlitera.php:81
msgid "Webcraftic Cyrlitera"
msgstr "Webcraftic Cyrlitera"

View File

@@ -0,0 +1,618 @@
msgid ""
msgstr ""
"Project-Id-Version: clearfy\n"
"POT-Creation-Date: 2018-10-16 22:49+0300\n"
"PO-Revision-Date: 2018-12-22 16:06+0300\n"
"Last-Translator: alex.kovalevv@gmail.com <alex.kovalevv@gmail.com>\n"
"Language-Team: Alex Kovalev <alex.kovalevv@gmail.com>\n"
"Language: ru_RU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.1.1\n"
"X-Poedit-Basepath: ..\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: libs\n"
#: admin/boot.php:56
#, php-format
msgid ""
"We found that you have the plugin %s installed. The functions of this plugin "
"already exist in %s. Please deactivate plugin %s to avoid conflicts between "
"plugins functions."
msgstr ""
"Мы обнаружили, что у вас установлен плагин %s, функции этого плагина уже "
"есть в %s. Пожалуйста, деактивируйте плагин %s во избежание конфликтов между "
"функциями плагинов."
#: admin/boot.php:57
#, php-format
msgid ""
"If you do not want to deactivate the plugin %s for some reason, we strongly "
"recommend do not use the same plugins functions at the same time!"
msgstr ""
"Если по какой-то причине вы не хотите деактивировать плагин %s, то мы "
"настоятельно рекомендуем не использовать похожие функции плагинов "
"одновременно!"
#: admin/boot.php:117 admin/pages/cyrlitera.php:118
msgid "Use transliteration"
msgstr "Использовать транслитерацию"
#: admin/boot.php:123 admin/pages/cyrlitera.php:136
msgid "Force transliteration"
msgstr "Принудильная траслитерация"
#: admin/boot.php:129 admin/pages/cyrlitera.php:165
msgid "Don't use transliteration in frontend"
msgstr "Не использовать транслитерацию на фронтенде"
#: admin/boot.php:135 admin/pages/cyrlitera.php:127
msgid "Convert file names"
msgstr "Конвертировать имена файлов"
#: admin/boot.php:141 admin/pages/cyrlitera.php:145
msgid "Convert file names into lowercase"
msgstr "Преобразовывать имена файлов в нижний регистр"
#: admin/boot.php:147 admin/pages/cyrlitera.php:155
msgid "Redirection old URLs to new ones"
msgstr "Перенаправление со старых URL на новые"
#: admin/boot.php:153 admin/pages/cyrlitera.php:175
msgid "Character Sets"
msgstr "Наборы символов"
#: admin/boot.php:174
msgid "Get ultimate plugin free"
msgstr "Получите полную версию плагина бесплатно"
#: admin/pages/cyrlitera.php:39 admin/pages/cyrlitera.php:57
msgid "Transliteration"
msgstr "Транслитерация"
#: admin/pages/cyrlitera.php:57
msgid "General"
msgstr "Основные"
#: admin/pages/cyrlitera.php:111
msgid "Transliteration of Cyrillic alphabet."
msgstr "Транслитерация кириллицы."
#: admin/pages/cyrlitera.php:111
msgid ""
"Converts Cyrillic permalinks of post, pages, taxonomies and media files to "
"the Latin alphabet. Supports Russian, Ukrainian, Georgian, Bulgarian "
"languages. Example: http://site.dev/последние-новости -> http://site.dev/"
"poslednie-novosti"
msgstr ""
"Конвертирует кириллические постоянные ссылки записей, страниц, таксономий и "
"медиафайлов в латиницу. Поддерживает Русский, Украинский, Грузинский, "
"Болгарский языки. Пример: http://site.dev/последние-новости -> http://site."
"dev/poslednie-novosti"
#: admin/pages/cyrlitera.php:120
msgid ""
"If you enable this option, all URLs of new pages, posts, tags, and "
"categories will automatically be converted to Latin."
msgstr ""
"Если включить эту опцию, все URL новых страниц, записей, меток, рубрик будут "
"автоматически конвертироваться в латиницу."
#: admin/pages/cyrlitera.php:129
msgid ""
"This option works only for new media library files. All Cyrillic names of "
"the downloaded files will be converted to names with Latin characters."
msgstr ""
"Эта опция работает только для новых файлов медиа библиотеки. Все "
"кириллические имена загружаемых файлов, будут преобразованы в имена с "
"латинскими символами."
#: admin/pages/cyrlitera.php:138
#, php-format
msgid ""
"If any of your plugins affects transliteration of links and file names, you "
"can use this option to change the plugin of %s to overwrite the changes of "
"the other plugins."
msgstr ""
"Если какой-то из установленных у вас плагинов влияет на траслитерацию "
"постоянных ссылок и файловых имен, включите эту опцию, чтобы %s "
"перезаписывал изменения других плагинов."
#: admin/pages/cyrlitera.php:147
msgid ""
"This function works only for new upload files. Example: File_Name.jpg -> "
"file_name.jpg"
msgstr ""
"Эта функция работает только для новых загружаемых файлов. Пример: File_Name."
"jpg -> file_name.jpg"
#: admin/pages/cyrlitera.php:157
msgid ""
"If at the time of the plugin installation you had pages with unconverted "
"links, use this option to redirect users from old to new URLs with the Latin "
"alphabet."
msgstr ""
"Если на момент установки плагина у вас были страницы с не преобразованными "
"ссылками, используйте эту опцию, чтобы пользователи, перешедшие по старым "
"ссылкам, были перенаправлены на новые URL на латинице."
#: admin/pages/cyrlitera.php:167
msgid "Enable when have a problem in frontend."
msgstr "Включите эту опцию, если у вас есть проблемы с внешней стороны сайта."
#: admin/pages/cyrlitera.php:176
msgid ""
"You can supplement current base of transliteration characters. Write pairs "
"of values separated by commas. Example:"
msgstr ""
"Вы можете дополнить текущую базу символов транслитерации, пишите пары "
"значений через запятую. Пример: "
#: admin/pages/cyrlitera.php:242
msgid ""
"If at the time of the plugin installation you already had posts, pages, tags "
"and categories, click on this button and the plugin will automatically "
"convert URLs into Latin. Attention! Previously uploaded files will not be "
"converted."
msgstr ""
"Если на момент установки плагина у вас уже были созданы записи, страницы, "
"метки и рубрики, то нажмите на эту кнопку и плагин автоматически преобразует "
"URLы в латинские. Внимание! Ранее загруженные файлы преобразованы не будут."
#: admin/pages/cyrlitera.php:251
msgid "Convert already created posts and categories"
msgstr "Преобразовать уже созданные записи и рубрики"
#: admin/pages/cyrlitera.php:253
msgid "Url of old posts, pages,terms,tags successfully converted into Latin!"
msgstr ""
"Url старых записей, страниц, тегов и рубрик были успешно конвертированы в "
"литинские!"
#: admin/pages/cyrlitera.php:263
msgid ""
"Allows you to restore converted URLs by using the \"Convert already created "
"posts and categories\" button. This can be useful in case of incorrect URLs "
"or incorrect transliteration of some characters. You can roll back changes "
"and advance the character sets above to correct the plugin's work. "
msgstr ""
"Позволяет восстановить преобразованные с помощью кнопки “Преобразовать уже "
"созданные записи и рубрики” URLы. Это может быть полезно в случае появления "
"некорректных URL адресов или неправильной транслитерации определенных "
"символов. У вас есть возможность откатить изменения и изменить наборы "
"символов выше, чтобы скорректировать работу плагина."
#: admin/pages/cyrlitera.php:272
msgid "Rollback changes"
msgstr "Откатить изменения"
#: admin/pages/cyrlitera.php:274
msgid "The rollback of new changes was successful!"
msgstr "Откат новых изменений прошел успешно!"
#: cyrlitera.php:63
msgid "Webcraftic Cyrlitera"
msgstr "Webcraftic Cyrlitera"
#~ msgid ""
#~ "We found that you have the \"Clearfy - disable unused features\" plugin "
#~ "installed, this plugin already has disable comments functions, so you can "
#~ "deactivate plugin \"Webcraftic Cyrlitera\"!"
#~ msgstr ""
#~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
#~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
#~ "комментариев, поэтому вы можете отключить плагин «Webcraftic Cyrlitera»!"
#~ msgid ""
#~ "You can supplement current base of transliteration characters. Write "
#~ "pairs of values in lower case separated by commas. Example:"
#~ msgstr ""
#~ "Вы можете дополнить текущую базу символов транслитерации, пишите пары "
#~ "значений в нижнем регистре через запятую. Пример: ა=a,ბ=b"
#~ msgid ""
#~ "If any of your plugins affects transliteration of links, you can use this "
#~ "option to change the plugin of %s to overwrite the changes of the other "
#~ "plugins."
#~ msgstr ""
#~ "Если какой-то из установленных у вас плагинов влияет на траслитерацию "
#~ "постоянный ссылок, включите эту опцию, чтобы %s перезаписывал изменения "
#~ "других плагинов."
#~ msgid ""
#~ "We found that you have the \"Clearfy - disable unused features\" plugin "
#~ "installed, this plugin already has disable comments functions, so you can "
#~ "deactivate plugin \"Cyrilic transliteration\"!"
#~ msgstr ""
#~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
#~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
#~ "комментариев, поэтому вы можете отключить плагин «Транслитерация "
#~ "кириллицы»!"
#~ msgid "Webcraftic cyrilic transliteration"
#~ msgstr "Webcraftic транслитерация кириллицы"
#~ msgid ""
#~ "If you enable this option, the permanent URLs of all previously published "
#~ "posts and pages will be converted into URLs with Latin characters. All "
#~ "new pages and posts will also have a URL in the Latin alphabet."
#~ msgstr ""
#~ "Если включить эту опцию, постоянные URL всех ранее опубликованных записей "
#~ "и страниц будут преобразованы в URL с латинскими символами. Все новые "
#~ "страницы и записи, также будут иметь URL на латинице."
#~ msgid "You don't have enough capability to edit this information."
#~ msgstr "Вы не имеете разрешения на редактирование этого!"
#~ msgid "Undefinded notice id."
#~ msgstr "Не передан notice id."
#~ msgid "Success"
#~ msgstr "Успешно"
#~ msgid "Hide admin notices"
#~ msgstr "Скрыть уведомления"
#~ msgid "Enable hidden notices in adminbar"
#~ msgstr "Включить уведомления в админбаре"
#~ msgid "Admin notifications, Update nags"
#~ msgstr "Уведомления администратора, уведомления об обновлении Wordpress"
#~ msgid ""
#~ "Do you know the situation, when some plugin offers you to update to "
#~ "premium, to collect technical data and shows many annoying notices? You "
#~ "are close these notices every now and again but they newly appears and "
#~ "interfere your work with WordPress. Even worse, some plugins authors "
#~ "delete “close” button from notices and they shows in your admin panel "
#~ "forever."
#~ msgstr ""
#~ "Вам знакома ситуация, когда какой-то плагин просит вас обновиться до "
#~ "премиум-версии, получить права на сбор данных о вашем сайте и создает "
#~ "много раздражающих уведомлений? Вы закрываете эти уведомления раз за "
#~ "разом, но они вновь появляются и мешают вашей работе с WordPress. Хуже "
#~ "того, некоторые авторы и вовсе удаляют кнопку “закрыть” из уведомлений, и "
#~ "они висят в шапке вашей панели администратора целую вечность."
#~ msgid "All notices"
#~ msgstr "Все уведомления"
#~ msgid "Hide all notices globally."
#~ msgstr "Скрыть все уведомления глобально."
#~ msgid "Only selected"
#~ msgstr "Только выбранные"
#~ msgid ""
#~ "Hide selected notices only. You will see the link \"Hide notification "
#~ "forever\" in each notice. Push it and they will not bother you anymore."
#~ msgstr ""
#~ "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
#~ "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление "
#~ "будет скрыто навсегда и перестанет вас беспокоить."
#~ msgid "Don't nide"
#~ msgstr "Не скрывать"
#~ msgid ""
#~ "Do not hide notices and do not show “Hide notification forever” link for "
#~ "admin."
#~ msgstr ""
#~ "Не скрывать уведомления и не показывать ссылку \"Скрыть уведомление "
#~ "навсегда\" в уведомлениях администратора."
#~ msgid ""
#~ "Some plugins shows notifications about premium version, data collecting "
#~ "or promote their services. Even if you push close button (that sometimes "
#~ "are impossible), notices are shows again in some time. This option allows "
#~ "you to control notices. Hide them all or each individually. Some plugins "
#~ "shows notifications about premium version, data collecting or promote "
#~ "their services. Even if you push close button (that sometimes are "
#~ "impossible), notices are shows again in some time. This option allows you "
#~ "to control notices. Hide them all or each individually."
#~ msgstr ""
#~ "Зачастую, плагины отображают уведомления о возможности перехода на "
#~ "премиум версию, просят разрешение на сбор данных, рекламируют свои "
#~ "услуги. Даже если вы нажмете кнопку закрыть (что не всегда возможно), "
#~ "уведомления всё равно отобразятся через какое-то время. С помощью этой "
#~ "настройки, вы можете контролировать эти уведомления. Скройте их все сразу "
#~ "или каждое по отдельности."
#~ msgid ""
#~ "By default, the plugin hides all notices, which you specified. If you "
#~ "enable this option, the plugin will collect all hidden notices and show "
#~ "them into the top admin toolbar. It will not disturb you but will allow "
#~ "to look notices at your convenience."
#~ msgstr ""
#~ "По умолчанию, плагин полностью скрывает отключенные вами уведомления. "
#~ "Если включить эту опцию, то плагин будет собирать все скрытые вами "
#~ "уведомления и выводить в верхней панели администратора. Это не будет вас "
#~ "раздражать, но и позволит просматривать уведомления, когда вам это удобно."
#~ msgid "Push reset hidden notices if you need to show hidden notices again."
#~ msgstr "Нажмите кнопку \\\"Сбросить скрытые уведомления\\\""
#~ msgid "Reset hidden notices (%s)"
#~ msgstr "Сбросить скрытые уведомления (%s)"
#~ msgid "Hidden notices are successfully reset, now you can see them again!"
#~ msgstr ""
#~ "Скрытые уведомления успешно восстановлены, теперь вы можете снова видеть "
#~ "их!"
#~ msgid "Notices"
#~ msgstr "Уведомления"
#~ msgid ""
#~ "We found that you have the \"Clearfy - disable unused features\" plugin "
#~ "installed, this plugin already has disable comments functions, so you can "
#~ "deactivate plugin \"Disable admin notices\"!"
#~ msgstr ""
#~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
#~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
#~ "комментариев, поэтому вы можете отключить плагин «Скрыть уведомления "
#~ "администратора»!"
#~ msgid "Webcraftic disable admin notices"
#~ msgstr "Webcraftic отключить уведомления администратора"
#~ msgid "Notifications %s"
#~ msgstr "Уведомления %s"
#~ msgid "Restore notice"
#~ msgstr "Восстановить уведомление"
#~ msgid "Hide notification forever"
#~ msgstr "Скрыть уведомление навсегда"
#~ msgid "Hidden notices"
#~ msgstr "Скрытые уведомления"
#~ msgid "Disable comments on the entire site"
#~ msgstr "Отключить комментарии на всем сайте"
#~ msgid "Select post types"
#~ msgstr "Выбрать тип записи"
#~ msgid "Replace external links in comments on the JavaScript code"
#~ msgstr "Заменить внешние ссылки в комментариях на JavaScript код"
#~ msgid "Replace external links from comment authors on the JavaScript code"
#~ msgstr "Заменить внешние ссылки от авторов комментариев на код JavaScript"
#~ msgid "Disable X-Pingback"
#~ msgstr "Убрать ссылку на X-Pingback и возможность спамить pingback-ами"
#~ msgid "Remove field \"site\" in comment form"
#~ msgstr "Удаляет поле \"Сайт\" в форме комментариев"
#~ msgid "Disable all comments"
#~ msgstr "Отключить все комментарии"
#~ msgid "Comments"
#~ msgstr "Комментарии"
#~ msgid ""
#~ "Hide selected notices only. You will see the link \"Hide notification "
#~ "forever\" in each notice. Push it and they will not bother you anymore. "
#~ "Push <a href=\"%s\">reset hidden notices (%d)</a> if you need to show "
#~ "hidden notices again."
#~ msgstr ""
#~ "Скрывать только выбранные уведомления. В каждом уведомлении вы увидите "
#~ "ссылку \"Скрыть уведомление навсегда\". Нажмите на неё и уведомление "
#~ "будет скрыто навсегда и перестанет вас беспокоить. Нажмите <a href=\"%s"
#~ "\">сбросить скрытые уведомления (%d)</a>, если вам нужно восстановить "
#~ "показ скрытых ранее уведомлений."
#~ msgid "Webcraftic hide admin notices"
#~ msgstr "Webcraftic скрыть уведомления администратора"
#~ msgid "Comments tweaks"
#~ msgstr "Инструменты комментариев"
#~ msgid "All comments have been deleted."
#~ msgstr "Все комментарии были удалены."
#~ msgid ""
#~ "An error occurred while trying to delete comments. Internal error "
#~ "occured. Please try again later."
#~ msgstr ""
#~ "При попытке удалить комментарии произошла ошибка. Пожалуйста, повторите "
#~ "попытку позже."
#~ msgid "You are not allowed to view this page."
#~ msgstr "Вам не разрешено просматривать эту страницу."
#~ msgid "You do not have the selected post types!"
#~ msgstr "Вы не выбрали еще ни одного типа записей!"
#~ msgid "No comments available for deletion."
#~ msgstr "Нет комментариев для удаления."
#~ msgid ""
#~ "Are you sure that you desire to delete all comments from the database?"
#~ msgstr "Вы уверены, что хотите удалить все комментарии из базы данных?"
#~ msgid ""
#~ "Deleting comments will remove existing comment entries in the database "
#~ "and cannot be reverted without a database backup."
#~ msgstr ""
#~ "При удалении комментариев удаляются существующие записи комментариев в "
#~ "базе данных, они не могут быть восстановлены без резервного копирования "
#~ "базы данных."
#~ msgid "You have %s comments"
#~ msgstr "У вас есть %s комментариев"
#~ msgid "Yes, I'm sure"
#~ msgstr "Да, я уверен"
#~ msgid "No, return back"
#~ msgstr "Нет, вернуться"
#~ msgid ""
#~ "Are you sure that you desire to delete all comments from the database for "
#~ "the selected post types (%s)?"
#~ msgstr ""
#~ "Вы уверены, что хотите удалить все комментарии из базы данных для "
#~ "выбранных типов записей (%s)?"
#~ msgid "Disable comments"
#~ msgstr "Отключить комментарии"
#~ msgid "Not disable"
#~ msgstr "Не отключать"
#~ msgid "Everywhere"
#~ msgstr "Повсюду"
#~ msgid ""
#~ "You can delete all comments in the database by clicking on this link (<a "
#~ "href=\"%s\">cleaning comments in database</a>)."
#~ msgstr ""
#~ "Вы можете удалить все комментарии в базе данных, нажав на эту ссылку ( <a "
#~ "href=\"%s\">очистка комментариев в базе данных</a> )."
#~ msgid "On certain post types"
#~ msgstr "Только выбранные типы записей"
#~ msgid ""
#~ "You can delete all comments for the selected post types. Select the post "
#~ "types below and save the settings. After that, click the link (<a href="
#~ "\"%s\">delete all comments for the selected post types in database</a>)."
#~ msgstr ""
#~ "Вы можете удалить все комментарии для выбранных типов записей. Выберите "
#~ "типы записей ниже и сохраните настройки. После этого нажмите ссылку ( <a "
#~ "href=\"%s\">удалите все комментарии для выбранных типов записей в базе "
#~ "данных</a> )."
#~ msgid ""
#~ "Everywhere - Warning: This option is global and will affect your entire "
#~ "site. Use it only if you want to disable comments everywhere. A complete "
#~ "description of what this option does is available here"
#~ msgstr ""
#~ "Повсюду - предупреждение: этот параметр является глобальным и повлияет на "
#~ "весь ваш сайт. Используйте его только в том случае, если вы хотите "
#~ "отключить комментарии повсюду. "
#~ msgid ""
#~ "On certain post types - Disabling comments will also disable trackbacks "
#~ "and pingbacks. All comment-related fields will also be hidden from the "
#~ "edit/quick-edit screens of the affected posts. These settings cannot be "
#~ "overridden for individual posts."
#~ msgstr ""
#~ "В некоторых типах сообщений - отключение комментариев также отключает "
#~ "трекбэки и pingback. Все поля, связанные с комментариями, также будут "
#~ "скрыты от экранов редактирования / быстрого редактирования затронутых "
#~ "сообщений. Эти настройки нельзя переопределять для отдельных сообщений."
#~ msgid "Select the post types for which comments will be disabled"
#~ msgstr "Выберите типы записей, для которых комментарии будут отключены."
#~ msgid ""
#~ "Tired of spam in the comments? Do visitors leave \"blank\" comments for "
#~ "the sake of a link to their site?"
#~ msgstr ""
#~ "Надоел спам в комментариях? Посетители оставляют «пустые» комментарии "
#~ "ради ссылки на свой сайт?"
#~ msgid "Removes the \"Site\" field from the comment form."
#~ msgstr "Убирает поле «Сайт» из формы комментирования."
#~ msgid ""
#~ "Works with the standard comment form, if the form is manually written in "
#~ "your theme-it probably will not work!"
#~ msgstr ""
#~ "Работает со стандартной формой комментирования, если в Вашей теме форма "
#~ "прописана вручную - скорей всего не сработает!"
#~ msgid "Recommended"
#~ msgstr "Рекомендовано"
#~ msgid ""
#~ "Superfluous external links from comments, which can be typed from a dozen "
#~ "and more for one article, do not bring anything good for promotion."
#~ msgstr ""
#~ "Внешние ссылки в комментариях, которых может быть десятки или больше на "
#~ "одной странице, могут ухудшить продвижение вашего сайта."
#~ msgid "Replaces the links of this kind of %s, on links of this kind %s"
#~ msgstr ""
#~ "Заменяет ссылки %s, на span тег и устанавливает переход с помощью "
#~ "JavaScript %s"
#~ msgid ""
#~ "Up to 90 percent of comments in the blog can be left for the sake of an "
#~ "external link. Even nofollow from page weight loss here does not help."
#~ msgstr ""
#~ "До 90 процентов комментариев в блоге оставляют ради внешней ссылки. Не "
#~ "поможет даже nofollow от потери веса страницы."
#~ msgid ""
#~ "Replaces the links of the authors of comments on the JavaScript code, it "
#~ "is impossible to distinguish it from usual links."
#~ msgstr ""
#~ "Заменяет ссылки авторов комментариев на JavaScript код, его невозможно "
#~ "отличить от обычной ссылки."
#~ msgid "In some Wordpress topics this may not work."
#~ msgstr "В некоторых темах Wordpress это может не сработать."
#~ msgid "Disable XML-RPC"
#~ msgstr "Отключить XML-RPC"
#~ msgid ""
#~ "A pingback is basically an automated comment that gets created when "
#~ "another blog links to you. A self-pingback is created when you link to an "
#~ "article within your own blog. Pingbacks are essentially nothing more than "
#~ "spam and simply waste resources."
#~ msgstr ""
#~ "Pingback по-существу автоматизированных комментарий, который создается, "
#~ "когда другой блог ссылается на вас. Self-pingback создается, когда вы "
#~ "оставили ссылку на статью в своем блоге. Pingbacks по существу являются "
#~ "не более чем спам и пустая трата ресурсов вашего сайта."
#~ msgid "Removes the server responses a reference to the xmlrpc file."
#~ msgstr "Удаляет ссылку на xmlrpc-файл и ответ сервера."
#~ msgid ""
#~ "We found that you have the \"Clearfy - disable unused features\" plugin "
#~ "installed, this plugin already has disable comments functions, so you can "
#~ "deactivate plugin \"Comments tweaks\"!"
#~ msgstr ""
#~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
#~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
#~ "комментариев, поэтому вы можете отключить плагин «Инструменты "
#~ "комментариев»!"
#~ msgid "Webcraftic comments tweaks"
#~ msgstr "Webcraftic инструменты комментариев"
#~ msgid "Comments are closed."
#~ msgstr "Комментарии Закрыты."
#~ msgid ""
#~ "Note: The <em>%s</em> plugin is currently active, and comments are "
#~ "completely disabled on: %s. Many of the settings below will not be "
#~ "applicable for those post types."
#~ msgstr ""
#~ "Примечание. Плагин <em>%s</em> в настоящий момент активен, и комментарии "
#~ "полностью отключены: %s. Многие из приведенных ниже настроек не будут "
#~ "применяться для этих типов сообщений."
#~ msgid ""
#~ "We found that you have the \"Clearfy - disable unused features\" plugin "
#~ "installed, this plugin already has disable comments functions, so you can "
#~ "deactivate plugin \"Disable comments\"!"
#~ msgstr ""
#~ "Мы обнаружили, что у вас установлен плагин «Clearfy - отключить "
#~ "неиспользуемые функции», этот плагин уже имеет функции отключения "
#~ "комментариев, поэтому вы можете отключить плагин «Отключить комментарии»!"
#~ msgid "Webcraftic Disable comments"
#~ msgstr "Webcraftic отключить комментарии"

View File

@@ -0,0 +1,12 @@
<?php #comp-page builds: premium
/**
* Updates for altering the table used to store statistics data.
* Adds new columns and renames existing ones in order to add support for the new social buttons.
*/
class WCTR_Update010004 extends Wbcr_Factory480_Update {
public function install() {
WCTR_Plugin::app()->deletePopulateOption( 'custom_symbols_pack' );
}
}

View File

@@ -0,0 +1,157 @@
=== Cyrlitera transliteration of links and file names ===
Tags: translitera, cyrillic, latin, l10n, russian, rustolat, slugs, translations, transliteration, media, georgian, european, diacritics, ukrainian
Contributors: webcraftic, creativemotion, alexkovalevv
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VDX7JNTQPNPFW
Requires at least: 5.6
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: trunk
License: GPLv2
The plugin converts Cyrillic, Georgian links, filenames into Latin. It is necessary for correct work of WordPress plugins and improve links readability.
== Description ==
Transliteration is the transformation of one character into another, for example Cyrillic characters, into Latin. Usually transliteration is used to improve the readability of permalinks and avoid problems with displaying and reading files, because everything in network based on the Latin alphabet. Many plugins made by English-speaking developers do not optimize under the Cyrillic alphabet and can work unstable.
Cyrlitera transliteration plugin replaces Cyrillic, Georgian characters at posts, pages and tags to create readable permalinks. Also this plugin fixes incorrect file names and removes unnecessary characters, which can cause problems when accessing this file.
**Cyrillic link example:**<br>
_site.dev/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82-%D0%BC%D0%B8%D1%80
**Converted into the Latin alphabet:**<br>
_site.dev/privet-mir
In the first case, you can not visually understand the text of encoded link. In the second case, the link transliteration is implemented, everything looks more clear and the link is more shorter.
**An example of incorrect filename transliteration:**<br>
%D0%BC%D0%BE%D0%B5_image_ 290.jpg<br>
A+nice+picture.png
**Images transliteration example:**<br>
moe_image_ 290.jpg<br>
a-nice-picture.png
If you ignore file names creation rules, then you can get 404 errors and broken links.
Therefore, create file names using Latin characters and numbers, avoiding special characters, except dashes and underscores. Alternatively, use this plugin. It will do all this work automatically when uploading a file via the WordPress interface and reduce the number of broken links.
#### FEATURES ####
* Converts permalinks of existing posts, pages, categories and tags when options are enable;
* Keeps the integrity of records' and pages' permalinks;
* Creates a redirect from old posts and pages names to the new ones with converted links;
* Performs transliteration of the attachments file names;
* Converts filenames into lowercase;
* Includes Russian, Belarusian, Ukrainian, Bulgarian, Georgian symbols;
* You can advance a characters base for transliteration;
* You can roll back changes if the plugin converted your URLs incorrectly.
#### THANKS TO THE PLUGINS' AUTHORS ####
We used some plugins functions:
<strong>WP Translitera</strong>, <strong>Rus-To-Lat</strong>, <strong>Cyr to Lat</strong>, <strong>Clearfy — WordPress optimization plugin and disable ultimate tweaker</strong>,translit-it, <strong>Cyr to Lat enhanced</strong>, <strong>Cyr-And-Lat</strong>, <strong>Rus filename translit</strong>, <strong>rus to lat advanced</strong>
#### RECOMMENDED SEPARATE MODULES ####
We invite you to check out a few other related free plugins that our team has also produced that you may find especially useful:
* [Clearfy WordPress optimization plugin and disable ultimate tweaker](https://wordpress.org/plugins/clearfy/)
* [Disable Comments for Any Post Types (Remove Comments)](https://wordpress.org/plugins/comments-plus/)
* [Disable updates, Disable automatic updates, Updates manager](https://wordpress.org/plugins/webcraftic-updates-manager/)
* [Cyr-to-lat reloaded transliteration of links and file names](https://wordpress.org/plugins/cyr-and-lat/ "Cyr-to-lat reloaded")
* [Disable admin notices individually](https://wordpress.org/plugins/disable-admin-notices/ "Disable admin notices individually")
* [WordPress Assets manager, dequeue scripts, dequeue styles](https://wordpress.org/plugins/gonzales/ "WordPress Assets manager, dequeue scripts, dequeue styles")
* [Hide login page](https://wordpress.org/plugins/hide-login-page/ "Hide login page")
== Installation ==
1. Upload the plugin files to the `/wp-content/plugins/plugin-name` directory, or install the plugin through the WordPress plugins screen directly.
2. Activate the plugin through the 'Plugins' screen in WordPress
3. Go to the general settings and click on the "Transliteration" tab, activate the options and save the settings.
== Frequently Asked Questions ==
= Converts characters incorrectly? =
Try to change the problematic symbols in the plugin's settings with the symbol base enlargement field. These characters will replace the default characters.
= How to restore converted URLs? =
There is a "Rollback changes" button in the plugin settings. This option works only for links, which has been transliterated. This will not work for filenames.
== Screenshots ==
1. Setting page
2. Simple for posts
2. Simple for filenames
== Changelog ==
= 1.2.0 (05.12.2024) =
* Added: Compatibility with Wordpress 6.7
= 1.1.9 (21.03.2024) =
* Added: Compatibility with Wordpress 6.5
* Added: Compatibility with php 8.3
= 1.1.7 (21.11.2023) =
* Added: Compatibility with Wordpress 6.4
* Added: Compatibility with php 8.2
= 1.1.7 (22.03.2023) =
* Fixed: Freemius framework conflict
* Added: Compatibility with Wordpress 6.2
= 1.1.6 (30.05.2022) =
* Added: Compatibility with Wordpress 6.0
= 1.1.5 (24.03.2022) =
* Added: Compatibility with Disable admin notices plugin
= 1.1.4 (23.03.2022) =
* Added: Compatibility with Wordpress 5.9
* Fixed: Minor bugs
= 1.1.3 (20.10.2021) =
* Added: Compatibility with Wordpress 5.8
* Fixed: Minor bugs
= 1.1.2 (15.12.2020) =
* Added: Subscribe form
* Fixed: Minor bugs
= 1.1.1 =
* Added: Compatibility with Wordpress 4.2 - 5.x
* Added: Gutenberg support
* Added: Multisite support
* Fixed: Minor bugs
= 1.0.5 =
Fixed: Update core
Fixed: Bug with bodypress
Fixed: Transliteration on the frontend
Fixed: Added option to disable transliteration on frontend
= 1.0.4 =
Fixed: Bug with transliteration of file names
Added: Compatibility with PHP 7.2
Added: Forced transliteration for file names
= 1.0.3 =
* Fixed: Small bugs
= 1.0.2 =
* Added: Function of converting files to lowercase
* Added: Forced transliteration function
* Added: The function of redirecting old records to new ones
* Added: Ability to change the base of symbols of transliteration
* Added: Button for converting old posts, categories, tags
* Added: Button to restore old links
= 1.0.1 =
* Fixed small bugs
= 1.0.0 =
* Plugin release

View File

@@ -0,0 +1,14 @@
<?php
// if uninstall.php is not called by WordPress, die
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
die;
}
// remove plugin options
global $wpdb;
$wpdb->query( "DELETE FROM {$wpdb->prefix}options WHERE option_name LIKE 'wbcr_cyrlitera_%';" );
$wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'wbcr_wp_term_%';" );
$wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key='wbcr_wp_old_slug';" );