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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

3回答

4332閲覧

wordpressプラグイン Smart Custom Fieldsの繰り返し内容を回数制限したい

dondon1965

総合スコア17

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2020/07/17 06:51

お世話になっております。良くわからないので質問させていただきます。

WORDPRESsのプラグインSmart Custom Fieldsで投稿画像を繰り返しにて出力
以下の内容にて3カラムで登録した画像はすべて出力できました。
これを登録した画像の最初の3枚のみ出力したいと考えております。

Custom Post Type UIプラグイン

カスタム投稿名:work
タクソノミー名:work_cate

smart custom fieldsプラグイン

グループ名=works_album
画像写真=works_photo
画像タイトル=works_photo_title
画像の説明=works_photo_description

PHP

1<ul> 2<?php 3$args = array( 4 'post_type' => 'work', 5 'posts_per_page' => -1, 6 'work_cate' => $cat->slug 7); 8$my_posts = get_posts( $args ); 9if ( $my_posts ) { // 該当する投稿があったら 10 foreach ( $my_posts as $post ) : 11 setup_postdata( $post ); 12 ?> 13 14 <li> 15 16 <h1 class="h3_title"><?php the_title(); ?></h1> 17 <?php the_content(); ?> 18 19 20 21 <ul class="three_column"> 22 23 <?php 24$imggroup = SCF::get('works_album'); 25foreach ($imggroup as $fields ) { 26 $imgurl = wp_get_attachment_image_src($fields['works_photo'] , 'full'); 27?> 28<li> 29<img src="<?php echo $imgurl[0]; ?>"></a> 30 <h2><?php echo nl2br($fields['works_photo_title']); ?></h2> 31 <div class="photo_description"><?php echo nl2br($fields['works_photo_description']); ?></div></li> 32<?php } ?> 33 34 </ul> 35 36 </li> 37 38 39 <?php 40 endforeach; 41} else { 42 echo 'このカテゴリに投稿はありません'; 43} 44wp_reset_postdata(); 45?> 46 47</ul>

その後、上記コードだとwork_albumの画像がすべて出力されてしまうため
画像の枚数制限をしたいと考えました。(記事タイトル・本文はそのままの出力で smart cutom Fieldsに登録した画像の最初の3枚のみを表示)
ググってみたところbreakを使えばいいという記事を見つけたので
見よう見まねでコードを書いてみました。

PHP

1<ul> 2<?php 3$args = array( 4 'post_type' => 'work', 5 'posts_per_page' => -1, 6 'work_cate' => $cat->slug 7); 8$my_posts = get_posts( $args ); 9if ( $my_posts ) { // 該当する投稿があったら 10 foreach ( $my_posts as $post ) : 11 setup_postdata( $post ); 12 ?> 13 14 <li> 15 16 <h1 class="h3_title"><?php the_title(); ?></h1> 17 <?php the_content(); ?> 18 19 20 21 <ul class="three_column"> 22 23 <?php 24$imggroup = SCF::get('works_album'); 25$i = 0; 26foreach ($imggroup as $fields ) { 27 $imgurl = wp_get_attachment_image_src($fields['works_photo'] , 'full'); 28 if($i >= 3){ 29 break; 30?> 31<li> 32<img src="<?php echo $imgurl[0]; ?>"></a> 33 <h2><?php echo nl2br($fields['works_photo_title']); ?></h2> 34 <div class="photo_description"><?php echo nl2br($fields['works_photo_description']); ?></div></li> 35<?php $i++; 36} ?> 37 38 </ul> 39 40 </li> 41 42 43 <?php 44 endforeach; 45} else { 46 echo 'このカテゴリに投稿はありません'; 47} 48wp_reset_postdata(); 49?> 50 51</ul> 52 53

これで実行したところ
syntax error, unexpected 'endforeach' (T_ENDFOREACH) in
のエラーが出ました。
文法が違うため出たエラーだと思いますが
当方PHPの知識が乏しくどのように記載していいかよくわかりません。

大変お手数ですがどなたかご教授をいただけますと助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

syntax error, unexpected 'endforeach' (T_ENDFOREACH) in

のエラーが出ました。
文法が違うため出たエラーだと思いますが

文法違いといえば、違いですが、 endforeach がいきなり出てきたというエラーなので、 ループ や 条件判断のブロックがずれた場合に発生するエラーです。

今回の break を入れたプログラムの場合では、括弧の数が合わないようです。

break; のあとに if の 閉じカッコ } が抜けていませんか?

WordPress の場合、HTML が混在するので、なかなか難しい麺もあると思いますが、インデントを揃えておけば、カッコなどが抜けた場合に インデントがずれるので見つけやすいと思います。

<ul> <?php $args = array( 'post_type' => 'work', 'posts_per_page' => -1, 'work_cate' => $cat->slug ); $my_posts = get_posts( $args ); if ( $my_posts ) { // 該当する投稿があったら foreach ( $my_posts as $post ) : setup_postdata( $post ); ?> <li> <h1 class="h3_title"><?php the_title(); ?></h1> <?php the_content(); ?> <ul class="three_column"> <?php $imggroup = SCF::get('works_album'); $i = 0; foreach ($imggroup as $fields ) { $imgurl = wp_get_attachment_image_src($fields['works_photo'] , 'full'); if($i >= 3){ break; // ここに if のとじカッコがいるのでは? ?> <li> <img src="<?php echo $imgurl[0]; ?>"></a> <h2><?php echo nl2br($fields['works_photo_title']); ?></h2> <div class="photo_description"><?php echo nl2br($fields['works_photo_description']); ?></div></li> <?php $i++; // インデントのズレがある。 } ?> // foreach の閉じカッコ </ul> </li> <?php endforeach; } else { echo 'このカテゴリに投稿はありません'; } wp_reset_postdata(); ?> </ul>

個人的な好みですが、ループの途中で抜けるより、ループの最後でカウントアップしているのであれば、カウントアップした直後に条件判断して抜けたほうが無駄が少ないと思います。

// (略) <div class="photo_description"><?php echo nl2br($fields['works_photo_description']); ?></div></li> <?php $i++; if($i >= 3){ break; } } ?> // foreach の閉じカッコ // (略)

投稿2020/07/17 08:24

CHERRY

総合スコア25218

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

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

dondon1965

2020/07/17 19:33

CHERRYさま 毎回ご指導いただきありがとうございます。ほとんど回答をお教えいただいたようなものですがw 感謝申し上げます。
guest

0

ご教授いただき感謝申し上げます。
以下の内容で解決いたしました。ありがとうございました。

PHP

1 <ul> 2<?php 3$args = array( 4 'post_type' => 'work', 5 'posts_per_page' => -1, 6 'work_cate' => $cat->slug 7); 8$my_posts = get_posts( $args ); 9if ( $my_posts ) { // 該当する投稿があったら 10 foreach ( $my_posts as $post ) : 11 setup_postdata( $post ); 12 ?> 13 14 <li> 15 16 <h1 class="h3_title"><?php the_title(); ?></h1> 17 <?php the_content(); ?> 18 19 20 21 <ul class="three_column"> 22 23 <?php 24$imggroup = SCF::get('works_album'); 25$i = 0; 26foreach ($imggroup as $fields ) { 27 $imgurl = wp_get_attachment_image_src($fields['works_photo'] , 'full'); 28?> 29<li> 30<img src="<?php echo $imgurl[0]; ?>"></a> 31 <h2><?php echo nl2br($fields['works_photo_title']); ?></h2> 32 <div class="photo_description"><?php echo nl2br($fields['works_photo_description']); ?></div></li> 33 <?php $i++; 34 if($i >= 3){ 35 break; 36 } 37 } ?> 38 39 </ul> 40 41 </li> 42 43 44 <?php 45 endforeach; 46} else { 47 echo 'このカテゴリに投稿はありません'; 48} 49wp_reset_postdata(); 50?> 51 52</ul>

投稿2020/07/17 19:37

dondon1965

総合スコア17

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

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

0

foreach ($imggroup as $fields ) { で始めているので endforeach; ではなく } です。

投稿2020/07/17 08:19

kei344

総合スコア69606

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

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

CHERRY

2020/07/17 08:25 編集

その foreach の前に ` foreach ( $my_posts as $post ) : ` があるので 追加した if 部分の `}` 抜けだとおもいます。
kei344

2020/07/17 08:27

To: CHERRYさん 確かにそうですね、見落としていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問