Come aggiungere un editor di testo avanzato al riassunto in WordPress
Sostituisci semplicemente l'output predefinito. Assicurati di rimuovere l'escape dall'excerpt prima di inviarlo all'editor:
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );
/**
* Sostituisce l'editor predefinito dell'excerpt con TinyMCE.
*/
class T5_Richtext_Excerpt
{
/**
* Sostituisce le meta box.
*
* @return void
*/
public static function switch_boxes()
{
if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
{
return;
}
remove_meta_box(
'postexcerpt' // ID
, '' // Screen, vuoto per supportare tutti i tipi di post
, 'normal' // Contesto
);
add_meta_box(
'postexcerpt2' // Riutilizzare solo 'postexcerpt' non funziona.
, __( 'Excerpt' ) // Titolo
, array ( __CLASS__, 'show' ) // Funzione di visualizzazione
, null // Screen, utilizziamo tutti gli screen con meta box.
, 'normal' // Contesto
, 'core' // Priorità
);
}
/**
* Output per la meta box.
*
* @param object $post
* @return void
*/
public static function show( $post )
{
?>
<label class="screen-reader-text" for="excerpt"><?php
_e( 'Excerpt' )
?></label>
<?php
// Utilizziamo il nome predefinito, 'excerpt', così non dobbiamo preoccuparci
// del salvataggio, altri filtri ecc.
wp_editor(
self::unescape( $post->post_excerpt ),
'excerpt',
array (
'textarea_rows' => 15
, 'media_buttons' => FALSE
, 'teeny' => TRUE
, 'tinymce' => TRUE
)
);
}
/**
* L'excerpt è solitamente con escape. Questo rompe l'editor HTML.
*
* @param string $str
* @return string
*/
public static function unescape( $str )
{
return str_replace(
array ( '<', '>', '"', '&', ' ', '&nbsp;' )
, array ( '<', '>', '"', '&', ' ', ' ' )
, $str
);
}
}
Salva questo codice in un plugin o nel file functions.php
del tuo tema.

Funziona perfettamente nella versione 5.1 (febbraio 2019), grazie!

Funziona ancora nel 2020, anche dopo Gutenberg (anche se l'ho testato solo con il plugin "Classic Editor" attivato)

Ancora funzionante nella versione 5.8.1 (settembre 2021). Mi chiedo come aggiungere anche il pulsante Aggiungi media.

Ho scoperto che questo frammento di codice sembra essere in conflitto con WooCommerce poiché rende impossibile aggiornare la "Descrizione breve del prodotto". Le modifiche semplicemente non vengono salvate. Mi ci è voluto un po' per capirlo, quindi vorrei avvisare gli altri.

Un modo semplice è utilizzare il plugin Rich Text Excerpt
Il plugin utilizza la funzione wp_editor per generare un editor di testo avanzato per i riassunti di pagine/post, quindi funzionerà solo su WordPress 3.3 o versioni successive.

potresti aver bisogno di usare la funzione wp_editor
per ottenere un editor avanzato, poi dovresti rimuovere qualsiasi funzione di sanitizzazione con get_post_meta
(o update_post_meta
), quindi dovresti usare la funzione htmlspecialchars_decode
per ottenere il contenuto avanzato..
guarda questo principio:
add_action( 'add_meta_boxes', 'adding_a_new_metaabox' );
function adding_a_new_metaabox()
{
add_meta_box('html_myid_31_section', 'TITOLO Ciao', 'my_output_funct');
}
function my_output_funct( $post )
{
//quindi, non è necessario usare esc_attr davanti a 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' );

Segui questa soluzione per aggiungere un editor wysiwyg per l'excerpt subito dopo il titolo del post.
Aggiungi la seguente classe al tuo progetto WordPress come 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);
}
/**
* Rimuove il metabox dal post
*/
public function remove_excerpt_metabox() {
remove_meta_box('postexcerpt', 'post', 'normal');
}
/**
* Rimuove i tag
*
* @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><>');
}
/**
* Puntini di sospensione...
*
* @return string
*/
public function excerpt_more() {
return '…';
}
/**
* Editor excerpt dopo il titolo 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'
]
);
}
}
Poi aggiungi al file functions.php
le seguenti righe:
require_once __DIR__ . '/excerpt.php';
$excerpt = new Excerpt();
