El valor del textarea en wp_editor no se actualiza al crear términos
Estoy usando la acción *_add_form_fields
para agregar campos a una taxonomía personalizada. Uno de esos campos es un wp_editor().
El problema que enfrento es que cuando muestro el editor de WordPress en la página así:
wp_editor('test', 'mydescription', array('textarea_name' => 'my_description'));
y luego si hago clic en el editor en la página y cambio el valor por defecto de test
a algo más
la variable $_POST['my_description']
sigue establecida en test
¿Debería agregar una configuración adicional a mi editor? ¿Hay alguna razón por la que no pueda cambiar el valor del textarea?
EDITADO
A continuación un caso de prueba muy simple que muestra esto ocurriendo. Coloca esto en tu archivo functions.php y luego crea una nueva etiqueta. El valor enviado para 'my_description' no cambiará.
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();
EDITADO
Esto SOLO ocurre cuando se adjunta a la acción "created_term". Si lo adjuntas a "edited_terms" funciona como se espera y creo que esto es resultado del uso de ajax en la página de creación de términos... He actualizado el código de prueba para mostrar esto.

El elemento <textarea>
de tinyMCE inicialmente no es detectado por la función de serialización utilizada:
$.post(
ajaxurl,
$('#addtag').serialize(), function(r) {
// Contenido aquí.
}
});
Necesitarás llamar a tinyMCE.triggerSave()
para hacerlo visible.
A continuación, un fragmento simple que debería solucionarlo:
jQuery('#submit').mousedown( function() {
tinyMCE.triggerSave();
});
Esto en un archivo externo, encolado con wp_enqueue_script()
; funcionó en las pruebas que he realizado.

Esto no funciona para mí. Parece que los datos se publican, LUEGO se activa tu código de función de clic.

¿Encolaste el script en el head? Si lo encolas en el footer, se cargará después de wp-scripts y sería demasiado tarde.

en lugar de 'click' podrías vincularlo a $('#submit').mousedown( ... ) :)
en ese caso no debería importar dónde ni cuándo se cargue el script.

En tu función edited_terms
necesitas guardar el valor y en tu add_tag_form_fields
debes reemplazar tu test
con los datos guardados.
Algo como:
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();
Ahora bien, si quieres una forma mucho más fácil de añadir campos adicionales de todo tipo a tus etiquetas/categorías o formularios de edición de taxonomías personalizadas sin reinventar la rueda, echa un vistazo a TAX Meta Class

Mira mi segundo comentario, parece que esto solo ocurre al agregar un término. Y creo que es resultado de que usa ajax.

Según el codex para wp_editor, el primer argumento debe ser el contenido. Así que en lugar de 'test' deberías poner $_POST['mi_descripcion']
si eso es lo que te gustaría que fuera el contenido inicial.
