サポート » プラグイン » ACFの値を別ページに表示する方法

  • 解決済 mikujin

    (@mikujin)


    お世話になります。

    固定ページ1にて設定したACFの値を、
    固定ページ2で表示したいのですが、どのようなコードをかけば良いか教えて下さい。

    ユーザー情報を紐づけるために、固定ページ1と2にそれぞれACFを設置しました。(下記参照)
    ベースとなるのが固定ページ1に設置しているACF値です。
    固定ぺージ2で選択したユーザーの名前が一致したとき、固定ページ1のユーザー情報に紐づいている他の値も取得し、固定ページ2で表示できるようにしたいです。

    ▼固定ページ1(id:1)に設置したACF

    フィールドグループ名:固定ページ1

     フィールド名:top-name1
     フィールドタイプ:ユーザー(複数の値を選択しない)

     フィールド名:top-name-hobby1
     フィールドタイプ:テキスト

    ▼固定ページ2(id:1)に設置したACF

    フィールドグループ名:固定ページ2

     フィールド名:mypage-name
     フィールドタイプ:ユーザー(複数の値を選択しない)

    //固定ページ1に設置した「top-name1」を取得して
    <?php echo = get_field('top-name1',1);?> 
    
    //固定ページ2で「mypage-name」と一致したとき
    <?php echo = get_field('mypage-name');?> ※このコードが分かりません 
    
    //固定ページ1の「mypage-name-hobby」を固定ページ2に表示する
    <div class="mypage-hobby">
    <?php echo = get_field('top-name-hobby1',1);?> ※このコードも解決に至っていません
    </div>

    ※固定ページ1と2は別のテンプレートを使用しています。
    ※固定ページ2はmypageとありますが、ログイン関連のコードは省いています。

    試行錯誤しているのですが、解決に至っておりません。
    お知恵をお貸しいただけると幸いです。
    どうぞ宜しくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • はじめまして。
    コードを拝見しましたが、そもそもの構文が正しくないので、ページでエラーになっていないでしょうか。

    まずは以下を参考に、echoの使い方、ACFのフィールドの扱い方のポイントを押さえてみて下さい。

    <?php
    // 固定ページのIDが「1」であった場合、「top-name」というフィールド名の値を取得して、「$a」という変数に格納する
    $a = get_field( 'top-name', 1 );
    
    // 「mypage-name」というフィールドの値をget_field関数で取得し、echoで画面に出力する
    echo get_field( 'mypage-name' );
    
    // 上記コードと全く同じで、「the_field('XXX')」は指定したフィールドを画面に出力します
    the_field( 'mypage-name' );
    ?>

    上記を踏まえた上で、以下のコードで動くのではないかと思います。

    <?php
    //固定ページ1に設置した「top-name1」を変数に格納する
    $top_name1 = get_field( 'top-name1', 1 );
    
    //固定ページ2に設置した「mypage-name」を変数に格納する
    $mypage_name = get_field( 'mypage-name' );
    ?>
    
    ここにコンテンツなどが入ります。
    
    <?php if ( $top_name1 === $mypage_name ) : // 「top-name1」と「mypage-name」が一致した時 ?>
    <div class="mypage-hobby">
    <?php
    //固定ページ1の「top-name-hobby」を固定ページ2に表示する
    the_field( 'top-name-hobby1', 1 );
    ?>
    </div>
    <?php endif; // IF文の終わり ?>

    また、ただコピペするだけでなく、PHPの基本を同時に調べていただき、コードの意味を一つ一つ追ってみる事をおすすめします。

    トピック投稿者 mikujin

    (@mikujin)

    ご返信ありがとうございます。
    ご教示頂いたコードで実装ができました!
    ありがとうございます。引き続き勉強頑張ります。
    貴重なお時間を頂きご教示頂きましてありがとうございます。

    こちらのコードをベースに、以前本フォーラムで解決したコードと組み合わせて使用しようと思っているのですが、そこでまたつまずいてしまい、恐れ入りますが、追加で質問させて下さい。

    「top-name1」は、ユーザーが複数いるため、top-name1.2.3.4…と同様の処理をしたいので、1.2.3の連番の代わりに、numを用いて以下のコード(太字部分)を書き足しました。

    <?php $num = 1;
    while ($num < 31) { ?>

    <?php
    //固定ページ1に設置した「top-name1」を変数に格納する
    $top_name1 = get_field( ‘top-name’ . $num , 1 );

    //固定ページ2に設置した「mypage-name」を変数に格納する
    $mypage_name = get_field( ‘mypage-name’ );
    ?>

    ここにコンテンツなどが入ります。

    <?php if ( $top_name === $mypage_name ) : // 「top-name1」と「mypage-name」が一致した時 ?>
    <div class=”mypage-hobby”>
    <?php
    //固定ページ1の「top-name-hobby」を固定ページ2に表示する
    the_field( ‘top-name-hobby’ . $num , 1 );
    ?>
    </div>
    <?php endif; // IF文の終わり ?>`

    <?php $num++;
    } ?>

    すると、top-name1~31までのすべての値が表示されてしまいます。

    下記のように、top-nameで選択したユーザー名と、mypage-nameで選択したユーザー名が一致したとき、top-nameに紐づいたtop-name-hobbyを表示したいのですが、現状、どのユーザーを選択しても、すべてのtop-name-hobbyが返されます。

    top-name1 ⁼ mypage-name → top-name1-top-name-hobby1
    top-name2 ⁼ mypage-name → top-name2-top-name-hobby2
    top-name3 ⁼ mypage-name → top-name3-top-name-hobby3

    試行錯誤しておりますが、解決策が見つかりません。
    お知恵をお貸しいただけると大変助かります。

    どうぞ宜しくお願いいたします。

    @mikujinさん

    以下で大丈夫だと思います。

    <?php
    // 固定ページ2に設置した「mypage-name」を変数に格納する
    $mypage_name = get_field( 'mypage-name' );
    
    for ( $num = 1; $num <= 30 ; $num++ ) :
      // 固定ページ1に設置した「top-name」を変数に格納する
      $top_name = get_field( 'top-name' . $num, 1 );
      ?>
      ここにコンテンツなどが入ります。
      <?php if ( $top_name === $mypage_name ) : // 「top-name」と「mypage-name」が一致した時 ?>
        <div class=”mypage-hobby”>
          <?php
            // 固定ページ1の「top-name-hobby」を固定ページ2に表示する
            the_field( 'top-name-hobby' . $num , 1 );
          ?>
        </div>
      <?php endif; // IF文の終わり ?>
    <?php endfor ; // FOR文の終わり ?>

    ポイントは以下三点です。

    • このケースであれば、ループはwhileではなくforを使った方が若干シンプルになる
    • mypage-nameは固定ページ2で決まった値なので、FORやWHILEのループ内で毎回get_fieldして取得せずに、ループの外で取得した方が、不要な処理が減る
    • top-nameのフィールド名はループ毎に数字が変わるので、格納する変数名に変数名はつけない
      ×:$top_name1
      〇:$top_name
    トピック投稿者 mikujin

    (@mikujin)

    Tetsuaki Hamano 様

    ご返信ありがとうございます。
    ご教示頂いたコードで実装が出来ました!
    感激です。
    ポイントも教えて頂きありがとうございます。
    whileforの使い方などまだまだ勉強不足で、大変参考になりました。
    今後も何度もご教示頂いた内容を読み返しながら、勉強を続けていきたいと思います。
    貴重なお時間を頂きご返信頂きまして感謝いたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ACFの値を別ページに表示する方法」には新たに返信することはできません。