изменение файлов WordPress

’tag’

Автосохранение без перезагрузки в Альтернативном Полноэкранном режиме редактора TinyMCE в WordPress 3.3.2

Июнь 4, 2012

После того, как я добавил Альтернативный Полноэкранный режим редактора TinyMCE и стал использовать его вместо Стандартного WordPress, единственное, чего мне не хватало, это отображение того, что Черновик текущей записи сохраняется и самой кнопки Сохранения.

Если не раскрывать окно редактора записи во весь экран, то при автосохранении Черновика срабатывает очень хорошая и наглядная функция: кнопки сохранения и публикации затемняются, в нижней части редактора отображается время последнего сохранения.

Что же касается Альтернативного Полноэкранного режима TinyMCE, то я проверял, что автосохранение при написании записи успешно запускается, но понять это визуально никак нельзя.

О чем запись

Я расскажу, как добавить кнопку сохранения к Альтернативному Полноэкранному режиму TinyMCE, сделаю, чтобы эта кнопка затемнялась при автосохранении и добавлю в нижней части индикатор со временем последнего сохранения Черновика. Сохранение также будет доступно при использовании сочетания горячих клавиш Ctrl+S без перезагрузки страницы.

Подключаем дополнительный плагин TinyMCE

К данной задаче меня подтолкнула другая необходимость, которая возникла ранее: хотел добавить на панель с кнопками редактора TinyMCE кнопку вставки в запись текущего времени. В поисках наткнулся на эту страницу:

С нее все и началось. Сверху я увидел ссылку на стандартные плагины TinyMCE и понял, что их довольно много и что к редактору WordPress подключена лишь часть:

Стал смотреть все по очереди и случайно увидел плагин "Save":

Скачать все плагины можно со следующей страницы:

После загрузки "Full Package" распаковываем архив и перемещаемся в следующую папку:

/tinymce/jscripts/tiny_mce/plugins

После этого копируем папку "save" на хостинг в папку:

/wp-includes/js/tinymce/plugins

О том, как изменить настройки редактора TinyMCE, заданные по умолчанию я писал в записи про добавление списка с классами на панель Визуального редактора.

По аналогии, переходим в Закрытой части блога во "Внешний вид", затем выбираем "Редактор" и файл functions.php. Вставляем следующий код:

function my_mce_before_init( $init ) {
	$init['theme_advanced_buttons3'] .= ',save';
	$init['plugins'] .= ',save';
	return $init;
}
add_filter('tiny_mce_before_init', 'my_mce_before_init');

Графическая кнопка "Сохранение" появится в 3-й сверху строчке Визуального редактора. Для того, чтобы она была в 1-й достаточно поменять порядковый номер в "theme_advanced_buttons3" на "theme_advanced_buttons1", думаю это понятно.

Теперь, если открыть Визуальный редактор, то на панели будет видна кнопка Сохранения, которая также будет отображаться в Альтернативном Полноэкранном режиме.

После нажатия на кнопку запись обновляется и страница перезагружается.

В описании к плагину "save" по ссылке выше видно, что в плагине можно задавать дополнительные параметры. К примеру, можно сделать, чтобы кнопка Сохранения была неактивна до тех пор, пока в запись не будут внесены изменения. За это отвечает параметр "save_enablewhendirty".

Для добавления в настройки TinyMCE нового параметра перед вызовом tinyMCE.init(), дополняем код, который добавили в functions.php:

function my_mce_before_init( $init ) {
	$init['theme_advanced_buttons3'] .= ',save';
	$init['plugins'] .= ',save';
	$init['save_enablewhendirty'] = true;
	return $init;
}
add_filter('tiny_mce_before_init', 'my_mce_before_init');

В 4-й строке в массив был добавлен желаемый параметр и значение установлено в "true". При первоначальном открытии записи на редактирование кнопка Сохранения будет неактивна.

Отключаем горячие клавиши в плагине save

В дополнительном плагине "save" для TinyMCE задаются горячие клавиши для сохранения записи "Ctrl+S". К сожалению, они переопределяют горячие клавиши редактора, заданные в WordPress и вместо автосохранения без перезагрузки страницы, вызывается обновление записи с перезагрузкой.

