El valor del área de texto wp_editor no se actualiza

16

Estoy usando la *_add_form_fieldsacción para agregar campos a una taxonomía personalizada. Uno de esos campos es wp_editor ().

El problema al que me enfrento es que cuando imprimo 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 predeterminado de testa something elsela $_POST['my_description']variable, todavía se establece entest

¿Debo agregar una configuración adicional a mi editor? ¿Hay alguna razón por la que no puedo cambiar el valor del área de texto?

EDITAR

A continuación hay un caso de prueba muy simple que muestra que esto está sucediendo. Coloque esto en su archivo functions.php y luego cree una nueva etiqueta . El valor publicado 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();

EDITAR

Esto SOLO sucede cuando se adjunta a la acción "created_term". Si se adjunta a "edited_terms" funciona como se esperaba y creo que es el resultado de que ajax se utiliza en la página de términos de creación ... He actualizado el código de prueba para mostrar esto.

Miguel
fuente
Cambió para mí: ¿ Array ( [action] => add-tag [screen] => edit-post_tag [taxonomy] => post_tag [post_type] => post [_wpnonce_add-tag] => 4f7d3df228 [_wp_http_referer] => /wp-admin/edit-tags.php?taxonomy=post_tag [tag-name] => Test99 [slug] => [description] => [my_description] => something else )quizás algo más en tu código sea un problema?
Rob Vermeer
ver segunda edición. Parece que esto solo ocurre cuando "agrega" un término.
Mike

Respuestas:

21

El <textarea> elemento tinyMCE no se ve inicialmente por la función de serialización utilizada:

$.post(
    ajaxurl,
    $('#addtag').serialize(), function(r) {
        // Content here.
    }
});

Deberá llamar tinyMCE.triggerSave()para que sea visible.

A continuación se muestra un fragmento simple que debería hacer el truco:

jQuery('#submit').mousedown( function() {
    tinyMCE.triggerSave();
});

Esto en un archivo externo, en cola con wp_enqueue_script(); funcionó para la prueba que realicé.

ungestaltbar
fuente
1
Esto no funciona para mi. Parece que los datos están publicados, ENTONCES se activa su código de función de clic.
Mike
¿Enqueaste el guión en la cabeza? si lo coloca en el pie de página, se cargará después de wp-scripts y eso sería demasiado tarde.
ungestaltbar
en lugar de 'hacer clic', en realidad podría vincularlo a $ ('# submit'). mousedown (...) :) en ese caso, no debería importar dónde y cuándo se carga el script.
ungestaltbar
¡Trabajaron como un encanto, gracias!
nitigyan
4

En su edited_termsfunción necesita guardar el valor y en su add_tag_form_fields necesita reemplazar su testcon 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, si desea una forma mucho más fácil de agregar campos adicionales de todo tipo a sus etiquetas / categorías o formularios de edición de taxonomía personalizados sin reinventar la rueda, eche un vistazo a TAX Meta Class

Bainternet
fuente
Vea mi segundo comentario, parece que esto solo sucede al agregar un término. Y creo que esto es el resultado de usar ajax.
Mike
@ Mike, ¿qué Ajax, dónde estás usando Ajax?
Bainternet
Cuando agrega una nueva categoría / término, WordPress usa ajax para publicar los datos y crear el nuevo término. Por alguna razón, esto no permite que el elemento wp_editor tenga el valor correcto. Pruebe el código de prueba en la pregunta original.
Mike
1

Según el códice para wp_editor, el primer argumento debería ser el contenido. Entonces, en lugar de 'probar', debe poner $_POST['my_description']si eso es lo que le gustaría que fuera el contenido inicial.

ractoon
fuente
2
El problema no es que el contenido se muestre correctamente. Es con la variable publicada igual que el contenido original, incluso si cambia el contenido del área de texto a otra cosa.
Mike