Вопрос или проблема
Добавление заполнителя в содержимое редактора WordPress
Я хочу добавить текст-заполнитель в поле содержимого редактора WordPress.
Когда вы создаете новый пост, поле заголовка отображает “Введите заголовок здесь”, точно так же, как и редактор. Я использовал фильтр, чтобы добавить текст в редактор, но поведение фильтра не такое же, как у поля заголовка. Когда я кликаю на поле заголовка, “Введите заголовок здесь” заменяется пустым пространством.
Код:
add_filter( 'default_content', 'my_editor_content' );
function my_editor_content( $content ) {
$content .= '<b id="enter_desc_here" style="color: #BBBBBB;font-size: 1.7em;">Введите описание здесь</b>';
return $content;
}
Возможно ли использовать аналогичный код, чтобы добавить текст-заполнитель в поле содержимого редактора?
Я решил эту задачу, создав утилитарную функцию, которая принимает новый текст-заполнитель и тип поста, а затем использует фильтр для добавления атрибута placeholder в <textarea>
. Это будет похоже на поле заголовка, что, я думаю, вы и пытаетесь сделать.
/**
* Изменить текст-заполнитель по умолчанию для редактора постов
* @param string $new_placeholder Текст-заполнитель, который нужно добавить в поле редактора
* @param string $post_type Тип поста, в котором должен использоваться текст-заполнитель.
*/
function change_editor_placeholder ( $new_placeholder, $post_type ){
$change_func = function( $html ) use ( $new_placeholder, $post_type ) {
$screen = get_current_screen();
if ( $post_type == $screen->post_type ){
$html = preg_replace('/<textarea/', '<textarea placeholder="' . $new_placeholder . '" ', $html);
}
return $html;
};
add_filter('the_editor', $change_func);
}
Ответ или решение
Для добавления плейсхолдера в контентный блок редактора WordPress, вам потребуется немного изменить подход, поскольку использование фильтра default_content
не дает желаемого результата, как в полях заголовка. Вместо этого, вы можете создать функцию, которая будет добавлять атрибут placeholder
к элементу <textarea>
редактора.
Вот полный код, который реализует данную функциональность:
/**
* Изменить плейсхолдер для редактора записей
* @param string $new_placeholder Плейсхолдер для добавления в поле редактора
* @param string $post_type Тип поста, в котором необходимо использовать текст плейсхолдера
*/
function change_editor_placeholder( $new_placeholder, $post_type ) {
$change_func = function( $html ) use ( $new_placeholder, $post_type ) {
$screen = get_current_screen();
if ( $post_type == $screen->post_type ) {
$html = preg_replace('/<textarea/', '<textarea placeholder="' . esc_attr( $new_placeholder ) . '" ', $html);
}
return $html;
};
add_filter('the_editor', $change_func);
}
// Пример использования функции
add_action('edit_form_after_title', function() {
change_editor_placeholder('Введите описание здесь', 'post'); // Замените 'post' на нужный тип поста
});
Объяснение кода:
-
Функция
change_editor_placeholder
:- Эта функция принимает два параметра: текст плейсхолдера и тип поста, для которого вы хотите изменить плейсхолдер.
- Функция создает внутреннюю анонимную функцию, которая использует регулярное выражение для добавления атрибута
placeholder
к<textarea>
, если текущий тип поста соответствует заданному.
-
Фильтр
the_editor
:- Фильтр
the_editor
позволяет менять HTML-код редактора постов перед его выводом. - Используется
preg_replace
для добавления атрибутаplaceholder
.
- Фильтр
- Пример использования:
- В данном примере добавляется плейсхолдер "Введите описание здесь" для постов (тип ‘post’). Вы можете заменить тип поста на нужный вам (например, ‘page’, ‘custom_post_type’ и т.д.).
Установка кода:
- Добавьте этот код в файл вашего дочернего шаблона (functions.php) или в плагин, который вы используете для пользовательских функций.
С помощью приведенного кода вы сможете установить плейсхолдер в редакторе контента соответствующим образом, аналогично тому, как это сделано для поля заголовка.