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


16

*_add_form_fieldsカスタム分類にフィールドを追加するアクションを使用しています。これらのフィールドの1つはwp_editor()です。

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

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

そして、ページ上のエディターをクリックし、デフォルト値をから変数に変更するtestsomething else$_POST['my_description']変数はまだtest

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

編集

以下は、これが起こっていることを示す非常に簡単なテストケースです。これをfunctions.phpファイルに配置し、新しいタグを作成します。「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」アクションにアタッチする場合にのみ発生します。「edited_terms」にアタッチすると、期待どおりに機能します。これは用語の作成ページで使用されているajaxの結果だと思います...これを示すためにテストコードを更新しました。


それは私にとっては変わりました: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 )あなたのコードの他の何かが問題かもしれませんか?
ロブフェルメール

2番目の編集を参照してください。これは、用語を「追加」したときにのみ発生するようです。
マイク

回答:


21

tinyMCE <textarea>要素は、使用されるシリアライズ機能によって最初は見えません

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

表示するには、呼び出す必要がありtinyMCE.triggerSave()ます。

以下は、このトリックを実行する簡単なスニペットです。

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

これは、wp_enqueue_script(); でキューに入れられた外部ファイルにあります。私が実施したテストで機能しました。


1
これはうまくいきません。データが投稿されたように見えると、クリック機能コードがトリガーされます。
マイク

スクリプトを頭に入れましたか?フッターでキューに入れると、wp-scriptsの後に読み込まれ、手遅れになります。
ungestaltbar

'click'の代わりに、実際に$( '#submit')。mousedown(...):)にバインドできます。その場合、スクリプトがどこでいつロードされるかは問題ではありません。
-ungestaltbar

魅力のように働いたおかげです!
nitigyan

4

あなたでは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


2番目のコメントを参照してください。これは、用語を追加するときにのみ発生するようです。そして、これはajaxを使用した結果だと思います。
マイク

@AjaxはどこでAjaxを使用していますか?
Bainternet

新しいカテゴリ/用語を追加すると、WordPressはajaxを使用してデータを投稿し、新しい用語を作成します。何らかの理由で、これによりwp_editor要素に正しい値を設定できません。元の質問のテストコードを試してください。
マイク

1

wp_editorのコーデックスによると、最初の引数はコンテンツでなければなりません。そのため、「テスト」ではなく$_POST['my_description']、最初のコンテンツにしたい場合に置く必要があります。


2
問題はコンテンツが正しく表示されないことです。textareaのコンテンツを別のものに変更しても、ポストされた変数は元のコンテンツと同じです。
マイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.