• 解決済 katz01

    (@katz01)


    いつもお世話になっております。
    タイトルの通りのことを実現させたく、いろいろと検索し、辿り着いたのが以下のコードです。

    
    function get_id_by_post_name($post_name)
    {
      global $wpdb;
      $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '".$post_name."'");
      return esc_html($id);
    }
    
    // カスタムフィールドの設定
    function add_myfield(){
    	$post_id = '';
    	if(isset($_GET['post']) || isset($_POST['post_ID'])) {
    		$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
    	}
    	$page_id = get_id_by_post_name('hoge');
    	if($post_id == $page_id){
    		add_meta_box('myfield', 'マイフィールド', 'insert_myfield', 'page', 'normal', 'low');
    	}
    }

    このコードでは、hogeという固定ページにadd_meta_boxでカスタムフィールドを表示させています。
    ただこれだと固定ページを新規追加で作った時にもこのカスタムフィールドが表示されてしまいます。

    上記の問題を解決するには、どのあたりを変更すればよろしいでしょうか?
    お知恵をお貸しいただけますと幸いです。
    宜しくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 新規に固定ページを作ったときにカスタムフィールドが表示されるということは、$post_id == $page_idが真になっているということですよね。
    であるなら$post_id$page_idを設定するロジックに問題がありそうですよね。

    あとは、$page_id = get_id_by_post_name('hoge');とするのであれば、get_id_by_post_nameを使わずにhogeページのIDをハードコードしてしまえばいいような気がします。
    おそらく事情があるものとは思いますが、問題が明確になるかもしれません。

    • この返信は7年、 9ヶ月前にikaringが編集しました。理由: タイポ

    こんにちは

    
    $template = get_post_meta($post->ID, '_wp_page_template', true);
    

    ページテンプレートは、カスタムフィールドに保存されるので、テンプレートが一致した場合

    
    add_meta_box('myfield', 'マイフィールド', 'insert_myfield', 'page', 'normal', 'low');
    

    してあげる

    
    add_action('add_meta_boxes', 'add_myfield');
    

    は、functions.php

    で、下書き保存したら、メタボックス表示になると思います。

    • この返信は7年、 9ヶ月前にnobitaが編集しました。
    トピック投稿者 katz01

    (@katz01)

    お二方、お返事ありがとうございます。
    いろいろと試したところ、どうやら
    add_action('admin_menu', 'add_myfield');
    となっていたところを
    add_action('add_meta_boxes', 'add_myfield');
    と、するだけで希望の動作を確認できました!

    アドバイスいただき、感謝いたします。
    これにて解決済みといたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「特定の固定ページの投稿画面にカスタムフィールドを表示させたい」には新たに返信することはできません。