質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

2171閲覧

wordpressのカスタムフィールドで条件分岐したい

patapata1234

総合スコア26

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2017/04/24 03:29

編集2017/04/24 08:17

wordpressのカスタムフィールドで条件分岐したいです。
プラグインはAdvanced Custom Fieldsを使っています。
内容としましては動画のフィールドに項目がある場合は動画を表示させて、動画が無い場合は画像を表示させたいです。
どんな方法があるでしょうか?

<div class="clearfix"> <?php query_posts( $args ); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <div class="works"> <?php $youtube = get_post_meta($post->ID, 'youtube', true); ?> <?php if(!empty($youtube)):?> <div class="VideoWrapper"> <?php echo $embed_code = wp_oembed_get( get_field('youtube') ); ?> </div> <?php else:?> <div class="worksImg"> <img src="<?php echo $img['url']; ?>" alt="<?php echo $img['alt']; ?>" /> </div> <?php endif; ?> <div class="worksIco"> <h3><?php echo post_custom('crient'); ?></h3> <p><?php echo post_custom('content'); ?></p> </div> </div> <?php endwhile; ?> <?php else : ?> <h1>記事がありません</h1> <p>表示する記事はありませんでした。</p> <?php endif; ?> </div><!-- /clearfix -->

追記のコード↓

<?php // ループ条件を設定 $args = array( 'post_type' => array ('graphic','video','web'), /* 投稿タイプを指定 */ 'paged' => get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1, 'posts_per_page' => 10, // 表示件数 'order' => 'date', 'order' => 'DESC', ); ?> <div class="clearfix"> <?php query_posts( $args ); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <div class="works"> <?php $youtube = get_post_meta($post->ID, 'youtube', true); ?> <?php if(!empty($youtube)):?> <div class="VideoWrapper"> <?php echo $embed_code = wp_oembed_get( get_field('youtube') ); ?> </div> <?php else:?> <?php $img = get_field('img'); if( !empty($img) ): ?> <div class="worksImg"> <img src="<?php echo $img['url']; ?>" alt="<?php echo $img['alt']; ?>" /> </div> <?php endif; ?> <div class="worksIco"> <h3><?php echo post_custom('crient'); ?></h3> <p><?php echo post_custom('content'); ?></p> </div> </div> <?php endwhile; ?> <?php else : ?> <h1>記事がありません</h1> <p>表示する記事はありませんでした。</p> <?php endif; ?> </div><!-- /clearfix -->

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/04/24 03:45

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
patapata1234

2017/04/24 03:55

編集しました!ご教示いただきありがとうございましたm(_ _)m
kei344

2017/04/24 03:58

「動画のフィールドに項目がある場合は動画を表示させて、動画が無い場合は画像を表示させたい」がしたいことで「youtube(動画)の部分だけ出力されていて、img(画像)の中身が空の状態 」ならできているのでは?
patapata1234

2017/04/24 04:11

えっと、、、動画が空の場合はimg(画像)を出力したいのです。。。
kei344

2017/04/24 05:27

patapata1234さんの前にあるコードや環境について、こちらには情報がありません。そのページに動画が正しく設定されているか、画像が設定されているかの情報も無い状態です。また、先ほど書かれていた画像($img)を取得するコードが削除されていますが、どういう意図で削除されたのでしょうか。
guest

回答1

0

ベストアンサー

どの部分で詰まっているのかがわからないのでヒント的にこんな流れかな というものを提示します。

記事一覧を取得する 記事がある場合 ループ開始 if youtube登録有りの場合 youtubeを表示 else if img登録有りの場合 imgを表示 else youtube・img登録なしの場合の出力 endif //img有無 endif //youtube有無 ループ終了 記事がない場合 記事無し
  • 記事の取得ができない
  • youtubeの表示ができない
  • imgの表示ができない
  • 条件分岐の方法がわからない

以上のどれに当てはまりますか?


以下追記
「img」のカスタムフィールド登録時の「返り値」は「画像オブジェクト」ですよね?
こちらを参考にしましたが、配列からの情報をこんな感じにとるとやりやすいかもしれません。

php

1<?php 2$image = get_field('img'); 3 $url = $image['url']; 4 $alt = $image['alt']; 5 $title = $image['title']; 6 $size = 'thumbnail'; 7 $imgThumb = $image['sizes'][ $size ]; 8 $width = $image['sizes'][ $size . '-width' ]; 9?>

