wartość wp_editor textarea nie aktualizuje się

16

Korzystam z *_add_form_fieldsakcji, aby dodać pola do niestandardowej systematyki. Jednym z tych pól jest wp_editor ().

Problem, z którym się zmagam, polega na tym, że kiedy wypisuję edytor WordPress na stronie, to:

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

a następnie, jeśli kliknę w edytorze na stronie i zmienić domyślną wartość z testdo something elsetej $_POST['my_description']zmiennej jest nadal ustawiony natest

Czy powinienem dodawać dodatkowe ustawienia do mojego edytora? Czy istnieje powód, dla którego nie mogę zmienić wartości obszaru tekstowego?

EDYTOWAĆ

Poniżej znajduje się bardzo prosty przypadek testowy, który pokazuje to. Umieść to w pliku functions.php, a następnie utwórz nowy znacznik . Zaksięgowana wartość „my_description” nie zmieni się.

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

EDYTOWAĆ

Dzieje się tak TYLKO podczas dołączania do akcji „Created_term”. Jeśli podłączysz się do „edytowanych_termów”, działa zgodnie z oczekiwaniami i myślę, że jest to wynikiem użycia ajax na stronie tworzenia terminów ... Zaktualizowałem kod testowy, aby to pokazać.

Mikrofon
źródło
Zmieniło się to dla mnie: 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 )może coś innego w twoim kodzie jest problemem?
Rob Vermeer
patrz druga edycja. Wygląda na to, że dzieje się tak tylko wtedy, gdy „dodasz” termin.
Mike

Odpowiedzi:

21

<textarea>element tinyMCE jest początkowo niewidoczny dla używanej funkcji serializacji:

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

Musisz zadzwonić, tinyMCE.triggerSave()aby było widoczne.

Poniżej znajduje się prosty fragment, który powinien załatwić sprawę:

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

To w zewnętrznym pliku, w kolejce wp_enqueue_script(); zadziałało w teście, który przeprowadziłem.

ungestaltbar
źródło
1
To mi nie działa. Wygląda na to, że dane zostały zaksięgowane, a następnie kod funkcji kliknięcia zostanie wyzwolony.
Mike
czy zapisałeś skrypt w głowie? jeśli umieścisz go w stopce, zostanie on załadowany po skryptach wp i byłoby to za późno.
ungestaltbar
zamiast „kliknięcia” możesz powiązać go z $ („# upload”). mousedown (...) :) w takim przypadku nie powinno mieć znaczenia, gdzie i kiedy skrypt zostanie załadowany.
ungestaltbar
Działa jak urok dzięki!
nitigyan
4

W swojej edited_termsfunkcji musisz zapisać wartość, aw swoim add_tag_form_fields musisz zastąpić testją zapisanymi danymi.

coś jak:

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

Teraz, jeśli chcesz o wiele łatwiejszego sposobu dodawania dodatkowych pól wszystkich typów do tagów / kategorii lub niestandardowych formularzy edycji taksonomii bez ponownego wymyślania koła, spójrz na TAX Meta Class

Bainternet
źródło
Zobacz mój drugi komentarz, wygląda na to, że dzieje się tak tylko podczas dodawania terminu. I myślę, że jest to wynikiem użycia ajax.
Mike
@Mike jaki Ajax używasz Ajax?
Bainternet
Po dodaniu nowej kategorii / terminu WordPress używa ajax do publikowania danych i tworzenia nowego terminu. Z jakiegoś powodu nie pozwala to, aby element wp_editor miał poprawną wartość. Wypróbuj kod testowy z oryginalnego pytania.
Mike
1

Zgodnie z kodeksem dla wp_editor pierwszym argumentem powinna być treść. Zamiast „testować” powinieneś postawić, $_POST['my_description']jeśli taka jest początkowa treść.

ractoon
źródło
2
problem nie polega na tym, że treść wyświetla się poprawnie. Jest tak, gdy opublikowana zmienna jest taka sama jak oryginalna treść, nawet jeśli zmienisz zawartość pola tekstowego na coś innego.
Mike