web-dev-qa-db-ja.com

wp_editor textarea値が更新されていません

カスタム分類法にフィールドを追加するために*_add_form_fieldsアクションを使用しています。そのうちの1つがwp_editor()です。

私が直面している問題は、私がそのようにページにWordPressエディタを出力するときです。

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

次に、ページ上のエディタをクリックしてデフォルト値をtestからsomething elseに変更した場合、$_POST['my_description']変数はまだtestに設定されています。

エディタに設定を追加する必要がありますか?テキスト領域の値を変更できないのはなぜですか?

_編集_

以下は、これが起こっていることを示す非常に単純なテストケースです。これをあなたのfunctions.phpファイルに置いて、新しい tag を作成してください。 'my_description "の投稿値は変更されません。

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

_編集_

これは "created_term"アクションにアタッチするときだけ起こります。あなたが "editing_terms"にアタッチするなら、それは期待通りに動作します、そしてこれはcreate termページで使用されているajaxの結果だと思います...私はこれを示すためにテストコードを更新しました。

15
Mike

tinyMCE <textarea>要素は、最初は使用されているシリアル化関数からは見えません。

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

見えるようにするにはtinyMCE.triggerSave()を呼び出す必要があります。

以下はトリックをするべき簡単なスニペットです:

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

これは外部ファイルにあり、wp_enqueue_script()でエンキューされています。それは私が行ったテストのために働いた。

20
ungestaltbar

edited_terms関数では値を保存する必要があり、add_tag_form_fieldsではtestを保存したデータで置き換える必要があります。

何かのようなもの:

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

ホイールを再発明せずにすべてのタイプの追加フィールドをタグ/カテゴリまたはカスタム分類編集フォームに追加するためのはるかに簡単な方法が必要な場合は、 TAX Meta Class をご覧ください。

4
Bainternet

wp_editor のコーデックスによれば、最初の引数は内容であるべきです。ですから、 'test'ではなく、それがあなたが初期のコンテンツになりたいものであるならば、あなたは$_POST['my_description']を置くべきです。

1
ractoon