はじめまして。
コードを拝見しましたが、そもそもの構文が正しくないので、ページでエラーになっていないでしょうか。
まずは以下を参考に、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の基本を同時に調べていただき、コードの意味を一つ一つ追ってみる事をおすすめします。
ご返信ありがとうございます。
ご教示頂いたコードで実装ができました!
ありがとうございます。引き続き勉強頑張ります。
貴重なお時間を頂きご教示頂きましてありがとうございます。
こちらのコードをベースに、以前本フォーラムで解決したコードと組み合わせて使用しようと思っているのですが、そこでまたつまずいてしまい、恐れ入りますが、追加で質問させて下さい。
「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
Tetsuaki Hamano 様
ご返信ありがとうございます。
ご教示頂いたコードで実装が出来ました!
感激です。
ポイントも教えて頂きありがとうございます。
while
や for
の使い方などまだまだ勉強不足で、大変参考になりました。
今後も何度もご教示頂いた内容を読み返しながら、勉強を続けていきたいと思います。
貴重なお時間を頂きご返信頂きまして感謝いたします。