Añadir un editor de texto enriquecido al extracto

12 jul 2012, 12:45:59
Vistas: 15.7K
Votos: 8

Necesito añadir al campo de extracto el editor TinyMCE Advanced, ¿alguna idea?

Tengo el plugin qTranslate (multilenguaje), y es imposible conectar el extracto con este plugin y un editor.

Gracias

0
Todas las respuestas a la pregunta 4
5
16

Simplemente reemplaza la salida predeterminada. Asegúrate de deshacer el escape del extracto antes de enviarlo al editor:

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

/**
 * Reemplaza el editor de extracto predeterminado con TinyMCE.
 */
class T5_Richtext_Excerpt
{
    /**
     * Reemplaza las meta cajas.
     *
     * @return void
     */
    public static function switch_boxes()
    {
        if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
        {
            return;
        }

        remove_meta_box(
            'postexcerpt' // ID
        ,   ''            // Pantalla, vacío para soportar todos los tipos de entrada
        ,   'normal'      // Contexto
        );

        add_meta_box(
            'postexcerpt2'     // Reutilizar solo 'postexcerpt' no funciona.
        ,   __( 'Extracto' )  // Título
        ,   array ( __CLASS__, 'show' ) // Función de visualización
        ,   null              // Pantalla, usamos todas las pantallas con meta cajas.
        ,   'normal'          // Contexto
        ,   'core'            // Prioridad
        );
    }

    /**
     * Salida para la meta caja.
     *
     * @param  object $post
     * @return void
     */
    public static function show( $post )
    {
    ?>
        <label class="screen-reader-text" for="excerpt"><?php
        _e( 'Extracto' )
        ?></label>
        <?php
        // Usamos el nombre predeterminado, 'excerpt', para no tener que preocuparnos por
        // guardar, otros filtros, etc.
        wp_editor(
            self::unescape( $post->post_excerpt ),
            'excerpt',
            array (
            'textarea_rows' => 15
        ,   'media_buttons' => FALSE
        ,   'teeny'         => TRUE
        ,   'tinymce'       => TRUE
            )
        );
    }

    /**
     * El extracto normalmente tiene escape. Esto rompe el editor HTML.
     *
     * @param  string $str
     * @return string
     */
    public static function unescape( $str )
    {
        return str_replace(
            array ( '&lt;', '&gt;', '&quot;', '&amp;', '&nbsp;', '&amp;nbsp;' )
        ,   array ( '<',    '>',    '"',      '&',     ' ', ' ' )
        ,   $str
        );
    }
}

Editor de extracto enriquecido en WordPress

Guarda este código en un plugin o en el archivo functions.php de tu tema.

12 jul 2012 20:15:26
Comentarios

¡Gracias! Sigue funcionando perfectamente en 2018 con WP 4.9.x :)

moped moped
13 jun 2018 15:05:59

Funciona perfectamente en la versión 5.1 (febrero 2019), ¡gracias!

Mayur Chauhan Mayur Chauhan
25 feb 2019 00:33:26

Sigue funcionando en 2020, incluso después de Gutenberg (aunque solo lo probé con el plugin "Classic Editor" activado)

squarecandy squarecandy
1 feb 2020 04:59:41

Todavía funciona en la versión 5.8.1 (septiembre 2021). Me pregunto cómo añadir también el botón "Añadir medios".

A. D'Alfonso A. D'Alfonso
25 sept 2021 13:16:19

He descubierto que este fragmento de código parece entrar en conflicto con WooCommerce, ya que hace imposible actualizar la "Descripción corta del producto". Los cambios simplemente no se guardan. Me tomó un tiempo descubrir esto, así que me gustaría advertir a otros.

Tomas Eklund Tomas Eklund
25 oct 2022 12:47:14
3

Una forma sencilla es utilizar el plugin Rich Text Excerpt

El plugin utiliza la función wp_editor para generar un editor de texto enriquecido para los extractos de páginas/entradas, por lo que solo funcionará en WordPress 3.3 o superior.

12 jul 2012 12:57:24
Comentarios

Lo intenté, pero es incompatible con el plugin qTranslate, ¿alguna idea para hacerlo funcionar?

Marta Marta
12 jul 2012 13:12:04

Voy a investigarlo.

Pontus Abrahamsson Pontus Abrahamsson
12 jul 2012 13:36:34

¿Alguna idea de por qué el extracto no es un cuadro de texto enriquecido por defecto?

urok93 urok93
22 ago 2012 16:45:06
1

Puede que necesites usar la función wp_editor para obtener un editor enriquecido, luego deberías eliminar cualquier función de saneamiento con get_post_meta (o update_post_meta), y luego usar la función htmlspecialchars_decode para obtener el contenido enriquecido.

Revisa este principio:

add_action( 'add_meta_boxes', 'adding_a_new_metaabox' );                
function adding_a_new_metaabox() 
    {   
        add_meta_box('html_myid_31_section', 'TÍTULO Hola', 'my_output_funct');
    }

function my_output_funct( $post ) 
    {
    //así que no es necesario usar esc_attr delante de 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 nov 2013 02:02:42
Comentarios

Por favor agrega una explicación a tu respuesta: ¿por qué eso podría resolver el problema?

fuxia fuxia
29 nov 2013 02:46:05
1

Solución para añadir un editor WYSIWYG de extracto justo después del título del post.

Extracto

Añade la siguiente clase a tu proyecto WordPress como 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);
    }

    /**
     * Elimina el metabox del post
     */
    public function remove_excerpt_metabox() {
        remove_meta_box('postexcerpt', 'post', 'normal');
    }

    /**
     * Elimina etiquetas 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><>');
    }

    /**
     * Signo de continuar...
     *
     * @return string
     */
    public function excerpt_more() {
        return '&hellip;';
    }

    /**
     * Editor de extracto después del título del post.
     *
     * @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'
            ]
        );
    }
}

Luego añade al archivo functions.php las siguientes líneas:

require_once __DIR__ . '/excerpt.php';
$excerpt = new Excerpt();
30 sept 2015 15:32:01
Comentarios

no parece funcionar

woony woony
29 jun 2023 10:14:29