wp_editor textarea el valor no se actualiza

14

Estoy usando la acción *_add_form_fields 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 de esta manera:

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 test a something else , la variable $_POST['my_description'] todavía está configurada en test

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

EDIT

A continuación se muestra un caso de prueba muy simple que muestra que esto está sucediendo. Coloca esto en tu archivo functions.php y luego crea una nueva etiqueta . El valor publicado para 'mi_descripción "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();

EDIT

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

    
pregunta Mike 20.01.2012 - 19:45

3 respuestas

19
El elemento

tinyMCE <textarea> no se ve inicialmente por la función serializada utilizada:

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

Deberá llamar a tinyMCE.triggerSave() para que esté visible.

A continuación hay 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 he realizado.

    
respondido por el ungestaltbar 26.01.2012 - 16:51
4

En su función edited_terms necesita guardar el valor y en su add_tag_form_fields necesita reemplazar su 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, 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

    
respondido por el Bainternet 24.01.2012 - 00:36
1

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

    
respondido por el ractoon 20.01.2012 - 20:25

Lea otras preguntas en las etiquetas