Для решения этой проблемы идем в папку:

/wp-includes/js/tinymce/plugins/save

И открываем на редактирование файл "editor_plugin.js". Находим следующий текст:

a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")

и заменяем его на:

/* cay 1 a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")*/

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

Выводим сообщение о последнем сохранении

В нижней части Альтернативного Полноэкранного режима редактора TinyMCE есть "Путь". Я решил в этот путь справа добавить выводимое в обычном редакторе сообщение "Черновик сохраняется..." и "Черновик сохранён в ...".

Из папки:

/wp-includes/js

открываем файл autosave.js. Находим следующий текст:

function autosave_loading(){

и заменяем его (дополняем) на:

function autosave_loading(){if(!jQuery('#save-message').length){jQuery('#mce_fullscreen_tbl .mceStatusbar').append('<div id="save-message"></div>');}

Как видно я просто добавил новый элемент div с id равным save-message с помощью JQuery, если его ранее не существовало.

Теперь добавим запись в созданный элемент сообщения о результате сохранения Черновика. В том же файле находим следующий текст:

jQuery(".autosave-message").html(autosaveL10n.savingText)

и заменяем его на:

jQuery(".autosave-message, #save-message").html(autosaveL10n.savingText)

Видно, что я просто добавил новый элемент #save-message к выборке JQuery.

Далее находим:

if(e){jQuery(".autosave-message").html(e)}else{if(autosaveOldMessage&&d){jQuery(".autosave-message").html(autosaveOldMessage)}

и заменяем на:

if(e){jQuery(".autosave-message, #save-message").html(e)}else{if(autosaveOldMessage&&d){jQuery(".autosave-message, #save-message").html(autosaveOldMessage)}

Сохраняем файл autosave.js и загружаем его обратно на сервер. Теперь при автосохранении в Альтернативной версии Полноэкранного режима в самом низу появится желаемое – вывод сообщения "Сохранение черновика..." и "Черновик сохранен в ...".

Единственное, чего не хватает, так это выравнивания по правому краю и отступа. Идем в Закрытой части сайта во "Внешний вид", затем выбираем "Редактор" и файл functions.php. Добавляем альтернативные стили CSS для администратора с помощью следующего кода:

function fullscreen_editor_styles() {
	global $user_level;
	// только для администратора
	if ($user_level > 9) {
		echo '<style type="text/css">
#save-message {
	float: right;
	margin-right: 8px;
}
</style>';
	}
}
add_action('admin_head', 'fullscreen_editor_styles');

Сохраняем файл и смотрим редактор в Полноэкранном режиме. Теперь сообщение о статусе сохранения Черновика отображается как надо.

Затемнение кнопки сохранения

Осталась последняя нереализованная задача – для наглядности затемнять кнопку "Сохранение" на панели Визуального редактора при автосохранении и выводить из затемнения после завершения автосохранения.

Возвращаемся к редактированию файла autosave.js. Находим следующий текст:

function autosave_enable_buttons(){setTimeout(function(){jQuery(":button, :submit","#submitpost").removeAttr("disabled");jQuery(".ajax-loading").css("visibility","hidden")},500)}function autosave_disable_buttons(){jQuery(":button, :submit","#submitpost").prop("disabled",true);setTimeout(autosave_enable_buttons,5000)}

и заменяем его на следующий:

function autosave_enable_buttons(){setTimeout(function(){jQuery(":button, :submit","#submitpost").removeAttr("disabled");jQuery(".ajax-loading").css("visibility","hidden");jQuery("#content_save, #mce_fullscreen_save").removeClass("mceButtonDisabled").addClass("mceButtonEnabled");},500)}function autosave_disable_buttons(){jQuery("#content_save, #mce_fullscreen_save").removeClass("mceButtonEnabled").addClass("mceButtonDisabled");jQuery(":button, :submit","#submitpost").prop("disabled",true);setTimeout(autosave_enable_buttons,5000)}

Я сделал вставки кода, содержащие "#content_save, #mce_fullscreen_save". С помощью JQuery для кнопки сохранения в Обычном режиме и для кнопки сохранения в Полноэкранном режиме в зависимости от ситуации либо добавляю класс mceButtonEnabled и удаляю mceButtonDisabled, либо наоборот. После сохранения файла все кнопка должна затемняться. Можно попробовать с помощью горячих клавиш "Ctrl+S".

Для справки

Пока я копался в исходных кодах, не могу не отметить, что за переход в Полноэкранный режим редактора отвечает файл editor_plugin.js в следующей папке:

/wp-includes/js/tinymce/plugins/wordpress

При нажатии на кнопку перехода в Полноэкранный срабатывает код после следующей строчки:

if ( 'mceFullScreen' == cmd ) {

Также не могу не отметить, что в папке:

/wp-includes/js/tinymce/plugins

есть две интересные подпапки:

  • fullscreen
  • wpfullscreen

которые отвечают видимо за Полноэкранный режим. Странно, что я пока еще не вносил в них ни одного изменения.

Думаю, это может пригодиться.

Примечание

Изменения, которые вносится в данной статье с новым обновлением WordPress (текущая версия 3.3.2) нужно будет проходить заново. Поэтому если после обновления что-то не работает, об этом нужно помнить в первую очередь.

Ошибки сохранения

В ходе написания данной записи я решил нажать на саму кнопку "Сохранить", чтобы вызовет перезагрузку страницы естественно. Все успешно сохранилось, но за исключением форматирования исходного кода, который я добавил в запись в тегах <pre></pre>. Слетел переход на новую строчку.

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

Возвращаюсь в папку:

/wp-includes/js/tinymce/plugins/save

и редактирую файл editor_plugin.js. Находим следующий код:

if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}

и заменяем его на:

if(a.onsubmit==null||a.onsubmit()!=false){/* cay 2 a.submit() */}c.nodeChanged()}

Теперь кнопка при нажатии не сработает и будет служить исключительно, как индикатор автосохранения.

Tags: , , , , , , , , , ,
Записано в WordPress, Программирование    |    Постоянная ссылка

Делаем постоянной рамку поля редактирования текста в Полноэкранной версии редактора в WordPress 3.3.2

Май 31, 2012

Речь идет о пунктирной линии, которая окружает поля редактирования текста записи и поле названия в Полноэкранном режиме редактора.

Аналогично тому, как была зафиксирована видимость панели с кнопками в редакторе, делаем постоянным отображение рамки.

Сначала посмотрим следующий файл:

/wp-admin/js/wp-fullscreen.dev.js

Я пришел к выводу, что за скрытие пунктирной рамки отвечает следующая строчка:

$('#wp-fullscreen-body').removeClass('wp-fullscreen-focus');

Для постоянного отображения рамки полей редактора достаточно строчку закомментировать. Но нас интересуют изменения в используемом в системе WordPress файле:

/wp-admin/js/wp-fullscreen.js

Находим следующий текст:

c("#wp-fullscreen-body").removeClass("wp-fullscreen-focus")

и заменяем его на:

/* cay 2 c("#wp-fullscreen-body").removeClass("wp-fullscreen-focus")*/

Сохраняем, не забываем очистить кэш браузера и проверяем. Рамка должна постоянно отображаться.

Tags: , , , , , , , , , , ,
Записано в WordPress, Программирование    |    Постоянная ссылка

Альтернативный Полноэкранный режим Визуального редактора со всеми кнопками в WordPress 3.3.2

Май 31, 2012

В записи про проблемы Визуального редактора я говорил, что нашел решение, которое позволило отобразить полнофункциональную панель с кнопками TinyMCE в Полноэкранном режиме.

Скажу сразу, что решение скорее в конце записи, а в начале история моих поисков.

Начал я как всегда с Интернета в на этот раз ничего не нашел вовсе. Более того, о том, как добавить альтернативные кнопки на панель Редактора в Полноэкранном режиме еще писали, но этот вопрос так никто и не ответил, да и не рассматривал.

Визуальный редактор в Полноэкранном режиме просто накладывает поверх окна с текущим редактором, новое во весь экран. Мне сразу пришла в голову идея обычной замены HTML содержания панели с кнопками одного редактора на другого при инициализации. Попросту я предполагал, что если при работе в Полноэкранном режиме нажать на кнопку на панели обычного редактора, то изменения должны иметь силу.

Сначала я открыл следующий файл:

/wp-admin/js/wp-fullscreen.dev.js

И в конце функции init:

init: function() {

добавил следующий код:

$('#wp-fullscreen-central-toolbar').html($('#content_toolbargroup').clone());

Однако, после перехода в Полноэкранный режим вместо всех кнопок на панели появлялся лишь текст "Абзац".

Примечание: после внесения изменений я скопировал содержимое файла wp-fullscreen.dev.js в wp-fullscreen.js, так как только последний файл используется системой WordPress.

Как я ни пытался изменить код, ничего не выходило. Более того, я потратил на это несколько часов.

После неудачных попыток я перешел к файлу:

/wp-includes/class-wp-editor.php

Меня интересовало, почему для Обычного режима в Визуальном редакторе кнопки задаются так:

$mce_buttons = apply_filters( 'teeny_mce_buttons', array('bold', 'italic', 'underline', 'blockquote', 'separator', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'undo', 'redo', 'link', 'unlink', 'fullscreen'), $editor_id );

А для Полноэкранной версии по-другому:

$buttons = array(
	// format: title, onclick, show in both editors
	'bold' => array( 'title' => __('Bold (Ctrl + B)'), 'onclick' => 'fullscreen.b();', 'both' => false ),
	'italic' => array( 'title' => __('Italic (Ctrl + I)'), 'onclick' => 'fullscreen.i();', 'both' => false ),
	'0' => 'separator',

Далее я разбирался, зачем используется переменная dfw массива $set. Возьмем строчку с описанием:

'dfw' => false, // replace the default fullscreen with DFW (needs specific DOM elements and css)

В комментарии сказано, что переменная dwf позволяет заменить стандартный Полноэкранный режим с помощью DFW. Что же такое DFW я так и не понял.

Тогда я внес следующее изменение:

$set = wp_parse_args( $settings,  array(
	'wpautop' => true, // use wpautop?
	'media_buttons' => true, // show insert/upload button(s)
	'textarea_name' => $editor_id, // set the textarea name to something different, square brackets [] can be used here
	'textarea_rows' => get_option('default_post_edit_rows', 10), // rows="..."
	'tabindex' => '',
	'editor_css' => '', // intended for extra styles for both visual and HTML editors buttons, needs to include the <style> tags, can use "scoped".
	'editor_class' => '', // add extra class(es) to the editor textarea
	'teeny' => false, // output the minimal editor config used in Press This
	'dfw' => false, // replace the default fullscreen with DFW (needs specific DOM elements and css)
	'tinymce' => true, // load TinyMCE, can be used to pass settings directly to TinyMCE using an array()
	'quicktags' => true // load Quicktags, can be used to pass settings directly to Quicktags using an array()
) );
$set['dfw'] = true;

Это изменение мне ничего не дало и я его удалил.

После этого я разозлился и стал комментировать все, что было связано с переменной $set['dfw'] и $mce_buttons. Каждое изменение просматривал. Кнопка "Полноэкранный режим" то исчезала, то не работала. Но в один момент запустился редактор во всю ширину экрана с основной и дополнительной панелями и всеми кнопками, как в обычном режиме.

Включаем альтернативный Полноэкранный режим TinyMCE

А сделал я следующее. Закомментировал одну строчку. Меняем следующий код:

if ( $set['dfw'] ) {
	// replace the first 'fullscreen' with 'wp_fullscreen'
	if ( ($key = array_search('fullscreen', $mce_buttons)) !== false )
		$mce_buttons[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_2)) !== false )
		$mce_buttons_2[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_3)) !== false )
		$mce_buttons_3[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_4)) !== false )
		$mce_buttons_4[$key] = 'wp_fullscreen';
}

