wp_editor textarea valeur non mise à jour

14

J'utilise l'action *_add_form_fields pour ajouter des champs à une taxonomie personnalisée. Un de ces champs est un wp_editor ().

Le problème auquel je suis confronté est que lorsque je publie l'éditeur WordPress sur la page, de la manière suivante:

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

puis si je clique dans l'éditeur sur la page et que je change la valeur par défaut de test à something else , la variable $_POST['my_description'] est toujours définie sur test

Devrais-je ajouter un paramètre supplémentaire à mon éditeur? Existe-t-il une raison pour laquelle je ne peux pas modifier la valeur de la zone de texte?

MODIFIER

Vous trouverez ci-dessous un cas de test très simple qui montre ce qui se passe. Placez-le dans votre fichier functions.php, puis créez une nouvelle balise . La valeur affichée pour 'ma_description "ne changera pas.

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

MODIFIER

Ceci se produit UNIQUEMENT lors de l'attachement à l'action "created_term". Si vous attachez à "edited_terms", cela fonctionnera comme prévu et je pense que cela résulte de l'utilisation d'ajax sur la page de création du terme ... J'ai mis à jour le code de test pour l'afficher.

    
posée Mike 20.01.2012 - 19:45

3 réponses

19

tinyMCE L'élément <textarea> est initialement invisible par la fonction de sérialisation utilisée:

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

Vous devrez appeler tinyMCE.triggerSave() pour le rendre visible.

Vous trouverez ci-dessous un extrait de code qui devrait faire l'affaire:

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

Ceci dans un fichier externe, mis en file d'attente avec wp_enqueue_script() ; cela a fonctionné pour le test que j'ai effectué.

    
réponse donnée ungestaltbar 26.01.2012 - 16:51
4

Dans votre fonction edited_terms , vous devez enregistrer la valeur et dans votre add_tag_form_fields vous devez remplacer votre test par les données enregistrées.

quelque chose comme:

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

Maintenant, si vous souhaitez ajouter un moyen beaucoup plus simple d'ajouter des champs supplémentaires de tous types à vos balises / catégories ou à des formulaires de modification de taxonomie personnalisés sans réinventer la roue, consultez TAX Meta Class

    
réponse donnée Bainternet 24.01.2012 - 00:36
1

Selon le codex de wp_editor , le premier argument devrait être le contenu. Donc, plutôt que de "tester", vous devriez mettre $_POST['my_description'] si c'est ce que vous souhaitez que le contenu initial soit.

    
réponse donnée ractoon 20.01.2012 - 20:25

Lire d'autres questions sur les étiquettes