Adăugarea unui editor de text avansat în Excerpt
Doar înlocuiți output-ul implicit. Asigurați-vă că decodificați excerpt-ul înainte de a-l trimite la editor:
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );
/**
* Înlocuiește editorul implicit de excerpt cu TinyMCE.
*/
class T5_Richtext_Excerpt
{
/**
* Înlocuiește cutiile meta.
*
* @return void
*/
public static function switch_boxes()
{
if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
{
return;
}
remove_meta_box(
'postexcerpt' // ID
, '' // Screen, empty to support all post types
, 'normal' // Context
);
add_meta_box(
'postexcerpt2' // Reusing just 'postexcerpt' doesn't work.
, __( 'Excerpt' ) // Title
, array ( __CLASS__, 'show' ) // Display function
, null // Screen, we use all screens with meta boxes.
, 'normal' // Context
, 'core' // Priority
);
}
/**
* Output pentru cutia meta.
*
* @param object $post
* @return void
*/
public static function show( $post )
{
?>
<label class="screen-reader-text" for="excerpt"><?php
_e( 'Excerpt' )
?></label>
<?php
// Folosim numele implicit, 'excerpt', ca să nu trebuiască să ne ocupăm de
// salvarea, alte filtre etc.
wp_editor(
self::unescape( $post->post_excerpt ),
'excerpt',
array (
'textarea_rows' => 15
, 'media_buttons' => FALSE
, 'teeny' => TRUE
, 'tinymce' => TRUE
)
);
}
/**
* Excerpt-ul este de obicei codat. Acest lucru strică editorul HTML.
*
* @param string $str
* @return string
*/
public static function unescape( $str )
{
return str_replace(
array ( '<', '>', '"', '&', ' ', '&nbsp;' )
, array ( '<', '>', '"', '&', ' ', ' ' )
, $str
);
}
}
Salvați acest cod într-un plugin sau în functions.php
al temei dumneavoastră.

Funcționează perfect în versiunea 5.1 (februarie 2019), mulțumesc!

Încă funcționează în 2020, chiar și după Gutenberg (deși am testat doar cu plugin-ul "Classic Editor" activat)

Încă funcționează în 5.8.1 (septembrie 2021). Mă întreb cum să adaug și butonul "Adaugă Media".

Am descoperit că acest fragment de cod pare să intre în conflict cu WooCommerce, făcând imposibilă actualizarea "Descrierii scurte a produsului". Modificările pur și simplu nu se salvează. Mi-a luat ceva timp să realizez asta, așa că aș vrea să atenționez și pe alții.

O modalitate simplă este să folosești pluginul Rich Text Excerpt
Plugin-ul utilizează funcția wp_editor pentru a genera un editor de text avansat pentru rezumatele paginilor/articolelor, deci va funcționa doar în WordPress 3.3 sau versiuni mai noi.

poate fi necesar să folosești funcția wp_editor
pentru a obține un editor avansat, apoi ar trebui să elimini orice funcții de sanitizare cu get_post_meta
(sau update_post_meta
), iar apoi să utilizezi funcția htmlspecialchars_decode
pentru a obține conținutul avansat..
urmărește acest principiu:
add_action( 'add_meta_boxes', 'adding_a_new_metaabox' );
function adding_a_new_metaabox()
{
add_meta_box('html_myid_31_section', 'TITLU Salutare', 'my_output_funct');
}
function my_output_funct( $post )
{
//deci, nu este nevoie să folosești esc_attr în fața lui 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' );

Următoarea soluție adaugă un editor wysiwyg pentru excerpt imediat după titlul postului.
Adăugați următoarea clasă în proiectul WordPress ca 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);
}
/**
* Elimină metabox-ul din postare
*/
public function remove_excerpt_metabox() {
remove_meta_box('postexcerpt', 'post', 'normal');
}
/**
* Elimină tag-urile 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><>');
}
/**
* Semnul "mai mult"...
*
* @return string
*/
public function excerpt_more() {
return '…';
}
/**
* Editorul de excerpt după titlul postării.
*
* @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'
]
);
}
}
Apoi adăugați în fișierul functions.php
următoarele linii:
require_once __DIR__ . '/excerpt.php';
$excerpt = new Excerpt();
