Añadir un editor de texto enriquecido al extracto
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 ( '<', '>', '"', '&', ' ', '&nbsp;' )
, array ( '<', '>', '"', '&', ' ', ' ' )
, $str
);
}
}
Guarda este código en un plugin o en el archivo functions.php
de tu tema.

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

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

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".

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.

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.

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' );

Solución para añadir un editor WYSIWYG de extracto justo después del título del post.
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 '…';
}
/**
* 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();
