• 解決済 okyan

    (@okyan)


    ◆やりたいこと
    ————————–
    各カテゴリページで、一階層下のカテゴリのカスタムフィールドで設定した画像を出力。
    (アドバンスドカスタムフィールでカテゴリに画像のカスタムフィールドを追加済)

    □階層
    親カテゴリ
     - 子カテゴリ(カスタムフィールドに画像Aを登録)
       – 孫カテゴリ(カスタムフィールドに画像A-1を登録)
       – 孫カテゴリ(カスタムフィールドに画像A-2を登録)
       – 孫カテゴリ(カスタムフィールドに画像A-3を登録)
     - 子カテゴリ(カスタムフィールドに画像Bを登録)
     - 子カテゴリ(カスタムフィールドに画像Cを登録)

    □例
    ・親カテゴリページでの表示
       子カテゴリ 画像A
       子カテゴリ 画像B
       子カテゴリ 画像C
    ・子カテゴリページでの表示
       孫カテゴリ 画像A-1
       孫カテゴリ 画像A-2
       孫カテゴリ 画像A-3
     
    ————————–

    「wp_list_categories」を使い、各カテゴリページにて一階層下のカテゴリ名を表示することはできたのですが、カスタムフィールに設定した画像を出力する方法が、色々試行錯誤しましたが出来ませんでした。

    わかる方がいらっしゃいましたらご教示頂けませんでしょうか?
    何卒よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • (コードを間違えたため削除します。)

    get_field() のパラメータ指定を間違えたので訂正します。すみません。

    検証していませんが、こんな考え方のコードはどうでしょう?

    <?php
      $cat = get_queried_object_id();  // 現在のカテゴリーのID
      $args = array( 'parent' => $cat );  // 子カテゴリーを取得(孫なし)
      $childs = get_categories( $args );
      foreach( $childs as $child ) {  // 子カテゴリーそれぞれ
        $image = get_field( 'カスタムフィールド名', $child->term_id );
        if ( ! empty( $image ) ) {  // カスタムフィールドが入力されている
          // 画像を出力
        }
      }
    ?>

    トピック投稿者 okyan

    (@okyan)

    gblsm様

    ご教示頂きましたコードで試しましたが、カテゴリが表示されませんでしたので、下記のようなコードに一部変更してみました。

    ——————————————

    <?php
        $args = array(
        'parent' => $cat //現在のカテゴリーの直近子カテゴリーを取得
        );
        $catChildren = get_categories( $args ); //上記の条件でカテゴリー情報を取得
        if($catChildren){ //子カテゴリーがある場合、子カテゴリーを表示する
            echo '<ul>';
            foreach($catChildren as $catChild){
                echo '<li><a>term_id). '">'. $catChild -> name. '</a></li>';
        ※ここにアドバンスドカスタムフィールドを表示したい
            }
            echo '</ul>';
        }
     ?>

    ——————————————

    1階層下のカテゴリは表示されたのですが、以下のようなコードで試しましたがアドバンスドカスタムフィールド出力ができませんでした。

    ①<?php echo post_custom(‘フィールド名’); ?>

    ②<?php
    $cat_id = get_queried_object()->cat_ID;
    $post_id = ‘category_’.$cat_id;
    ?>
    <?php the_field(‘フィールド名’,$post_id); ?>

    ◆表示したいアドバンスドカスタムフィールド名
    画像:カスタムフィールド名「cat-img」
    テキスト:カスタムフィールド名「txt」

    便乗で詳しい人の解説があると嬉しいので書いておく。

    wp_list_categoriesのコールバックのwalkerにオリジナルのwalkerを指定してやるとかじゃないだろうか。

    クラスリファレンス/Walker

    okyanさん
    検証しなかったのが悪いといえばそれまでですが、私のコードが間違っていました。
    カテゴリーにつけたカスタムフィールドの取り出し方は Advanced Custom Filelds のマニュアルに記載がありますが、お読みになりましたか?

    https://www.advancedcustomfields.com/resources/get_field/

    上記ページ内 Get a value from other places の例に出てきます。

    $post_id = "category_2"; // target a specific category
    $value = get_field( "text_field", $post_id );

    これを参考にコードを書いてみました。

    以下のコードを category.php に書いて検証
    <pre>
    <?php
      $cat = get_queried_object_id();  // 現在のカテゴリーのID
      $args = array( 'parent' => $cat );  // 子カテゴリーを取得(孫なし)
      $childs = get_categories( $args );
      echo "子カテゴリーの一覧\n";
      foreach( $childs as $child ) {  // 子カテゴリーそれぞれ
        echo 'term_id: ', $child->term_id, ' | ';
        echo 'name: ', $child->name, ' | ';
        echo 'slug: ', $child->slug, "\n";
        $cat_id = 'category_' . $child->term_id;  // カテゴリー(ターム)を指定
        echo 'カスタムフィールド cat-img: ';
        $image = get_field( 'cat-img', $cat_id );
        echo '<img src="' . $image['url'] . '">' . "\n";
        $txt = get_field( 'txt', $cat_id );
        echo 'カスタムフィールド txt: ', $txt, "\n";
    }
    ?>
    </pre>

    トピック投稿者 okyan

    (@okyan)

    gblsm様

    検証までしていただき、ありがとうございます。
    上記のコードで出力ができました!

    get_fieldでフィールドを指定する方法、お恥ずかしながら知りませんでした。
    Advanced Custom Filelds のマニュアルは見たことがなかったので、この機会に目を通してみます。
    本当にありがとうございました。

    get_field() の第2パラメータに、カテゴリーのオブジェクトを渡しても大丈夫だそうです。
    これと

    $cat_id = 'category_' . $child->term_id;
    $image = get_field( 'cat-img', $cat_id );
    $txt = get_field( 'txt', $cat_id );

    これは同じ。短く書けるのでこちらの方が分かりやすいかも。

    // $child はカテゴリー(ターム)オブジェクト
    $image = get_field( 'cat-img', $child );
    $txt = get_field( 'txt', $child );

    トピック投稿者 okyan

    (@okyan)

    ありがとうございます!
    さらに軽量化できました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「各カテゴリで一階層下のカテゴリのカスタムフィールドを表示したい」には新たに返信することはできません。