Valore di wp_editor textarea non si aggiorna

20 gen 2012, 20:45:57
Visualizzazioni: 14.4K
Voti: 17

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.

2
Commenti

Per me è cambiato: 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] => qualcos'altro ), forse c'è qualche altro problema nel tuo codice?

Rob Vermeer Rob Vermeer
24 gen 2012 00:50:50

vedi la seconda modifica. Sembra che questo accada solo quando "aggiungi" un termine.

Mike Mike
24 gen 2012 18:58:47
Tutte le risposte alla domanda 3
4
25

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.

26 gen 2012 17:51:41
Commenti

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

Mike Mike
26 gen 2012 21:47:43

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

ungestaltbar ungestaltbar
26 gen 2012 22:15:53

invece di 'click' potresti legarlo a $('#submit').mousedown( ... ) :)

in questo caso non dovrebbe importare dove e quando lo script viene caricato.

ungestaltbar ungestaltbar
26 gen 2012 22:29:48

Ha funzionato perfettamente, grazie!

nitigyan nitigyan
22 mar 2019 21:49:09
3

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

24 gen 2012 01:36:23
Commenti

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.

Mike Mike
24 gen 2012 18:59:18

@Mike quale Ajax, dove stai usando Ajax?

Bainternet Bainternet
24 gen 2012 19:47:26

Quando aggiungi una nuova categoria/termine, WordPress utilizza ajax per inviare i dati e creare il nuovo termine. Per qualche motivo questo non permette all'elemento wp_editor di avere il valore corretto. Prova il codice di test nella domanda originale.

Mike Mike
24 gen 2012 21:01:50
1

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.

20 gen 2012 21:25:44
Commenti

il problema non è che il contenuto viene visualizzato correttamente. È che la variabile pubblicata rimane la stessa del contenuto originale anche se si modifica il contenuto della textarea con qualcos'altro.

Mike Mike
20 gen 2012 21:38:12