на этот:

if ( $set['dfw'] ) {
	// replace the first 'fullscreen' with 'wp_fullscreen'
	/* cay 1
	if ( ($key = array_search('fullscreen', $mce_buttons)) !== false )
		$mce_buttons[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_2)) !== false )
		$mce_buttons_2[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_3)) !== false )
		$mce_buttons_3[$key] = 'wp_fullscreen';
	elseif ( ($key = array_search('fullscreen', $mce_buttons_4)) !== false )
		$mce_buttons_4[$key] = 'wp_fullscreen';
	cay 1 # */
}

Теперь вместо Полноэкранного режима Визуального редактора WordPress версии отобразится видимо версия TinyMCE.

Я попробовал внести изменения в запись и после закрытия Полноэкранного режима изменения имели силу в Обычном редакторе.

Теперь задача свелась к тому, чтобы задать ширину Визуального редактора в Полноэкранном режиме, выравнять его по центру и сделать границу вокруг поля редактирования текста. Мне это было нужно.

Сначала открываем "Внешний вид", затем "Редактор" и вносим изменение в файл functions.php. Добавляем сверху:

/* cay 2:
 * Альтернативные стили для Визуального редактора
 * Полноэкранный режим (FullScreen) - неофициальная версия, TinyMCE
 */
function fullscreen_editor_styles() {
	global $user_level;
	// только для администратора
	if ($user_level > 9) {
		// ширина 855 (на сайте 820)
		// 840 + 15 пикселей прокрутка
		// 820 + 10 * 2 отступ по бокам
		echo '<style type="text/css">
#mce_fullscreen_toolbargroup, #mce_fullscreen_ifr {
	width: 855px !important;
	margin: 0 auto;
}
#mce_fullscreen_ifr {
	border-left: 1px solid #DFDFDF;
	border-right: 1px solid #DFDFDF;
}
</style>';
	}
}
add_action('admin_head', 'fullscreen_editor_styles');
/* cay 2 # */