出力

<img src="<?php echo $imgThumb; ?>" width="<?php echo $width; ?>" alt="<?php echo $alt; ?>" />

返り値(画像オブジェクト、画像URL、画像ID)の違いで出力方法が違うので、お気を付けください。


更に追記
質問者様が使っているであろうコードでの対応

php

1<?php 2// ループ条件を設定 3$args = array( 4'post_type' => array ('graphic','video','web'), /* 投稿タイプを指定 */ 5'paged' => get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1, 6'posts_per_page' => 10, // 表示件数 7'order' => 'date', 8'order' => 'DESC', 9); 10?> 11 12<div class="clearfix"> 13 <?php query_posts( $args ); ?> 14 <?php if (have_posts()) : ?> 15 <?php while (have_posts()) : the_post();?> 16 <div class="works"> 17 <?php $youtube = get_post_meta($post->ID, 'youtube', true); ?> 18 <?php if(!empty($youtube)):?> 19 <div class="VideoWrapper"> 20 <?php echo $embed_code = wp_oembed_get( get_field('youtube') ); ?> 21 </div> 22 <?php else:?> 23 <?php $img = get_field('img'); ?> 24 <?php if( !empty($img) ): ?><!-- 分けるとわかりやすいかも --> 25 <div class="worksImg"> 26 <img src="<?php echo $img['url']; ?>" alt="<?php echo $img['alt']; ?>" /> 27 </div> 28 <?php endif; ?><!-- if( !empty($img) )分のend追加 --> 29 <?php endif; ?> 30 <div class="worksIco"> 31 <h3><?php echo post_custom('crient'); ?></h3> 32 <p><?php echo post_custom('content'); ?></p> 33 </div> 34 </div> 35 <?php endwhile; ?> 36 <?php else : ?> 37 <h1>記事がありません</h1> 38 <p>表示する記事はありませんでした。</p> 39 <?php endif; ?> 40</div><!-- /clearfix -->

投稿2017/04/24 07:06

編集2017/04/24 08:43
dit.

総合スコア3235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

patapata1234

2017/04/24 07:12

ご回答ありがとうございます! 現在はyoutubeだけ取得出来てimgのタグの中が空の状態です。 (imgを格納出来るタグは出ているのですが。<img src="">の状態です。) imgを出力出来れば完了だとは思うのですが。。。 コードを追記したのでご確認をお願いします。
patapata1234

2017/04/24 07:13

あと、記事の取得は出来ています! 画像の取得だけていない状況です。
dit.

2017/04/24 07:52

画像の取得、出力部分を回答に追記しました
patapata1234

2017/04/24 08:17

ご回答ありがとうございます! 試したのですが、先ほどと同じように画像を格納出来る箱だけ取得できていて、画像は表示されません(ToT) 他のアーカイブページでは <?php $img = get_field('img'); if( !empty($img) ): ?> 上記のコードで画像を取得しているのですがこのコードをそのまま入れると最後の<?php endwhile ?>でエラーが起きてしまいます。。。 コードを追記しましたので、ご確認をお願いいただけたらと思いますm(_ _)m
dit.

2017/04/24 08:36

追記コード23行目のif( !empty($img) )に対応する<?php endif; ?>が足りないように思います。 「youtube」があるかどうかのifと、「img」があるかどうかのif、さらにその外側に「記事が存在するか(have_posts)」のifがありますので、endifは計3つですね。 <div class="worksIco">の直前にもう一つ<?php endif; ?>入れてみていただけますか?
dit.

2017/04/24 08:52

あと、見過ごしてましたが 'orderby' => 'date', 'order' => 'DESC', かと…
patapata1234

2017/04/24 09:31

出来ました〜! <?php endif; ?>を減らす事はしたのですが、増やすとは盲点でしたorz ifの説明も詳しくしていただきありがとうございます! 勉強になりました! お忙しい中本当にありがとうございました!!
dit.

2017/04/24 09:46

解決できて良かったです! 私もまだまだ勉強中の身ですが、お役に立てたようなら嬉しいです。
patapata1234

2017/04/24 10:06

本当にありがとうございました! これで5時間ぐらい悩んでいたので助かりましたm(_ _)m また何かありましたらよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問