valore textarea wp_editor non aggiornato


16

Sto usando l' *_add_form_fieldsazione per aggiungere campi a una tassonomia personalizzata. Uno di questi campi è un wp_editor ().

Il problema che sto affrontando è che quando ho pubblicato l'editor di WordPress sulla pagina in questo modo:

wp_editor('test', 'mydescription', array('textarea_name' => 'my_description')); 

e poi se clicco nell'editor sulla pagina e modificare il valore predefinito dalla testa something elsealla $_POST['my_description']variabile è ancora impostatotest

Dovrei aggiungere un'impostazione aggiuntiva al mio editor? C'è un motivo per cui non riesco a modificare il valore dell'area di testo?

MODIFICARE

Di seguito è riportato un caso di test molto semplice che mostra ciò che sta accadendo. Inseriscilo nel tuo file Functions.php e quindi crea un nuovo tag . Il valore pubblicato 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();

MODIFICARE

Ciò si verifica SOLO quando si collega all'azione "Created_term". Se si allega a "editing_terms" funziona come previsto e penso che questo sia il risultato dell'utilizzo di ajax nella pagina dei termini di creazione ... Ho aggiornato il codice di prova per mostrarlo.


È cambiato per me: 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 )forse qualcos'altro nel tuo codice è un problema?
Rob Vermeer,

vedi seconda modifica. Sembra che ciò accada solo quando "aggiungi" un termine.
Mike,

Risposte:


21

TinyMCE <textarea> elemento non è inizialmente visibile dalla funzione di serializzazione utilizzata:

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

Dovrai chiamare tinyMCE.triggerSave() per renderlo visibile.

Di seguito è riportato un semplice frammento che dovrebbe fare il trucco:

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

Questo in un file esterno, accodato con wp_enqueue_script(); ha funzionato per il test che ho condotto.


1
Questo non funziona per me. Sembra che i dati vengano pubblicati, ALLORA viene attivato il codice della funzione clic.
Mike,

hai accattivato la sceneggiatura in testa? se lo accoda nel piè di pagina, verrà caricato dopo wp-script e sarebbe troppo tardi.
ungestaltbar,

invece di 'click' potresti effettivamente vincolarlo a $ ('# submit'). mousedown (...) :) in quel caso non dovrebbe importare dove e quando lo script viene caricato.
ungestaltbar,

Ha funzionato come un fascino grazie!
nitigyan il

4

Nella tua edited_termsfunzione devi salvare il valore e nella tua add_tag_form_fields devi sostituire il tuo testcon i dati salvati.

qualcosa di simile a:

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 di aggiungere campi extra di tutti i tipi ai tuoi tag / categorie o moduli di modifica della tassonomia personalizzati senza reinventare la ruota, dai un'occhiata a TAX Meta Class


Vedi il mio secondo commento, sembra che ciò avvenga solo quando si aggiunge un termine. E penso che questo sia il risultato usando ajax.
Mike,

@Mike cosa Ajax dove stai usando Ajax?
Bainternet,

Quando aggiungi una nuova categoria / termine WordPress utilizza ajax per pubblicare i dati e creare il nuovo termine. Per qualche motivo ciò non consente all'elemento wp_editor di avere il valore corretto. Prova il codice di prova nella domanda originale.
Mike,

1

Secondo il codice per wp_editor il primo argomento dovrebbe essere il contenuto. Quindi, piuttosto che "testare", dovresti $_POST['my_description']indicare se è quello che vorresti fosse il contenuto iniziale.


2
il problema non riguarda il contenuto visualizzato correttamente. È con la variabile pubblicata essere uguale al contenuto originale anche se si modifica il contenuto di textarea in qualcos'altro.
Mike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.