Этот код всего лишь добавит вывод на экран в Закрытой части WordPress дополнительно заданных стилей. Данный Полноэкранный режим выводится не в отдельном IFrame, а в том же документе, поэтому здесь не подходит изменение стиля редактора editor-style.css.

Теперь панель Визуального редактора отображается со всеми кнопками по центру экрана. Если текста много, появляется прокрутка не у всего документа, а у области редактирования записи. Таким образом, панель с кнопками всегда на верху. Внизу всегда отображается "Путь". Очень удобно и я рад, что проделал столь долгий путь к этому, оно того стоило.

Замеченные проблемы

Однако, пока я печатал прошлую запись, используя браузер Google Chrome, страница с Визуальным редактором и 2-я, которая была просто открыта со страницей блога, вдруг "упали". Я скопировал строку браузера и открыл на редактирования ту же запись, не закрывая 1-е окно. Все было сохранено. После этого я перезагрузил основную страницу.

Несмотря на то, что текст страницы сохранился, было нарушено форматирование, а именно абзацы были (до разрыва текста кодом) в одну строчку. Пришлось восстанавливать. Не знаю, связано ли это с функцией WordPress wpautop() или работой Полноэкранного режима версии TinyMCE, а может и в Chrome дело, но подобная возможность грозит потерей всего содержимого в худшем случае.

