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

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

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

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

PHP

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

Q&A

3回答

3392閲覧

Wordpress、single-***.phpの編集(Advanced Custom Fields使用)

jackie1993427

総合スコア66

WordPress

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

PHP

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

0グッド

0クリップ

投稿2016/02/12 11:33

編集2016/02/24 02:52

度々お世話になります。
PHP初心者です...。
Advanced Custom Fieldsを使用し、カスタム投稿を作成しています。
ラジオボタンの項目で、商品のバリエーションあり、なしの選択肢を作成いたしました。

  • フィールドラベル
    商品バリエーション
  • フィールド名
    size_color
  • 内容
    enable : ある(種類あり)
    disable : ない(種類なし)

というように設定し、
あるの場合は、出力が<form>にて選択するように、
ないの場合は<a href>にて直接リンク先に飛ばすようにしたいです。
なお、分岐させた中にも販売状況も反映させたいです。

Advanced Custom Fields側での設定は完了しており、(上記選択肢により、その後のカスタム投稿画面も条件で表示非表示設定がしてある)

問題は出力側です。

PHP

1get_header(); ?> 2 3 <div id="primary" class="content-area"> 4 <div id="content" class="site-content" role="main"> 5 <?php while ( have_posts() ) : the_post(); ?> 6 7 <?php 8 $txt = get_field('product_name'); 9 if($txt){ ?> <h1 class="entry-title"> <?php echo $txt; ?> </h1> 10 <? } 11 ?> 12 13 <div class="entry-content"> 14 <?php 15 $txt = get_field('product_image'); 16 if($txt){ ?> 17 <?php 18 if ( function_exists( 'soliloquy' ) ) { soliloquy($txt); } 19 } ?> 20 21 <?php 22 $txt = get_field('product_text'); 23 if($txt){ ?> 24 <div style="word-wrap:break-word";> 25 <h4><? echo $txt; ?></h4></div> 26 <? } 27 ?> 28 29 <?php 30 $txt = get_field('product_spec'); 31 if($txt){ ?> 32 <p><? echo $txt; ?></p> 33 <? } 34 ?> 35 36 <?php 37 $txt = get_field('price'); 38 if($txt){ ?> 39 <span style="font-size:40px; color:#FF0000;"> <? echo $txt; ?></span> 40 <? } 41 ?> 42 43 <span style="color: #ee0000;"> 44 (税込) 45 </span> 46 47 <?php 48 $radio = get_field('size_color'); 49 if(get_field(' size_color ') == "enable"){?> 50 <form> 51 <div class="sel" style="text-align: center; margin-top:10px;"> 52 <select name="select2"> 53 <?php 54 $txt = get_field('size_color_input'); 55 if($txt){ echo $txt; }?> 56 <? echo $txt; ?> 57 </select> 58 <?php 59 $select = get_field('sell'); 60 if($select){?> 61 <input class="<? echo $select; ?>" type="button" value="" onclick="top.location.href=select2.value"> 62 } 63 } 64 65 <?php 66 if(get_field(' size_color ') == "disable"){?> 67 <?php 68 $txt = get_field('variation_off'); 69 if($txt){ echo $txt; } 70 $select = get_field('sell'); 71 if($select){ echo $select; }?> 72 <a href="https://hoge.com/p_id=<? echo $txt; ?>" class="<? echo $select; ?>"> 73 <?php endwhile; ?> 74 75 76 </div><!-- #content --> 77 </div><!-- #primary --> 78 79 <?php if(get_theme_mod('portfolio_show_post_navigation', '1') == '1') : ?> 80 <?php 81 previous_post_link( 82 '<div id="prev-post">%link</div>', 83 '<i class="fa fa-arrow-left"></i>', 84 (get_theme_mod('portfolio_show_post_navigation_same_taxonomy', '0') == '0' ? FALSE : TRUE) 85 ); 86 ?> 87 <?php 88 next_post_link( 89 '<div id="next-post">%link</div>', 90 '<i class="fa fa-arrow-right"></i>', 91 (get_theme_mod('portfolio_show_post_navigation_same_taxonomy', '0') == '0' ? FALSE : TRUE) 92 ); 93 ?> 94 <?php endif; ?> 95 96 <?php get_template_part( 'content', 'footer' ); ?> 97 <?php comments_template(); ?> 98 99<?php get_footer(); ?>

$radioの前までですとしっかりと表示されます。しかし、
こちらですと、endwhileの部分でエラーが出てしまい、動作確認もできず...
おそらく$radio以降、書き方が間違えているのではないかと思っています。
お恥ずかしい話なのですが、どこが間違えているか、ご教示いただければと思います。

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

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

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

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

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

guest

回答3

0

下記、2か所訂正しましたら、シタックスエラーは消えます。
動作するかどうかは未検証です_(..)

引用テキスト <?php

$select = get_field('sell'); if($select){?> <input class="<? echo $select; ?>" type="button" value="" onclick="top.location.href=select2.value"> } }

