• heppoko

    (@heppoko)


    とあるサイトを参考に、カスタム分類にカスタムフィールドを追加するということを行いました。
    まず実施したのが下記を「functions.php」に記載。

    // カスタム分類にカスタムフィールドを追加
        add_action ( 'タクソノミー名_edit_form_fields', 'extra_taxonomy_fields');
        function extra_taxonomy_fields( $tag ) {
            $t_id = $tag->term_id;
            $cat_meta = get_option( "cat_$t_id");
    ?>
    <tr class="form-field">
        <th><label for="extra_text">追加テキスト</label></th>
        <td><textarea name="Cat_meta[extra_text]" id="extra_text" size="25" value="<?php if(isset ( $cat_meta['extra_text'])) echo esc_html($cat_meta['extra_text']) ?>" rows="3" /></textarea></td>
    </tr>
    <?php
        }
    
    // カスタム分類にカスタムフィールド追加して保存するためのコード
        add_action ( 'edited_term', 'save_extra_taxonomy_fileds');
        function save_extra_taxonomy_fileds( $term_id ) {
            if ( isset( $_POST['Cat_meta'] ) ) {
                $t_id = $term_id;
                $cat_meta = get_option( "cat_$t_id");
                $cat_keys = array_keys($_POST['Cat_meta']);
                foreach ($cat_keys as $key){
                    if (isset($_POST['Cat_meta'][$key])){
                        $cat_meta[$key] = $_POST['Cat_meta'][$key];
                    }
                }
                update_option( "cat_$t_id", $cat_meta );
            }
        }

    これでカスタムフィールドは表示されました。

    そしてこれを使って固定ページで作ったページ内に表示させたいと思い、参考にしたサイトに記載されていたソースを基に下記を記述しました。

    <?php
      $categories = get_terms('タクソノミー名');
      foreach($categories as $category){
        $cat_data = get_option('cat_'.intval($category->term_id));
        echo esc_html($cat_data['extra_text']);
      }
    ?>

    しかし、カスタムフィールドのテキストは取得してくれたのですが、全てのタームのテキストを表示してしまいます。
    所属するタームのテキストだけを拾ってきたいのですが、どう修正すればいいのかが分からず困っております。

    そしてこれはあとで気づいたのですが、管理画面のカスタムフィールドを確認すると、空になっていました。
    でもページには入力したテキストが表示されていたので、保存はされているようなのですが、なぜ空になってしまうのかの原因が分かりかねております。「functions.php」の「カスタム分類にカスタムフィールド追加して保存するためのコード」のどこかが間違っているのかどうかも分かりかねております。

    お分かりになる方がいらっしゃいましたら、ぜひともご教授いただきたいです。
    よろしくお願いいたします。

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

    (@jim912)

    所属するタームのテキストだけを拾ってきたいのですが、どう修正すればいいのかが分からず困っております。

    何に所属しているのか明記されていませんが、おそらく get_the_terms をお使いいただくと良いかと思います。

    なぜ空になってしまうのかの原因が分かりかねております。

    textarea要素には、value属性は存在しません。要素内のテキストとして出力してください。

    トピック投稿者 heppoko

    (@heppoko)

    ご回答ありがとうございました。
    記載漏れ、恐縮です…
    カスタム分類に2つ説明テキストを設定しなくてはいけなくなりました。
    1つはもともと「説明」のボックスがあるので問題ないのですが、
    もう一つはカスタムフィールドでやるしかないなと。
    そのカスタムフィールドのテキストは、カスタム分類の一覧を表示して、
    各分類の説明のために使用するものになります。

    それをお答えにありました、get_the_termsでやってみたのですが、エラーが出るばかり…

    <?php
      $categories = get_the_terms($post -> ID, 'タクソノミー名');
      foreach($categories as $category){
        $cat_data = get_option('cat_'.intval($category->term_id));
        echo esc_html($cat_data['extra_text']);
      }
    ?>

    としました。何がいけないのか…

    それともう一つの方ですが、「textarea要素には、value属性は存在しません」というのを拝見して、解決できました。説明文なので長くなるため、テキストエリアにして見やすくしたかったのですが、こればかりは仕方がありません。

    とにもかくにも、重ね重ねありがとうございました。

    gatespace

    (@gatespace)

    <td><textarea name="Cat_meta[extra_text]" id="extra_text" size="25" value="<?php if(isset ( $cat_meta['extra_text'])) echo esc_html($cat_meta['extra_text']) ?>" rows="3" /></textarea></td>
    では無く
    <td><textarea name="Cat_meta[extra_text]" id="extra_text" size="25" rows="3" /><?php if(isset ( $cat_meta['extra_text'])) echo esc_html($cat_meta['extra_text']) ?></textarea></td>
    ということ。
    http://www.tohoho-web.com/html/textarea.htm

    エラーが出るばかり…

    デバッグモードにしてエラー確認しないと誰もどこに原因があるのか分かりません

    トピック投稿者 heppoko

    (@heppoko)

    ご回答ありがとうございました。
    テキストエリアの件、ありがとうございます。
    なるほど、そういう書き方だったのですね。
    valueの中に絶対書かないといけないものだと思ってしまったものですから。
    参考になりました。
    エラーについてはもう少しきちんと調べてみます。
    すみませんでした。

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