Я не использую ревизий, но теперь включил, чтобы редактор хранил хотя бы одну для записи.

Кстати, что касается автосохранения, то оно отлично работает с заданным интервалом. Единственное, нет кнопки, по которой видно, что запись в настоящий момент сохраняется. Поэтому печатать бывает страшно.

Также два раза уже отметил, что если гулять в Chrome по соседним вкладкам, то высота окна редактирования увеличивается и вернуть ее к исходному размеру невозможно.

Примечание

Опять же изменение касается внутреннего файла WordPress, что означает, что после обновления системы до новой версии, вносить поправку в файл class-wp-editor.php придется заново.

Tags: , , , , , , , , , , ,
Записано в WordPress, Программирование    |    Постоянная ссылка

Фиксируем видимость панели с кнопками Визуального редактора в Полноэкранном режиме в WordPress 3.3.2

Май 31, 2012

После перехода в Полноэкранный режим редактирования записи, верхняя панель с кнопками то появляется, то исчезает. Делает она это плавно, с затуханием. Меня это отвлекает, а со временем раздражает. Хочется комфортной работы. Если бы в Microsoft Office Word постоянно что-то менялось в интерфейсе, то его использование было бы невыносимо.

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

Сейчас объясню, как в одно изменение заставить верхнюю панель с кнопками TinyMCE быть всегда видимой. Однако, данные изменения будут стерты следующим обновлением WordPress и их снова придется вносить. Это так, потому что решение не идеальное и я сам его сейчас не использую, так как нашел лучший для себя вариант, который опишу в следующих записях.

