Добавление визуального редактора в Excerpt

12 июл. 2012 г., 12:45:59
Просмотры: 15.7K
Голосов: 8

Мне нужно добавить расширенный редактор TinyMCE в поле Excerpt, есть идеи?

У меня установлен плагин qTranslate (мультиязычность), и никак не получается связать поле Excerpt с этим плагином и редактором.

Спасибо

0
Все ответы на вопрос 4
5
16

Просто замените стандартный вывод. Убедитесь, что вы разэкранируете отрывок перед отправкой в редактор:

add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );

/**
 * Заменяет стандартный редактор отрывка на TinyMCE.
 */
class T5_Richtext_Excerpt
{
    /**
     * Заменяет метабоксы.
     *
     * @return void
     */
    public static function switch_boxes()
    {
        if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
        {
            return;
        }

        remove_meta_box(
            'postexcerpt' // ID
        ,   ''            // Экран, пусто для поддержки всех типов записей
        ,   'normal'      // Контекст
        );

        add_meta_box(
            'postexcerpt2'     // Повторное использование 'postexcerpt' не работает.
        ,   __( 'Отрывок' )    // Заголовок
        ,   array ( __CLASS__, 'show' ) // Функция отображения
        ,   null              // Экран, используем все экраны с метабоксами.
        ,   'normal'          // Контекст
        ,   'core'            // Приоритет
        );
    }

    /**
     * Вывод для метабокса.
     *
     * @param  object $post
     * @return void
     */
    public static function show( $post )
    {
    ?>
        <label class="screen-reader-text" for="excerpt"><?php
        _e( 'Отрывок' )
        ?></label>
        <?php
        // Мы используем стандартное имя 'excerpt', чтобы не заботиться о
        // сохранении, других фильтрах и т.д.
        wp_editor(
            self::unescape( $post->post_excerpt ),
            'excerpt',
            array (
            'textarea_rows' => 15
        ,   'media_buttons' => FALSE
        ,   'teeny'         => TRUE
        ,   'tinymce'       => TRUE
            )
        );
    }

    /**
     * Отрывок обычно экранирован. Это ломает HTML-редактор.
     *
     * @param  string $str
     * @return string
     */
    public static function unescape( $str )
    {
        return str_replace(
            array ( '&lt;', '&gt;', '&quot;', '&amp;', '&nbsp;', '&amp;nbsp;' )
        ,   array ( '<',    '>',    '"',      '&',     ' ', ' ' )
        ,   $str
        );
    }
}

Визуальный редактор для отрывка в WordPress

Сохраните этот код в плагине или в файле functions.php вашей темы.

12 июл. 2012 г. 20:15:26
Комментарии

Спасибо, всё работает "из коробки" в 2018 на WP 4.9.x :)

moped moped
13 июн. 2018 г. 15:05:59

Отлично работает в версии 5.1 (февраль 2019), спасибо!

Mayur Chauhan Mayur Chauhan
25 февр. 2019 г. 00:33:26

Всё ещё работает в 2020, даже после Гутенберга (хотя я тестировал только с включённым плагином "Classic Editor")

squarecandy squarecandy
1 февр. 2020 г. 04:59:41

Все еще работает в версии 5.8.1 (сентябрь 2021). Интересно, как можно добавить кнопку "Добавить медиафайл".

A. D'Alfonso A. D'Alfonso
25 сент. 2021 г. 13:16:19

Обнаружил, что этот фрагмент кода, похоже, конфликтует с WooCommerce, так как делает невозможным обновление "Краткого описания товара". Редактирования просто не сохраняются. Понадобилось время, чтобы это выяснить, поэтому хочу предупредить других.

Tomas Eklund Tomas Eklund
25 окт. 2022 г. 12:47:14
3

Простой способ — использовать плагин Rich Text Excerpt

Плагин использует функцию wp_editor для создания визуального редактора текста для цитат (эксептов) страниц/записей, поэтому работает только в WordPress версии 3.3 и выше.

