wp_editor textarea value wird nicht aktualisiert


16

Ich benutze die *_add_form_fieldsAktion, um einer benutzerdefinierten Taxonomie Felder hinzuzufügen. Eines dieser Felder ist ein wp_editor ().

Das Problem, dem ich gegenüberstehe, ist, dass wenn ich den WordPress-Editor wie folgt auf der Seite ausgebe:

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

und wenn ich dann im editor auf die seite klicke und den voreingestellten wert von testauf something elsedie $_POST['my_description']variable ändere wird immer noch auf gesetzttest

Sollte ich meinem Editor eine zusätzliche Einstellung hinzufügen? Gibt es einen Grund, warum ich den Wert des Textbereichs nicht ändern kann?

BEARBEITEN

Unten sehen Sie einen sehr einfachen Testfall, der dies zeigt. Fügen Sie dies in Ihre functions.php-Datei ein und erstellen Sie ein neues Tag . Der eingegebene Wert für "my_description" wird nicht geändert.

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

BEARBEITEN

Dies geschieht NUR beim Anhängen an die Aktion "created_term". Wenn Sie an "edited_terms" anhängen, funktioniert es wie erwartet und ich denke, dies ist ein Ergebnis der Verwendung von Ajax auf der Seite zum Erstellen von Begriffen ... Ich habe den Testcode aktualisiert, um dies anzuzeigen.


Es hat sich für mich geändert: 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 )Vielleicht ist etwas anderes in deinem Code ein Problem?
Rob Vermeer

Siehe zweite Bearbeitung. Es scheint, dass dies nur geschieht, wenn Sie einen Begriff "hinzufügen".
Mike

Antworten:


21

Das tinyMCE- <textarea> Element wird von der verwendeten Serialisierungsfunktion anfangs nicht gesehen:

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

Sie müssen anrufen tinyMCE.triggerSave(), um es sichtbar zu machen.

Unten ist ein einfaches Snippet, das den Trick machen sollte:

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

Dies in einer externen Datei, die mit wp_enqueue_script(); es funktionierte für den Test, den ich durchgeführt habe.


1
Das funktioniert bei mir nicht. Es scheint, dass die Daten gebucht werden, DANN wird Ihr Klick-Funktionscode ausgelöst.
Mike

Hast du das Drehbuch in den Kopf gestellt? Wenn Sie es in der Fußzeile einreihen, wird es nach wp-Skripten geladen und das wäre zu spät.
ungestaltbar

Anstatt 'click' könnte man es auch an $ ('# submit') binden. mousedown (...) :) In diesem Fall sollte es egal sein, wo und wann das Skript geladen wird.
ungestaltbar

Arbeitete wie ein Zauber, danke!
Nitigyan

4

In Ihrer edited_termsFunktion müssen Sie den Wert speichern und in Ihrer add_tag_form_fields durch testdie gespeicherten Daten ersetzen .

etwas wie:

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

Wenn Sie Ihren Tags / Kategorien oder benutzerdefinierten Taxonomiebearbeitungsformularen zusätzliche Felder aller Art hinzufügen möchten, ohne das Rad neu zu erfinden, schauen Sie sich das an TAX Meta Class


Siehe meinen zweiten Kommentar, es scheint, dass dies nur passiert, wenn ein Begriff hinzugefügt wird. Und ich denke, dies ist ein Ergebnis der Verwendung von Ajax.
Mike

@Mike was Ajax wo benutzt du Ajax?
Bainternet

Wenn Sie eine neue Kategorie / einen neuen Begriff hinzufügen, verwendet WordPress Ajax, um die Daten zu veröffentlichen und den neuen Begriff zu erstellen. Aus irgendeinem Grund kann das Element wp_editor nicht den richtigen Wert haben. Versuchen Sie den Testcode in der ursprünglichen Frage.
Mike

1

Nach dem Codex für wp_editor sollte das erste Argument der Inhalt sein. Anstatt also zu testen, sollten Sie festlegen, $_POST['my_description']ob dies der ursprüngliche Inhalt ist.


2
Das Problem liegt nicht darin, dass der Inhalt korrekt angezeigt wird. Dies ist der Fall, wenn die veröffentlichte Variable mit dem ursprünglichen Inhalt identisch ist, auch wenn Sie den Textbereichsinhalt in einen anderen ändern.
Mike
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.