Advanced Custom Fields出力の方法とwhile文の利用

このQ&Aのポイント
  • Advanced Custom Fieldsを使用してワードプレスで設定した項目を出力する方法について説明します。
  • 項目が5件ある場合の出力方法として、while文を使用する方法を解説します。
  • 指定した項目の出力を繰り返し行い、HTMLの要素として出力することができます。
回答を見る
  • ベストアンサー

Advanced Custom Fields出力

ワードプレスのAdvanced Custom Fieldsで設定した項目 <?php the_field('setumei1'); ?>を出力したいです。 setumei は 5件あるので <h1 class="aaa"><?php the_field('setumei1'); ?></h1> <h1 class="aaa"><?php the_field('setumei2'); ?></h1> <h1 class="aaa"><?php the_field('setumei3'); ?></h1> <h1 class="aaa"><?php the_field('setumei4'); ?></h1> <h1 class="aaa"><?php the_field('setumei5'); ?></h1> となりますが、これをwhile文 書くとどうすればよいですか。 ご教授ください。

  • u2122
  • お礼率71% (125/176)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Proof4
  • ベストアンサー率78% (151/192)
回答No.2

No.1の補足に対して回答します。 4件目、5件目に内容が空の場合は出力しないようにするには echo '<h1 class="aaa">'; the_field("setumei$i"); echo '</h1>'; を下記のように変更します。 if($i >= 4 && !get_field("setsumei$i")){ continue; } echo '<h1 class="aaa">'; the_field("setumei$i"); echo '</h1>'; ACFのget_fieldを用いて値が空かどうかを見ています。

参考URL:
https://www.advancedcustomfields.com/resources/get_field/
u2122
質問者

お礼

何度も回答いただき誠にありがとうございます!大変助かりました。 参考にします^^

その他の回答 (1)

  • Proof4
  • ベストアンサー率78% (151/192)
回答No.1

このような処理にはwhile文よりもfor文のほうが向いています。 for文で書くと for($i = 1; $i <= 5; $i++){ echo '<h1 class="aaa">'; the_field("setumei$i"); echo '</h1>'; } のようになります。 あえてwhile文で書くとすれば $i = 1; while($i <= 5){ echo '<h1 class="aaa">'; the_field("setumei$i"); echo '</h1>'; $i++; } となります。

u2122
質問者

お礼

ありがとうございます!!すごい!たいへん助かりました^^ ここのthe_field("setumei$i"); ” で囲うのがわからなくて困っていました。

u2122
質問者

補足

重ねて質問して申し訳ありませんが、 例えば、4件目、5件目に内容が空の場合は出力しないように if分を使う場合はどのような構文になりますか?

