Valoarea textarea din wp_editor nu se actualizează

20 ian. 2012, 20:45:57
Vizualizări: 14.4K
Voturi: 17

Folosesc acțiunea *_add_form_fields pentru a adăuga câmpuri la o taxonomie personalizată. Unul dintre aceste câmpuri este un wp_editor().

Problema pe care o întâmpin este că atunci când afișez editorul WordPress pe pagină astfel:

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

și apoi dacă dau click în editor pe pagină și schimb valoarea implicită de la test la altceva, variabila $_POST['my_description'] rămâne setată la test.

Trebuie să adaug setări suplimentare editorului meu? Există vreun motiv pentru care nu pot schimba valoarea textarea-ului?

EDITARE

Mai jos este un caz de test foarte simplu care arată această problemă. Puneți acest cod în fișierul functions.php și apoi creați un nou tag. Valoarea postată pentru 'my_description' nu se va schimba.

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();

EDITARE

Acest lucru se întâmplă DOAR când atașăm la acțiunea "created_term". Dacă atașați la "edited_terms" funcționează așa cum era de așteptat, și cred că aceasta este o consecință a faptului că se folosește ajax pe pagina de creare a termenului... Am actualizat codul de test pentru a arăta acest lucru.

2
Comentarii

Pentru mine s-a schimbat: 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 ), poate altceva în codul tău este o problemă?

Rob Vermeer Rob Vermeer
24 ian. 2012 00:50:50

vezi a doua editare. Se pare că acest lucru se întâmplă doar când "adăugi" un termen.

Mike Mike
24 ian. 2012 18:58:47
Toate răspunsurile la întrebare 3
4
25

Elementul tinyMCE <textarea> inițial nu este vizibil pentru funcția de serializare utilizată:

$.post(
    ajaxurl,
    $('#addtag').serialize(), function(r) {
        // Conținut aici.
    }
});

Va trebui să apelați tinyMCE.triggerSave() pentru a-l face vizibil.

Mai jos este un fragment simplu care ar trebui să rezolve problema:

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

Acest cod se află într-un fișier extern, încărcat cu wp_enqueue_script(); a funcționat în testele pe care le-am efectuat.

26 ian. 2012 17:51:41
Comentarii

Acest lucru nu funcționează pentru mine. Se pare că datele sunt trimise, APOI codul tău de funcție click este declanșat.

Mike Mike
26 ian. 2012 21:47:43

ai încărcat scriptul în head? dacă îl încarci în footer, acesta va fi încărcat după wp-scripts și ar fi prea târziu.

ungestaltbar ungestaltbar
26 ian. 2012 22:15:53

în loc de 'click' ai putea să-l legi la $('#submit').mousedown( ... ) :)

în acest caz, nu ar trebui să conteze unde și când este încărcat scriptul.

ungestaltbar ungestaltbar
26 ian. 2012 22:29:48

A funcționat perfect, mulțumesc!

nitigyan nitigyan
22 mar. 2019 21:49:09
3

În funcția ta edited_terms trebuie să salvezi valoarea, iar în funcția add_tag_form_fields trebuie să înlocuiești test cu datele salvate.

Ceva de genul:

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();

Dacă dorești o metodă mult mai ușoară de a adăuga câmpuri suplimentare de toate tipurile la formularele de editare a etichetelor/categoriilor sau a taxonomiilor personalizate fără a reinventa roata, aruncă o privire la TAX Meta Class

24 ian. 2012 01:36:23
Comentarii

Vezi al doilea meu comentariu, se pare că acest lucru se întâmplă doar la adăugarea unui termen. Și cred că acest lucru este rezultatul utilizării ajax.

Mike Mike
24 ian. 2012 18:59:18

@Mike ce Ajax unde folosești Ajax?

Bainternet Bainternet
24 ian. 2012 19:47:26

Când adaugi o nouă categorie/termen, WordPress folosește ajax pentru a trimite datele și a crea noul termen. Din anumite motive, acest lucru nu permite elementului wp_editor să aibă valoarea corectă. Încearcă codul de test din întrebarea originală.

Mike Mike
24 ian. 2012 21:01:50
1

Conform codex-ului pentru wp_editor, primul argument ar trebui să fie conținutul. Deci, în loc de 'test', ar trebui să pui $_POST['my_description'] dacă acesta este conținutul inițial pe care dorești să îl afișezi.

20 ian. 2012 21:25:44
Comentarii

problema nu este cu conținutul care apare corect. Este cu variabila postată care rămâne aceeași cu conținutul original chiar dacă schimbi conținutul textarea-ului cu altceva.

Mike Mike
20 ian. 2012 21:38:12