WordPressの投稿エディタを増やして特定のページテンプレートを選択したページにのみ表示:メモ

悩み
悩み

手直しが必要ですがとりあえず動きはしたのでメモとして。

いくつか情報はあったのですがどうもうまく整えられず…。

構築環境
WordPress4.4

実現したいこと

以下前提。

  • WordPressの固定ページに専用テンプレートを指定
  • 専用テンプレートを選んだ固定ページにのみ、投稿エディタを1つ追加(計2つに)

単なるカスタムフィールドなら以前もやっていたので問題はそれほどないのですが、今回はwp_editor()でWPのエディタが使える形での追加を目指して難儀していました。

私のコードはアレなので、参考サイトのほうをどうぞ。恐らくそちらだけを見た方が良いです。

コード

あくまで参考程度にご覧下さいませ。時間があれば今後書き換える可能性も高いので。
なお、分岐にも使ってるテンプレートファイル名は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への投稿など他サービスとの連動は一切ありません。

コメント欄