関連するQ&A

  • Advanced Custom Fieldsの出力

    いつもお世話になっております。 wordpress3.4にAdvanced Custom Fieldsというプラグインをインストールしました。 wordpressの管理画面のカスタムフィールドにフィールドを新規追加し、投稿画面に入力、登録できるようになったのですが、プレビュー(ブラウザ上)での表示ができません。 色々なサイトで調べ、<?php echo post_custom('name1'); ?> のように記述すればよいそうなのですが、どのPHPファイルの、どこに記述すればよいのかわかりません。 また、フィールドが複数ある場合の記述もよくわかりません。(loopさせるのかな?) どなたかお教えいただけませんか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • WordPressカスタムフィールド非表示

    Advanced Custom Fieldsの設定について教えてください。 プロフィール出力の為のカスタムフィールドをつくりました。 カスタム投稿 LP だけに表示させたいです。 確かにLPだけに表示されるのですが、 他の固定ページ、投稿ページなどにも表示されてしまいます。 全文は出ないで延々ぐるぐる回っている状態です。 他のページには項目自体表示させないようにするにはどうすればいいですか? if(function_exists("register_field_group")) { register_field_group(array ( 'id' => 'acf_%e3%83%97%e3%83%ad%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab', 'title' => 'プロフィール', 'fields' => array ( array ( 'key' => 'field_59cc5c6d61a1d', 'label' => '<b>タイトル</b>', 'name' => 'profile', 'type' => 'text', 'instructions' => '<br />LPに表示するプロフィール情報についてです。タイトル、プロフィール、画像を登録してください。', 'default_value' => '', 'placeholder' => '', 'prepend' => '', 'append' => '', 'formatting' => 'html', 'maxlength' => '', ), array ( 'key' => 'field_59cc5c8b61a1e', 'label' => '<b>プロフィール一覧</b>', 'name' => 'profileitiran', 'type' => 'textarea', 'instructions' => '<br />プロフィールをお書きください。', 'default_value' => '', 'placeholder' => '', 'maxlength' => '', 'rows' => '', 'formatting' => 'br', ), array ( 'key' => 'field_59cc5c9f61a1f', 'label' => '<b>画像</b>', 'name' => 'photo', 'type' => 'image', 'instructions' => '<br />写真を登録してください。', 'save_format' => 'id', 'preview_size' => 'thumbnail', 'library' => 'all', ), ), 'location' => array ( array ( array ( 'param' => 'post_type', 'operator' => '==', 'value' => 'lp', 'order_no' => 0, 'group_no' => 0, ), ), ), 'options' => array ( 'position' => 'normal', 'layout' => 'no_box', 'hide_on_screen' => array ( 0 => 'excerpt', 1 => 'discussion', 2 => 'comments', 3 => 'revisions', 4 => 'slug', 5 => 'author', 6 => 'send-trackbacks', ), ), 'menu_order' => 0, )); }

    • ベストアンサー
    • PHP
  • wordpress カスタム投稿タイプについて

    カスタム投稿タイプにより、カタログサイトを作っているのですがwp-pagenaviがページ送りがうまくいきません。phpはよくわからないのでご指導いただければと書き込みました。 状況は下記の通りです。 ■index-frame.php (カスタムテンプレートとして、フレームカタログ一覧を表示。wp-pagenaviはこのphp内に表記しています。) パーマリンクは/%category%/%post_id%/ に設定 index-frame.phpによりサムネイルを表示させ、wp-paginaviでページ送りするとカスタム投稿タイプから投稿済みの別のサムネイルを表示させたいのですが、そうならず、index.phpが使用されてカスタム投稿タイプのタイトルと本文が表示されてしまいます。 サイトURL (”フレーム”に関しての表示部分です。)  http://cm-creation.net/yoshida/localwork/megane-catalog/frame/ index-frame.phpの表記は下記のとおりです。 <?php /* Template Name:インデックス・フレームのテンプレート */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php bloginfo('charset'); ?>" /> <title><?php bloginfo('name');?><?php wp_title(); ?></title> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css"/> <?php wp_head(); ?> </head> <body <?php body_class(); ?>> <div id="head-section"> <div id="header"> <h1><a href="#"><?php bloginfo('name'); ?></a></h1> </div> </div> <div id="wrapper-section"> <div class="clearfix" id="wrapper"> <!--カテゴリーナビ用フレーム強調--> <div id="cate_navi_container"> <?php wp_nav_menu(array( 'theme_location' => 'framebar', 'link_before' => '<img src="' . get_bloginfo('template_url') . '/images/', 'link_after' => '" alt="*" />' )); ?> </div> <!--サイドメニュー用--> <div class="clearfix" id="side-container"> <div id="sidebar"> <?php wp_nav_menu(array( 'theme_location' => 'sidebar', 'depth' => '2' )); ?> </div> </div> <!--メインコンテンツ用--> <div class="clearfix" id="main-container"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="title"> <h2><?php the_title(); ?></h2> <?php the_content(); ?> </div> <?php endwhile; endif; ?> <div class="itemlist"> <?php query_posts('post_type='.$post->post_name); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail('ssize'); ?> </a> <?php endwhile; endif; ?> </div> <div id="pagenavi"> <!--ロールナビゲーション--> <div id="roll"><?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } else { vicuna_paging_link('next_label=Newer Entries&prev_label=Older Entries&indent=2'); } ?> </div> </div> </div> </div> </div> <?php get_footer(); ?> カスタム投稿タイプとwp-pagneviの問題についてネットで見ましたが、すいません、phpについてよくわかっておらずどこをどう表記変更したら良いかわからずにおります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイルの読み込みで日本語が出力されない!

    PHPを使ってCSVファイルを部分的に読み込むコードを教えてもらいました。 しかし、CSVに入力している英語と数字は出力されるのに、日本語は空白のままでした。 教えてもらったコードは次の通りですですが、日本語も出力する場合、どうしたら良いのでしょうか? <?php function h( $str ) { return htmlentities( $str, ENT_QUOTES, 'UTF-8' ); } ?> <? if (($handle = fopen("test.csv", "r")) !== FALSE) : ?> <table class="table1" width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <? $i = 0; ?> <? while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) : $i ++ ?> <td><?=h($data[0])?><img src="http://1-<?=h($i)?>.gif"><br><?=h($data[1])?><br><?=h($data[2])?><br><span class="red"><?=h($data[3])?>円</span></td> <? endwhile; ?> </tr> </table> <? fclose($handle); ?> <? endif; ?>

    • ベストアンサー
    • PHP
  • フォームデータの内容が確認画面で反映されません。

    フォームデータの内容が確認画面で反映されません。当方素人ですので優しくお答えいただけますと幸いです。 まず入力画面がこちら。 <dt>御社名 <span class="must">&#8251;必須</span></dt> <dd><input type="text" class="inputs" name="company_name" placeholder="例)wash life" value="<?php echo form_field["company_name"]; ?>"></dd> <dt>住所 <span class="must">&#8251;必須</span></dt> <dd><input type="text" class="inputs" name="aaa" placeholder="例)大阪市中央区" value="<?php echo $form_field["aaa"]; ?>"></dd> <dt>購入代理店名又は担当者名<span class="must">&#8251;必須</span></dt> <dd id="_field_your_name"><input type="text" class="inputs" name="your_name" value="<?php echo $form_field["your_name"]; ?>" placeholder="例)田中太郎"></dd> <dt>お名前<span class="must">&#8251;必須</span></dt> <dd id="_field_user_name"><input type="text" class="inputs" name="user_name" value="<?php echo $form_field["user_name"]; ?>" placeholder="例)山田太郎" value=""></dd> そして確認画面がこちら。 <dt>御社名</dt> <dd><?php echo h($form_field['company_name']);?></dd> <dt>住所</dt> <dd><?php echo h($form_field['aaa']);?></dd> <dt>購入代理店名又は担当者名</dt> <dd><?php echo h($form_field['your_name']);?></dd> <dt>お名前</dt> <dd><?php echo h($form_field['user_name']);?></dd> 御社名とお名前は入力した文字が確認画面で反映されるのですが、他の2つは反映されません。 どなたかよろしくお願いいたします。

    • 締切済み
    • PHP
  • 3件目以降出力されないので4件目から出力したい

    <!--ループ1--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 ); $wp_query->query($my_posts); if ($wp_query->have_posts()) : $i = 0; $i <= 10; while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php if ($i >= 3) break; ?> <?php endwhile; ?> <?php endif; ?> <!--//ループ1--> <!--ループ2--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 ); $wp_query->query($my_posts); if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $i<=4; //iが4より小さい時は、while内のループ処理を実施する $i>3;break; //iが3より大きい時は、while文を・強制終了する $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php endwhile; ?> <?php endif; ?> <!--//ループ2--> 変数 i の値が 0 から → $i = 0 10 未満の間は、 → $i <= 10 i の値を1づつ加算しながら → i++ 以下の命令文を実行する。 continue; echo $i; //以降の処理をスキップして、次のループ処理を行う。 0から3まででbreakして, $i<=4; //iが4より小さい時は、while内のループ処理を実施する $i>3;break; //iが3より大きい時は、while文を強制終了する 3件で出力を止めたんですが、4件目から出力されません

    • ベストアンサー
    • PHP
  • Wordpressにおいてカスタム投稿の読み込み

    Wordpressにて美容系ポータルサイトを作っています。 お店情報のカスタム投稿 口コミのカスタム投稿 の二つ、そしてトップページとの連動を作りたいと思っています。 まずはお店情報にはサロン名やら営業時間やらキャンペーンメニューなどがポストタイプ(salon_posttype)にて入っています。 口コミには行ったサロン名や、感想、名前などがポストタイプ(review_posttype)で入っています。 そこでお店情報のページに、 そのお店の口コミの投稿を表示させたいと思っています。 つまり、review_posttypeにて入れた、'salonname'のキーがそのページのページ名=(サロン名)と同じであれば表示、で行けるかなと構文を書きましたが、ここからがわかません。 <?php query_posts('&post_type=review_posttype'); while(have_posts()) : the_post(); ?> <?php if( get_post_meta(get_the_ID(), 'salonname', true) != '' ):?> ↑↑↑ここを"もしsalonname=今見ているページの題名なら"にしたいです。↑↑↑ <p class="title"><?php echo get_post_meta(get_the_ID(), 'salonname', true);?></p> <p class="naiyou"><?php echo get_post_meta(get_the_ID(), 'review_naiyou', true);?></p> <p class="detail"><a href="<?php the_permalink() ?>">詳しくはこちら</a></p> <?php endif;?> <?php endwhile; ?> <?php wp_reset_query(); ?> どこをどうしたらいいでしょうか?そもそもここまでも合っていますか?

    • 締切済み
    • PHP
  • WooCommerceで支払いフォームの電話必須に

    WordpressのカートシステムプラグインWooCommerceで 支払いページの入力フォームのラベルをカスタムするのに、 Checkout Fields Manager for WooCommerceという無料プラグインがありますが、それが、 日本語最適化無料プログラムとバッティングするのか、 上手く働きません、という記事を読みました。 事実、私もそこでつまづいており、 支払いフォームのお客様の電話番号を「オプション」から「必須」に換えたいのですが、変更できません。 項目として、電話番号のみ必須になってくれれば今の所問題ないのですが、その方法を教えてくださいませんか? ちなみに、ChatGPTの方で教えて戴いた方法を記載しておきますが、 ↓以下が生成AIの回答でした。 まず、functions.phpファイルを編集するか、サイト専用のカスタムプラグインを作成します。 php // functions.php ファイルか、カスタムプラグイン内で以下のコードを追加 // チェックアウトページのフックを利用してフォームをカスタマイズ add_filter('woocommerce_checkout_fields', 'customize_checkout_fields'); function customize_checkout_fields($fields) { // 電話番号の部分を必須に設定 $fields['billing']['billing_phone']['required'] = true; return $fields; } このコードでは、woocommerce_checkout_fields フィルターを使用して、チェックアウトページのフォームをカスタマイズしています。billing_phone フィールドの required プロパティを true に設定することで、電話番号の入力を必須に変更します。 ↑以上、functions.phpにコピーして貼り付けたのですが、 上手く動きませんでした。

  • データベース単位でのCSV出力方法について

    データベース単位でのCSV出力方法について phpからデータベースのバックアップ機能として、 データベース単位でCSV出力を行いたいと思っています。 テーブル単位で出来る記事は見受けられるのですが、 上記の方法は可能でしょうか? それともう一つお聞きしたいことがあります。 SQL文が格納された変数をexec関数で実行しているのですが、 直接phpmyadminでは成功するのにもかかわらず、 csvファイルが生成されません。 下記にSQL文を記しておきます。 --SQL文-- select * from users into outfile "C:/works/~中略~/dump_0426.csv" fields terminated by ',' ENCLOSED BY '"' ご教授よろしくお願い致します。 【環境】 DB:mysql5.0.51b-community PHP:5.2.6

    • ベストアンサー
    • MySQL
  • getcharをしながらwhile文で出力すると一つ多く出力されるので

    getcharをしながらwhile文で出力すると一つ多く出力されるのです・・・。 変な現象に遭遇しました。1文字入力して「入力した文字は~です。」とxが入力されるまで繰り返してくださいというプログラムを書きました↓ #include <stdio.h> main() { char a; do { a = getchar(); printf("入力した文字は%cです。",a); } while(a != 'x'); } ところが実行して、たとえばキーボードのaを押してenterキーを押すと 入力した文字はaです。入力した文字は です。 と表示されるのです!!「入力した文字はaです。」だけでいいのに1つ多く出力されます。このソースは間違ってますか? すみません、教えてください(涙)

専門家に質問してみよう