12 июл. 2012 г. 12:57:24
Комментарии

Я попробовал, но это несовместимо с плагином qTranslate, есть идеи как заставить это работать?

Marta Marta
12 июл. 2012 г. 13:12:04

Я посмотрю этот вопрос.

Pontus Abrahamsson Pontus Abrahamsson
12 июл. 2012 г. 13:36:34

Есть идеи, почему краткое описание по умолчанию не является текстовым редактором?

urok93 urok93
22 авг. 2012 г. 16:45:06
1

Возможно, вам понадобится использовать функцию wp_editor для получения визуального редактора, затем следует удалить все функции санитизации с get_post_meta (или update_post_meta), после чего использовать функцию htmlspecialchars_decode для получения форматированного контента..

Рассмотрите этот принцип:

add_action( 'add_meta_boxes', 'adding_a_new_metaabox' );                
function adding_a_new_metaabox() 
    {   
        add_meta_box('html_myid_31_section', 'ЗАГОЛОВОК Привет', 'my_output_funct');
    }

function my_output_funct( $post ) 
    {
    //здесь не нужно использовать esc_attr перед get_post_meta
    $valueeee2=  get_post_meta($_GET['post'], 'SMTH_METANAME' , true ) ;
    wp_editor( htmlspecialchars_decode($valueeee2), 'mettaabox_ID_stylee', $settings = array('textarea_name'=>'MyInputNAMEE') );
    }


function save_my_post_data( $post_id ) 
{                   
    if (!empty($_POST['MyInputNAMEE']))
        {
        $datta=htmlspecialchars($_POST['MyInputNAMEE']);
        update_post_meta($post_id, 'SMTH_METANAME', $datta );
        }
}
add_action( 'save_post', 'save_my_post_data' ); 
29 нояб. 2013 г. 02:02:42
Комментарии

Пожалуйста, добавьте объяснение к вашему ответу: почему это может решить проблему?

fuxia fuxia
29 нояб. 2013 г. 02:46:05
1

Решение для добавления WYSIWYG редактора цитаты (excerpt) сразу после заголовка записи.

Цитата (Excerpt)

Добавьте следующий класс в ваш WordPress проект как файл excerpt.php

class Excerpt {

    public function __construct() {
        add_filter('excerpt_more', [$this, 'excerpt_more']);
        add_action('edit_form_after_title', [$this, 'excerpt']);
        add_action('admin_menu', [$this, 'remove_excerpt_metabox']);
        add_filter('wp_trim_excerpt', [$this, 'wp_trim_excerpt'], 10, 2);
    }

    /**
     * Удаляет метабокс цитаты из записи
     */
    public function remove_excerpt_metabox() {
        remove_meta_box('postexcerpt', 'post', 'normal');
    }

    /**
     * Удаляет HTML теги, кроме разрешенных
     *
     * @param string $text
     * @return string
     */
    public function wp_trim_excerpt($text = '') {
        return strip_tags($text, '<a><strong><em><b><i><code><ul><ol><li><blockquote><del><ins><img><pre><code><>');
    }

    /**
     * Заменяет стандартное многоточие
     *
     * @return string
     */
    public function excerpt_more() {
        return '&hellip;';
    }

    /**
     * Выводит редактор цитаты после заголовка записи.
     *
     * @param $post
     */
    public function excerpt($post) {
        if ($post->post_type !== 'post') return;
        wp_editor(
            html_entity_decode($post->post_excerpt),
            'html-excerpt',
            [
                'teeny' => true,
                'quicktags' => true,
                'wpautop' => true,
                'media_buttons' => false,
                'textarea_rows' => 7,
                'textarea_name' => 'excerpt'
            ]
        );
    }
}

Затем добавьте в файл functions.php следующие строки:

require_once __DIR__ . '/excerpt.php';
$excerpt = new Excerpt();
30 сент. 2015 г. 15:32:01
Комментарии

не работает

woony woony
29 июн. 2023 г. 10:14:29