Фиксируем панель

В прошлой записи про добавление кнопок на панель Визуального редактора в Полноэкранном режиме я говорил, что Полноэкранный редактор работает на основе следующего JavaScript файла:

/wp-admin/js/wp-fullscreen.js

Но сейчас нас будет интересовать "версия для разработчика" данного файла:

/wp-admin/js/wp-fullscreen.dev.js

Для того, чтобы зафиксировать верхнюю панель я изменил следующий кусок кода:

ps.subscribe( 'hideToolbar', function() {
	s.toolbars.removeClass('fade-300').addClass('fade-1000');
	api.fade.Out( s.toolbars, 1000, function(){ ps.publish('toolbarHidden'); }, true );
	$('#wp-fullscreen-body').removeClass('wp-fullscreen-focus');
});

Я закомментировал всего одну строчку:

ps.subscribe( 'hideToolbar', function() {
	s.toolbars.removeClass('fade-300').addClass('fade-1000');
	/* cay 1 api.fade.Out( s.toolbars, 1000, function(){ ps.publish('toolbarHidden'); }, true ); */
	$('#wp-fullscreen-body').removeClass('wp-fullscreen-focus');
});

Если скопировать содержимое файла wp-fullscreen.dev.js в wp-fullscreen.js, то верхняя панель с кнопками более не будет исчезать. Но это не до конца верное решение.

В файле нужно закомментировать следующий текст:

b.fade.Out(a.toolbars,1000,function(){e.publish("toolbarHidden")},true);

Т.е. заменить его на:

/* cay 1 b.fade.Out(a.toolbars,1000,function(){e.publish("toolbarHidden")},true);*/

После сохранения файла верхняя панель Визуального редактора в Полноэкранном режиме всегда будет видимой и перестанет исчезать.

В следующей записи расскажу, как сделать, чтобы не исчезала пунктирная рамка поля редактирования текста записи и названия.

Tags: , , , , , , , , , , ,
Записано в WordPress, Программирование    |    Постоянная ссылка

Снимаем ограничение на длину SEF-ссылки в WordPress

Май 25, 2012

По-умолчанию название записи в UTF-8 кодируется в безопасные символы и затем составляется SEF-ссылка.

WordPress ограничивает длину ссылки в 200 символов.

Для того, чтобы снять ограничение придется исправить файл в папке wp-includes, а именно formatting.php.

Нас интересует следующая функция:

function sanitize_title_with_dashes($title, $raw_title = '', $context = 'display') {

В теле функции находим:

$title = utf8_uri_encode($title, 200);

Заменяем 200 символов на желаемое значение. Я расширил его до 500.

Важно! При обновлении WordPress необходимо заново отредактировать файл.

Однако, на этим все не ограничивается.

Далее заходим в используемую для блога Базу данных через PhpMyAdmin. Нас интересует таблица _posts.
Переключаемся с "Обзора" на "Структуру" и редактируем поле "post_name". Устанавливаем "Длину/значения" в 500 и сохраняем изменения.

Теперь можно попробовать преобразовать длинное название в SEF-ссылку.

Для тех, у кого установлен плагин SEO Ultimate во вкладке "Modules" для верности требуется отключить "Slug Optimizer" – установить значение в "Disabled" и сохранить изменения.

Tags: , , ,
Записано в WordPress    |    Постоянная ссылка