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

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,644

jackie1993427

score 52

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

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

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

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

問題は出力側です。

get_header(); ?>

    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
            <?php while ( have_posts() ) : the_post(); ?>

            <?php
            $txt = get_field('product_name');
            if($txt){ ?> <h1 class="entry-title"> <?php echo $txt; ?> </h1>
            <? }
            ?>

            <div class="entry-content">
            <?php
                        $txt = get_field('product_image');
                        if($txt){ ?>
                      <?php
            if ( function_exists( 'soliloquy' ) ) { soliloquy($txt); }
            } ?>

            <?php
                        $txt = get_field('product_text');
                        if($txt){ ?>
                        <div style="word-wrap:break-word";>
                        <h4><? echo $txt; ?></h4></div>
                        <? }
            ?>

            <?php
                        $txt = get_field('product_spec');
                        if($txt){ ?>
                        <p><? echo $txt; ?></p>
                        <? }
            ?>

                  <?php
                    $txt = get_field('price');
                    if($txt){ ?>
                   <span style="font-size:40px; color:#FF0000;"> <? echo $txt; ?></span>
                    <? }
            ?>

                  <span style="color: #ee0000;">
                  (税込)
                  </span>

            <?php
            $radio = get_field('size_color'); 
            if(get_field(' size_color ') == "enable"){?>
            <form>
            <div class="sel" style="text-align: center; margin-top:10px;">
            <select name="select2">
            <?php
            $txt = get_field('size_color_input');
            if($txt){ echo $txt; }?>
            <? echo $txt; ?>
            </select>
            <?php
            $select = get_field('sell');
            if($select){?>
            <input class="<? echo $select; ?>" type="button" value="" onclick="top.location.href=select2.value">
            }
            }

            <?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; ?>


        </div><!-- #content -->
    </div><!-- #primary -->

    <?php if(get_theme_mod('portfolio_show_post_navigation', '1') == '1') : ?>
    <?php 
        previous_post_link( 
            '<div id="prev-post">%link</div>', 
            '<i class="fa fa-arrow-left"></i>', 
            (get_theme_mod('portfolio_show_post_navigation_same_taxonomy', '0') == '0' ? FALSE : TRUE)
        ); 
    ?>
    <?php 
        next_post_link( 
            '<div id="next-post">%link</div>', 
            '<i class="fa fa-arrow-right"></i>', 
            (get_theme_mod('portfolio_show_post_navigation_same_taxonomy', '0') == '0' ? FALSE : TRUE)
        ); 
    ?>
    <?php endif; ?>

    <?php get_template_part( 'content', 'footer' ); ?>
    <?php comments_template(); ?>

<?php get_footer(); ?>

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

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

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

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

get_header();
while ( have_posts() ) : the_post();
  $txt = get_field('product_name');
  if($txt){ echo $txt; }
  $txt = get_field('product_image');
  if($txt){
    if ( function_exists( 'soliloquy' ) ) { soliloquy($txt); }
  }
  $txt = get_field('product_text');
  if($txt){ }
  $txt = get_field('product_spec');
  if($txt){ echo $txt; }
  $txt = get_field('price');
  if($txt){ echo $txt; }

  $radio = get_field('size_color'); 
  if(get_field(' size_color ') == " enable"){
    $txt = get_field('size_color_input');
    if($txt){ echo $txt; }
    $select = get_field('sell');
    if($select){
    }
  }

  if(get_field(' size_color ') == " disable"){
    $txt = get_field('variation_off');
    $select = get_field('sell');
    if($txt){ echo $txt; }

endwhile;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/15 12:21

    回答ありがとうございます。
    上記で実装(html含め)してみたのですが、
    シンタックスエラーが出てしまいます。

    $txt = get_field('product_name');
    if($txt){ echo $txt; }

    の部分からです。

    キャンセル

0

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

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

//   $txt = get_field('product_name');
//   if($txt){ echo $txt; }
// ↓
  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

(一部抜粋)

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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; ?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる