Добавление заполнителя в содержимое редактора WordPress

Вопрос или проблема

Добавление заполнителя в содержимое редактора 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' на нужный тип поста
});

Объяснение кода:

  1. Функция change_editor_placeholder:

    • Эта функция принимает два параметра: текст плейсхолдера и тип поста, для которого вы хотите изменить плейсхолдер.
    • Функция создает внутреннюю анонимную функцию, которая использует регулярное выражение для добавления атрибута placeholder к <textarea>, если текущий тип поста соответствует заданному.
  2. Фильтр the_editor:

    • Фильтр the_editor позволяет менять HTML-код редактора постов перед его выводом.
    • Используется preg_replace для добавления атрибута placeholder.
  3. Пример использования:
    • В данном примере добавляется плейсхолдер "Введите описание здесь" для постов (тип ‘post’). Вы можете заменить тип поста на нужный вам (например, ‘page’, ‘custom_post_type’ и т.д.).

Установка кода:

  • Добавьте этот код в файл вашего дочернего шаблона (functions.php) или в плагин, который вы используете для пользовательских функций.

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

Оцените материал
Добавить комментарий

Капча загружается...