サポート » 使い方全般 » カスタムフィールド タームチェックボックス 保存できない。

  • 解決済 aya314

    (@aya314)


    タクソノミーのタームのチェックボックスを既存投稿のカスタムフィールドに追加しました(下記のコード)。  しかし、チェックをするものの保存されないのですが、どこがおかしいのかが分かりません。分かりましたら教えてください。宜しくお願いましす。

    functions.phpに追加↓

    function add_my_box() {
        global $post;
    
    $jobsTerms = get_terms('category','get=all');
    foreach($jobsTerms as $term){
        $checked = (has_term($term->slug, 'category', $post->ID)) ? 'checked="checked"' : '';
        echo "<input type='checkbox' name='term-" . $term->slug . "' value='" . $term->name . "' $checked /> ";
        echo "<label for='term-" . $term->slug . "'>" . $term->name . "</label> ";}
    }
    function add_my_box_hooks() {
        add_meta_box('my_box', 'タクソノミー追加', 'add_my_box', 'post', 'normal', 'high');
    }
    function add_my_box_init() {
        add_action('admin_menu', 'add_my_box_hooks');
    }
    add_action('init', 'add_my_box_init');

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • aya314さん

    カスタムフィールドではなく、カスタムタクソノミーではまずい感じでしょうか。
    わたくしの場合は以下のソースをfunctions.phpに追加しています。
    要件を理解してないかもしれないです。すみません。

    //カスタム分類を追加
      $args = array(
        'label' => __('カスタム分類のラベル'),
        'labels' => array(
          'name' => __('カスタム分類名'),//管理メニューに表示名
          'singular_name' => __('カスタム分類名'),
          'search_items' => __('検索'),//検索
          'popular_items' => __('よく使われる分類'),//よく使われる(ビルドインの時)
          'all_items' => __('全分類を表示'),//すべて(ビルドインの時)
          'parent_item' => __('親分類を選択'),//親の選択(ビルドイン時)
          'edit_item' => __('現在の分類を編集'),//編集
          //'update_item' => __('変更内容を反映'),
          'add_new_item' => __('新しい分類項目を追加'),//登録ページタイトル
          'new_item_name' => __('新規'),
        ),
        'public' => true,//公開するか
        'show_ui' => true,
        'show_admin_column' => true,//記事一覧ページに表示するかどうか
        'hierarchical' => true,//親子を持たせるか
      );
    
      register_taxonomy(
      'customtax',//分類名
      array('post','custompost'),//ビルドインする投稿タイプ
      $args//上を読み込み
      );

    返信ありがとうございます。上記のコードは、カスタムタクソノミーを作るコードですね。
    私の説明が悪かったのかもしれませんが、説明しなおしますね。宜しくお願いします。

    例えば、上記でコードで作成したカスタムタクソノミーを、投稿画面にビルドインすると、投稿画面の右にカテゴリーのチェックボックスが表示されますね。私が今回質問した内容は、この右に表示されるカテゴリーのチェックボックスと同等のものを、カスタムフィールドに組み込むことをしたいと考えています。

    そこで、私が投稿したコードでは、カスタムフィールド上にタームのチェックボックスの一覧は表示させることはできるものの、それらを公開又は下書きで保存した際に、チェックボックスにチェックしたものが保存することができません。こちらの保存のやり方を教えていただきたいと思います。

    そもそも、meta_box の表示をするコードと、保存のロジックは関係ないので、input で渡された値を元に、手動でタクソノミーを設定する必要があります。

    なので、投稿の保存時に wp_set_post_categorieswp_set_post_termswp_set_object_terms を使って カテゴリーを紐付けてあげる必要があります。

    add_action( 'save_post', 'set_category_to_post' , 10, 1 );
    function set_category_to_post( $post_id ) {
    	$categories = array(); //カテゴリIDの配列をどうにかして取得。
    	wp_set_post_categories( $post_id , $categories );
    }

    また、当然 $_POST等を使って値を取得することになると思いますが、wp_nonce_field 等を使わないとセキュリティホールになったり、クイック編集で変更があったときにカテゴリーが消える等の事故が発生すると思います。(なので、このままちょちょい!って使わないでください。)

    関数リファレンス/add meta box – WordPress Codex 日本語版 も参照してください。おそらく、用例のところの2つ目の英語のやつが参考になるかと思います。

    Urabeさん ありがとうござまいす。イメージ的に、保存について混同していた部分があり、すこしてこづりましたがおかげで解決に至りました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールド タームチェックボックス 保存できない。」には新たに返信することはできません。