カスタム分類法にフィールドを追加するために*_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の結果だと思います...私はこれを示すためにテストコードを更新しました。
tinyMCE <textarea>
要素は、最初は使用されているシリアル化関数からは見えません。
$.post(
ajaxurl,
$('#addtag').serialize(), function(r) {
// Content here.
}
});
見えるようにするにはtinyMCE.triggerSave()
を呼び出す必要があります。
以下はトリックをするべき簡単なスニペットです:
jQuery('#submit').mousedown( function() {
tinyMCE.triggerSave();
});
これは外部ファイルにあり、wp_enqueue_script()
でエンキューされています。それは私が行ったテストのために働いた。
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
をご覧ください。
wp_editor のコーデックスによれば、最初の引数は内容であるべきです。ですから、 'test'ではなく、それがあなたが初期のコンテンツになりたいものであるならば、あなたは$_POST['my_description']
を置くべきです。