手直しが必要ですがとりあえず動きはしたのでメモとして。
いくつか情報はあったのですがどうもうまく整えられず…。
実現したいこと
以下前提。
- WordPressの固定ページに専用テンプレートを指定
- 専用テンプレートを選んだ固定ページにのみ、投稿エディタを1つ追加(計2つに)
単なるカスタムフィールドなら以前もやっていたので問題はそれほどないのですが、今回はwp_editor()でWPのエディタが使える形での追加を目指して難儀していました。
私のコードはアレなので、参考サイトのほうをどうぞ。恐らくそちらだけを見た方が良いです。
- 編集画面に独自のカスタムフィールドの入力項目を追加する
- WordPress3.5 エディタ付フィールドを投稿の編集に追加する
- WP_secondary_editor
- Why am I not able to save / update data in wp_editor?
コード
あくまで参考程度にご覧下さいませ。時間があれば今後書き換える可能性も高いので。
なお、分岐にも使ってるテンプレートファイル名はcustom-page.phpとしています。
add_action('edit_form_after_editor', 'add_custom_form' );
add_action('save_post', 'my_box_save');
function my_check_temlate(){
$post_id = '';
$template_file = '';
if(isset($_GET['post'])){ $post_id = $_GET['post']; }
if(isset($_POST['post_ID'])){ $post_id = $_POST['post_ID']; }
$template_file = get_post_meta($post_id,'_wp_page_template',true);
if ($template_file == 'custom-page.php'){
return true;
}
}
function add_custom_form() {
if(my_check_temlate()){
global $post;
wp_nonce_field(wp_create_nonce(__FILE__), 'my_nonce');
$content = get_post_meta($post->ID,'custom_contents',true);
$args = array(
'textarea_rows'=> 14,
'teeny'=> false,
'quicktags'=> true
);
echo '<h2>2つ目のコンテンツ入力欄</h2>';
wp_editor( $content, 'my_extend_editor',$args );
}
}
function my_box_save($post_id) {
global $post;
$my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null;
if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) {
return $post_id;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
if(!current_user_can('edit_post', $post->ID)) { return $post_id; }
if(my_check_temlate()){
update_post_meta($post->ID, 'custom_contents', $_POST['my_extend_editor']);
}
}
詰まったのはwp_editor()の挙動と特定の投稿画面のみ表示させる部分。
wp_editor()があればadd_metaboxがいらないことを理解しておらず、追加したエディタの上に余計なカスタムフィールドができてしまっていました。
特定の投稿画面のみの表示は、「フロントページの表示」でフロントページに固定ページを設定した場合にスラッグが使えないので(どうにかすれば使えるのかもしれませんが)、別の手段として専用テンプレートを適用しているかどうかで判断してみました。
以前はadd_meta()に対して使っていましたが、今回はwp_editor()ですからちょっと無理矢理感が。
特定のスラッグをもったページの投稿画面のみに表示
今回はスラッグが使えませんでしたが、表示の分岐でページスラッグを使う方法もあります。詳細は以下。
- 特定のページにだけメタボックスを追加する※こちらはページスラッグを用いています
結び
wp_editor()をはじめて使いましたが、エディタの表示だけは簡単にできたためいろいろ油断してしまいました…。
補足:テンプレート内での分岐
テンプレート内であればis page template()を使うことで、特定のテンプレートを使用しているかどうかでの分岐が作成可能です。
0人がこの記事を評価
役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。
連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。