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.


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é.


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.