Valore di wp_editor textarea non si aggiorna
Sto usando l'azione *_add_form_fields
per aggiungere campi a una tassonomia personalizzata. Uno di questi campi è un wp_editor().
Il problema che sto riscontrando è che quando visualizzo l'editor di WordPress nella pagina in questo modo:
wp_editor('test', 'mydescription', array('textarea_name' => 'my_description'));
e poi se clicco nell'editor sulla pagina e cambio il valore predefinito da test
a qualcos'altro
, la variabile $_POST['my_description']
rimane impostata a test
Dovrei aggiungere un'impostazione aggiuntiva al mio editor? C'è un motivo per cui non posso cambiare il valore della textarea?
MODIFICA
Di seguito è riportato un caso di test molto semplice che mostra questo comportamento. Inserisci questo nel tuo file functions.php e poi crea un nuovo tag. Il valore postato per 'my_description' non cambierà.
class Test{
function __construct() {
add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));
add_action('created_term', array($this, 'created_term'));
}
function add_tag_form_fields($tag){
if ( current_user_can( 'publish_posts' ) ): ?>
<div class="form-field">
<?php wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); ?>
</div>
<?php
}
function created_term($tag){
echo '<pre>';
print_r($_POST);
echo '</pre>';
die();
}
}
new Test();
MODIFICA
Questo accade SOLO quando ci si collega all'azione "created_term". Se ci si collega a "edited_terms" funziona come previsto e penso che sia il risultato dell'uso di ajax nella pagina di creazione del termine... Ho aggiornato il codice di test per mostrare questo.

L'elemento tinyMCE <textarea>
inizialmente non viene visto dalla funzione serialize utilizzata:
$.post(
ajaxurl,
$('#addtag').serialize(), function(r) {
// Contenuto qui.
}
});
Sarà necessario chiamare tinyMCE.triggerSave()
per renderlo visibile.
Di seguito è riportato un semplice snippet che dovrebbe risolvere il problema:
jQuery('#submit').mousedown( function() {
tinyMCE.triggerSave();
});
Questo codice va inserito in un file esterno, accodato con wp_enqueue_script()
; ha funzionato nei test che ho condotto.

Non funziona per me. Sembra che i dati vengano inviati, POI viene attivato il codice della tua funzione click.

hai accodato lo script nell'head? Se lo accodi nel footer, verrà caricato dopo wp-scripts e sarebbe troppo tardi.

invece di 'click' potresti legarlo a $('#submit').mousedown( ... ) :)
in questo caso non dovrebbe importare dove e quando lo script viene caricato.

Nella tua funzione edited_terms
devi salvare il valore e nella tua add_tag_form_fields
devi sostituire il tuo test
con i dati salvati.
Qualcosa come:
class Test{
function __construct() {
//do_action('add_tag_form_fields', $taxonomy);
add_action('add_tag_form_fields', array($this, 'add_tag_form_fields'));
//do_action("edited_terms", $term_id, $tt_id, $taxonomy);
add_action('edited_terms', array($this, 'edited_terms'));
}
function add_tag_form_fields($term){
if ( current_user_can( 'publish_posts' ) ): ?>
<div class="form-field">
<?php
$saved = get_option('termmeta_'.$term->term_id);
$saved = (empty($saved))? 'test': $saved;
wp_editor($saved, 'mydescription', array('textarea_name' => 'my_description')); ?>
</div>
<?php
}
function edited_terms($term_id){
if (isset($_POST['mydescription'])){
update_option('termmeta_'.$term_id,$_POST['mydescription']);
}
}
}
new Test();
Ora se vuoi un modo molto più semplice per aggiungere campi extra di tutti i tipi ai tuoi tag/categorie o moduli di modifica delle tassonomie personalizzate senza reinventare la ruota dai un'occhiata a TAX Meta Class

Vedi il mio secondo commento, sembra che questo accada solo quando si aggiunge un termine. E penso che sia il risultato dell'uso di ajax.

Secondo il codex per wp_editor il primo argomento dovrebbe essere il contenuto. Quindi invece di 'test' dovresti inserire $_POST['my_description']
se è quello che vuoi che sia il contenuto iniziale.
