Как отключить визуальный редактор WordPress для определённых страниц или записей
Если вы используете стандартный визуальный (WYSIWYG) редактор WordPress, то наверняка сталкивались с ситуацией, когда введённый вами в режиме текстового редактора код, после переключения в режим визуального редактирования не просто отображался, но и изменялся редактором. Это особенность встроенного редактора ВордПресс (TinyMCE), которая призвана приводить html-код в соответствие стандартам разметки. Существует несколько способов ограничить этот его функционал, однако полностью отключить фильтрацию кода невозможно. Что же делать, если на определённой странице вам нужно добавить код, который "не нравится" редактору TinyMCE?
Для отключения визуального редактора TinyMCE на определённых страницах или постах, нужно добавить в файл functions.php вашего активного WordPress шаблона следующий код:
function disable_visual_editor($can)
{
global $post;
/*
* Отключить визуальный редактор WordPress на странице или записи с определённым ID (в нашем примере с ID = 15)
*/
if ($post->ID == 15) {
return false;
}
/*
* Скрыть визуальный редактор TinyMCE на страницах с ID 16, 25 и 30 (для случаев, когда нужно убрать редактор сразу для нескольких страниц)
*/
$disabled_IDs = array(16, 25, 30);
if (in_array($post->ID, $disabled_IDs)) {
return false;
}
/*
* Отключить визуальный редактор WordPress для всех страниц (т.е. для всех постов с типом "страница")
*/
$post_type = get_post_type($post);
if ($post_type == 'page') {
return false;
}
/*
* Отключить визуальный редактор ВордПресс на страницах с определённым шаблоном (!!!ВНИМАНИЕ!!! нужно указывать не название шаблона поста или страницы, а имя файла этого шаблона, например my_page_template.php)
*/
$page_template = get_post_meta($post->ID, '_wp_page_template', true);
if ($page_template == 'my_page_template.php') {
return false;
}
return $can;
}
add_filter('user_can_richedit', 'disable_visual_editor');
Само собой, имея доступ к объекту $post
, можно использовать также и другие его свойства (post_title, post_name и т.д.), чтобы убрать визуальный редактор для страниц с определённым заголовком, URL и т.д.
А с использованием таких функций как get_the_category($post->ID);
или wp_get_current_user();
вы можете убрать визуальный редактор для определённой категории или же пользователя (группы пользователей, определённой роли и т.д.)
Полное отключение возможности редактирования содержимого страницы в WordPress
Также бывают ситуации, когда для определённых страниц или постов редактор не нужен совсем. Например, вы создали php-файл шаблона, который получает и отображает данные из какого-то внешнего источника и назначили этот шаблон какой-то из своих страниц. В таком случае вы можете полностью отключить редактирование содержимого этой страницы (отключить как визуальный, так и текстовый редакторы), оставив при этом возможность изменять заголовок, метки и прочее.
Для полного отключения редактора, нужно добавить в файл functions.php вашего шаблона следующий код:
function disable_content_editor()
{
if (isset($_GET['post'])) {
$post_ID = $_GET['post'];
} else if (isset($_POST['post_ID'])) {
$post_ID = $_POST['post_ID'];
}
if (!isset($post_ID) || empty($post_ID)) {
return;
}
/*
* Полностью отключить редактор WordPress для страницы с определённым ID (в нашем примере с ID = 15)
*/
if ($post_ID == 15) {
remove_post_type_support('page', 'editor');
}
/*
* Отключить возможность редактирования для всех страниц (т.е. для всех постов с типом "страница")
*/
$post_type = get_post_type($post_ID);
if ($post_type == 'page') {
return false;
}
/*
* Отключить возможность редактирования для страниц с ID 16, 25 и 30 (для случаев, когда нужно отключить редактор сразу для нескольких страниц)
*/
$disabled_IDs = array(16, 25, 30);
if (in_array($post_ID, $disabled_IDs)) {
remove_post_type_support('page', 'editor');
}
/*
* Скрыть редактор ВордПресс на страницах с определённым шаблоном (!!!ВНИМАНИЕ!!! указывать нужно не название шаблона, а имя его файла, например my_page_template.php)
*/
$page_template = get_post_meta($post_ID, '_wp_page_template', true);
if ($page_template == 'my_page_template.php') {
remove_post_type_support('page', 'editor');
}
}
add_action('admin_init', 'disable_content_editor');