この部分にphpの記載がないので下記の用に

<?php $select = get_field('sell'); if($select){?>
<input class="<? echo $select; ?>" type="button" value="" onclick="top.location.href=select2.value"> <?php } } ?>

引用テキスト <?php

if(get_field(' size_color ') == "disable"){?> <?php $txt = get_field('variation_off'); if($txt){ echo $txt; } $select = get_field('sell'); if($select){ echo $select; }?> <a href="https://hoge.com/p_id=<? echo $txt; ?>" class="<? echo $select; ?>"> <?php endwhile; ?>

この部分も終了がないのでシンタックスエラーになっています。

<?php if(get_field(' size_color ') == "disable"){?>
<?php $txt = get_field('variation_off'); if($txt){ echo $txt; } $select = get_field('sell'); if($select){ echo $select; }?> <a href="https://hoge.com/p_id=<? echo $txt; ?>" class="<? echo $select; ?>">
<?php } ?> <?php endwhile; ?>

投稿2016/07/22 09:57

p_q

総合スコア33

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

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

0

Advanced Custom Fields側での設定は完了しており、

Advanced Custom Fields で設定した項目がテキストなのかチェックボックスなのかがわからないため、出力方法が決められません。一旦 the_field() で書き換えてみてはいかがでしょう。

PHP

1// $txt = get_field('product_name'); 2// if($txt){ echo $txt; } 3// ↓ 4 the_field( 'product_name' ); // echo される

また、kurosawaさんが書かれているように、 " enable" " disable" ' size_color 'などの引用符に囲まれた中に空白が混ざると、意図しない挙動になる事があります。それぞれ、"enable" "disable" 'size_color'になさってください。

Advanced Custom Fields の出力の仕方をまとめている日本語のページがあったので、参考に添付します。

【私が愛してやまない、Advanced Custom Fields の使い方を詳細解説[ 出力編 ] | MAO PC エンジニア】
http://www.mao-engineer.jp/blog/wordpress/1288

(一部抜粋)

PHP

1<!-- >テキスト、テキストエリア、数値、メール、パスワード、Wysiwyg エディタ、デイトピッカー、セレクトボタン< --> 2<?php if( get_field('field_name') ): ?><?php the_field('field_name'); ?><?php endif; ?> 3<!-- >イメージの場合< --> 4<?php if( get_field('field_name') ): ?><img src="<?php the_field('field_name'); ?>" /><?php endif; ?> 5<!-- >ファイル/ページリンクの場合< --> 6<?php if( get_field('field_name') ): ?><a href="<?php the_field('field_name'); ?>" >ファイルをダウンロードする。</a><?php endif; ?> 7<!-- >ページリンクの場合< --> 8<div<?php if( get_field('field_name') ): ?> style="background-color:<?php the_field(' field_name '); ?>"<?php endif; ?>>ここにコンテンツが入ります。</div> 9<!-- >チェックボックスの場合< --> 10<?php if( get_field('field_name') ): ?><?php endif; ?> 11<!-- >OR< --> 12<?php 13if( get_field( 'field_name' ) ) { 14 if( in_array( 'test1', get_field( 'field_name' ) ) ) { 15 //test1 の場合の処理... 16 } 17} 18 ?>

投稿2016/04/05 05:48

kei344

総合スコア69398

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

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

0

PHPだけ抜き出し整形してみました。

閉じカッコが1個足りないようです。
最初にPHP箇所だけ記載してから、HTMLを埋めていく方が綺麗に記載できると思います。

あと " enable" とか " disable" の頭に空白が入ってますが、こちら大丈夫でしょうか?

php

1get_header(); 2while ( have_posts() ) : the_post(); 3 $txt = get_field('product_name'); 4 if($txt){ echo $txt; } 5 $txt = get_field('product_image'); 6 if($txt){ 7 if ( function_exists( 'soliloquy' ) ) { soliloquy($txt); } 8 } 9 $txt = get_field('product_text'); 10 if($txt){ } 11 $txt = get_field('product_spec'); 12 if($txt){ echo $txt; } 13 $txt = get_field('price'); 14 if($txt){ echo $txt; } 15 16 $radio = get_field('size_color'); 17 if(get_field(' size_color ') == " enable"){ 18 $txt = get_field('size_color_input'); 19 if($txt){ echo $txt; } 20 $select = get_field('sell'); 21 if($select){ 22 } 23 } 24 25 if(get_field(' size_color ') == " disable"){ 26 $txt = get_field('variation_off'); 27 $select = get_field('sell'); 28 if($txt){ echo $txt; } 29 30endwhile;

投稿2016/02/12 12:42

編集2016/02/12 12:44
kurosawa

総合スコア780

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

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

jackie1993427

2016/02/15 03:21

回答ありがとうございます。 上記で実装(html含め)してみたのですが、 シンタックスエラーが出てしまいます。 $txt = get_field('product_name'); if($txt){ echo $txt; } の部分からです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問