サポート » 使い方全般 » カスタムフィールドのタクソノミーに関して

  • Advanced Custom Fieldsプラグインを使用してカスタムフィールドを作成しています。
    フィールドタイプをタクソノミーのセレクトボックスに設定しています。

    カスタム投稿にCustom Post Type UIプラグインを使用してタクソノミーを設定しています。

    そこで記事の投稿・編集画面にセレクトボックスとしてカスタムフィールドは作られるのですがセレクトボックスで選択後、記事を保存するとセレクトボックスで選んだはずが未選択のまま保存されます。

    ただカスタム投稿のタクソノミーのターム一覧では選んだタームの記事数に1がつきます。
    タームを取得する関数を呼び出しても取得できないです。(記事を編集しても未選択の状態なので当たり前かもしれませんが。)

    なぜ、ターム一覧では記事数にカウントされるのかが不思議です。

    カスタム投稿 post_a
    タクソノミー tax_post
    ターム tax_term_post
    カスタムフィールド costom_select

    1. カスタム投稿(post_a)で新規投稿で、カスタムフィールド(costom_select)でtax_term_postを選択します。

    2. 1で作成したカスタム投稿を編集すると、カスタムフィールド(costom_select)が未記入になっています。
    正しくはtax_term_postを選択している状態になっているはずです。

    ただチェックボックスの場合は正常に選択できます。
    タームを取得する関数でも問題なく取得できます。

    質問としてカスタムフィールドのタクソノミーでセレクトボックスの場合、どうやって記事を保存する際に値を保存してやれば宜しいでしょうか。

    何卒、宜しくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは
    まず、advanced custom fieldsでカスタムタクソノミーのフィールドを作った場合ですが
    これはカスタムフィールドのcostom_selectとして保存されるのであって
    タクソノミー tax_postと記事が結び付けられるわけではありません
    ですのでターム一覧で記事数に1が付いているという時に
    投稿した記事の右側のチェックボックスで選択している状態であればそれは正しい動作です
    逆にチェックボックスで選択している記事がひとつもない状態でも記事数が1となって
    いる場合はおかしいことになりますが…

    次にcostom_selectが保存しても未選択になるという点ですが
    例えばadvanced custom fieldsで作ったフィールドグループ内でカスタムフィールド名に
    同じcostom_selectという名前のフィールドを作っていることはないでしょうか?
    またはもしかしたらそのフィールド名が何か別のもので使われている可能性もあります。
    例えばrikuchanman_costom_select とつけるようにする等
    ほとんど被りそうにない名前をつけてみてはいかがでしょうか?

    トピック投稿者 rikuchanman

    (@rikuchanman)

    jdbb様

    遅くなりまして、申し訳御座いません。

    教えて頂いた通り、カスタムフィールド名を変更した所、管理画面のカスタム投稿の投稿画面から登録する事が出来ました。

    本当に有難うございました。

    トピック投稿者 rikuchanman

    (@rikuchanman)

    度々すみません。

    jdbb様に教えて頂き、管理画面の投稿画面からカスタムフィールド(フィールドタイプがタクソノミー)に値を登録することは出来ました。

    ただ自分で作成したフォームで入力・選択した値をカスタムフィールドに登録させようとしていますがフィールドタイプがタクソノミーでセレクトボックスの場合が登録出来ません。

    カスタムフィールドを登録する際の関数として、「update_post_meta」と「update_field」を使用してみましたがどちらも駄目でした。

    下記にコードを記載します。

    [update_post_metaの場合]
    ———————————————————————————–

    add_action('template_redirect', 'insert_data');
    function insert_data() {
     if(is_page('insert_page')) :
      $insert_post_data = $_POST // フォームで入力・選択した値を代入
      $post_data['post_title']   = 'タイトル';
      $post_data['post_status'] = 'publish';
      $post_data['post_type']   = 'カスタム投稿タイプ';
    
     $post_id = wp_insert_post($post_data);
    
      if(!is_wp_error($post_id)) :
       $acf_id         = 'カスタムフィールドid';
       $get_acf_fields = get_acf_all_fields_in_group($acf_id); // カスタムフィールドを全て取得
    
      foreach($get_acf_fields as $key => $value) :
        $acf_name = $value['name']; // カスタムフィールド名を代入
        if(isset($insert_post_data[$acf_name])) : // カスタムフィールドに入力する値があるか判定(セレクトボックスの場合、タームIDが入っている。)
       update_post_meta($post_id, $acf_name, $insert_post_data[$acf_name]); // カスタムフィールドを登録
      endif;
       endforeach;
      endif;

    ———————————————————————————–

    [update_fieldの場合]
    ———————————————————————————–

    add_action('template_redirect', 'insert_data');
    function insert_data() {
     if(is_page('insert_page')) :
      $insert_post_data = $_POST // フォームで入力・選択した値を代入
      $post_data['post_title']   = 'タイトル';
      $post_data['post_status'] = 'publish';
      $post_data['post_type']   = 'カスタム投稿タイプ';
    
     $post_id = wp_insert_post($post_data);
    
      if(!is_wp_error($post_id)) :
       $acf_id         = 'カスタムフィールドid';
       $get_acf_fields = get_acf_all_fields_in_group($acf_id); // カスタムフィールドを全て取得
    
      foreach($get_acf_fields as $key => $value) :
        $acf_name = $value['name']; // カスタムフィールド名を代入
        if(isset($insert_post_data[$acf_name])) : // カスタムフィールドに入力する値があるか判定(セレクトボックスの場合、タームIDが入っている。)
       $field_key = $get_acf_all_fields[$acf_name]['key'];
          $value     = array($acf_name => $insert_post_data[$acf_name]);
          update_field($field_key, $value, $post_id); // カスタムフィールドを登録
      endif;
       endforeach;
      endif;

    ———————————————————————————–

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムフィールドのタクソノミーに関して」には新たに返信することはできません。