サポート » 使い方全般 » カスタムフィールド作ったラジオボタンの値で条件分岐したい

  • お世話になっております。
    セミナーの開催情報を投稿する際にカスタムフィールドで「開催中」「終了」をわけています。

    セミナー一覧ページを作成し、
    ページ上段に開催中のセミナーのリスト、
    ページ下段に終了したリストとして分けて表示をしたいのですがうまくいきません。

    上下段に開催中、終了の両方のタイトルが出力されてしまいます。

    まず、カスタムフィールドですが、
    「カスタムフィールドテンプレート」というプラグインを用いて

    [開催状況]
    type = radio
    value = 開催中 # 終了
    clearButton = true

    と設定しています。

    セミナー一覧ページについては以下のように記述をしています。

    <div>
    <?php $kaisai = get_post_meta($post->ID,”開催状況”,true); ?>
    <?php if ($kaisai == ‘開催中’): ?>
    <div id=”news-list” class=”clearfix”>
    <?php $posts = get_posts(‘numberposts=3&cat=3’); global $post;?>
    <?php foreach($posts as $post): ?>
    【出力内容 日付やタイトル】
    <?php endforeach; ?>
    </div>
    <?php else: ?>
    <div id=’contents5′>
    <p class=’align-center’>現在開催予定のセミナーはありません</p>
    </div>
    <?php endif; ?>
    </div>

    <?php $posts = get_posts(‘numberposts=10&cat=3’); global $post;?>
    <?php $kaisai = get_post_meta($post->ID,”開催状況”,true); ?>
    <?php if ($kaisai == ‘終了’): ?>
    <?php foreach($posts as $post): ?>
    【出力内容 日付やタイトル】
    <?php endforeach; ?>
    <?php endif; ?>

    現在は上下両方に開催中、終了の両方の情報が重複して出力されてしまっていますが、
    これを上段には開催中、下段には終了の情報を分けて取り出すためにはどのように修正すればよいでしょうか?

    ご教示いただければ幸いです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • こんにちわ、tkj_tkjさん。

    いまいちど、Codex の get_posts の記述の仕方を確認し、 tkj_tkjさんの記述コードを比較してみてください。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    追記ですが、

    http://tipsbear.com/wordpress-radio-customfields/

    こちらの記事のプラグインで「ループ内で実装する」見る限り、

    <?php $kaisai = get_post_meta($post->ID,”開催状況”,true); ?>
    <?php if ($kaisai == ‘開催中’): ?>

    この記述で、開催中のカスタムフィールドが選ばれたものが出力される、ということで間違いなさそうなのですが、
    開催中も終了も両方とも出力されてしまいます。
    なぜなのでしょうか・・・

    こんにちわ、tkj_tkjさん。

    いまいちど、Codex の get_posts の記述の仕方を確認し、 tkj_tkjさんの記述コードを比較してみてください。

    モデレーター gatespace

    (@gatespace)

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    gatepaceさん

    ご回答ありがとうございます。

    以下のように変更した結果、

    <?php $kaisai = get_post_meta($post->ID,"開催状況",true); ?>
    <?php if ($kaisai == '開催中'): ?>
    <div id="news-list" class="clearfix">
    <?php
    $args = array(
    	'post_type' => 'post',
    	'meta_query' => array(
    		array(
    			'key' => '開催状況',
    			'value' => '開催中',
    		)
    	)
     );
    $posts = get_posts($args); global $post;?>

    ページ上段には「開催中」の記事が出てくるようになったのですが、
    ページ下段の「終了」については記事が出力されなくなりました。
    ※いままでは上段も下段も開催中、終了の記事問わず出力されていたので前進ではあります。ありがとうございます。

    <?php
    $args2 = array(
    	'post_type' => 'post',
    	'meta_query' => array(
    		array(
    			'key' => '開催状況',
    			'value' => '終了',
    		)
    	)
     );
    $posts = get_posts($args2); global $post;?>
    <?php $kaisai = get_post_meta($post->ID,"開催状況",true); ?>
    <?php if ($kaisai == '終了'): ?>

    もし理由がわかればご指南いただければ助かります。。。

    モデレーター gatespace

    (@gatespace)

    そもそも

    セミナー一覧ページを作成し、

    これがどういったページなのかさっぱり分かりません。
    なので、get_posts よりにカスタムフィールドの値で条件分岐をしている意味が分かりません。

    まず、get_posts を実行時にカスタムフィールドの値で絞り込みをした方が良いのでは?
    Codex の get_posts にも書いてありますが、ループの作り方もまずいような
    ざっくりとした例

    <?php
    $args = array(
      'posts_per_page' => 5,
      'meta_query' => array(
        array(
          'key' => 'name', // カスタムフィールドの名前
          'value' => 'value', // // カスタムフィールドの値
        )
      )
    );
    $myposts = get_posts( $args );
    global $post; // テンプレートファイル内なら書かなくても良い
    foreach ( $myposts as $post ) : setup_postdata( $post );
       global $post;
      // マークアップはお好みで
    endforeach;
    wp_reset_postdata();
    
    $args2 = array(
      'posts_per_page' => 5,
      'meta_query' => array(
        array(
          'key' => 'name', // カスタムフィールドの名前
          'value' => 'value', // // カスタムフィールドの値
        )
      )
    );
    $myposts2 = get_posts( $args2 );
    foreach ( $myposts2 as $post ) : setup_postdata( $post );
      // マークアップはお好みで
    endforeach;
    wp_reset_postdata();
    ?>

    あとは var_dump() 使うなりして変数の中身を確認してみるとか。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    説明が少なく申し訳ございません。

    セミナー一覧ページとは
    これから開催するセミナーと既に実施したセミナーを上下に分けて一覧表示するページを想定しています。

    よって、

    [開催状況]
    type = radio
    value = 開催中 # 終了
    clearButton = true

    このようなカスタムフィールドを設けました。

    意図としては
    上段に開催状況と開催中というカスタムフィールドで条件分岐し出力、
    下段に開催状況と終了というカスタムフィールドで条件分岐し出力、
    という出力方法を想定しています。

    上記例を参考にさせていただきもう少し試行錯誤してみます。
    ありがとうございます。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    セミナーの開催情報を投稿する際にカスタムフィールドで「開催中」「終了」をわけています。

    セミナー一覧ページを作成し、
    ページ上段に開催中のセミナーのリスト、
    ページ下段に終了したリストとして分けて表示をしたいのですがうまくいきません。

    申し訳ございません、以前に書いた内容とほぼ同じですね・・・
    なんと書けばご理解いただけるか・・・ちょっと考えてみます。

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    ありがとうございます。
    以下のコードでうまく表示されました。

    <div id="news-list" class="clearfix">
    
    <?php
    $args = array(
      'posts_per_page' => 5,
      'meta_query' => array(
        array(
          'key' => '開催状況',
          'value' => '開催中',
        )
      )
    );
    $myposts = get_posts( $args );
    foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    【出力内容 日付やタイトル】
    <?php endforeach;
    wp_reset_postdata();?>
    
    </div>
    <!--///div#news-list-->

    この下に「開催中」を「終了」に変更したものを置くことで上下で開催中と終了したセミナーに出し分けることができました。

    ただ、当初開催中のセミナーがない場合は

    <?php else: ?>
    <div id='contents5'>
    <p class='align-center'>現在開催予定のセミナーはありません</p>
    </div>
    <?php endif; ?>

    と<?php else: ?>を用いていたのですが、
    上記の記述で<?php else: ?>を用いるとシンタックスエラーが発生してしまいました。

    開催中の記事がない場合の条件分岐で発生させる場合は何を使うべきなのでしょうか?

    モデレーター gatespace

    (@gatespace)

    else は if とセットです。

    「当初開催中のセミナーがない場合」という条件をどこかに足さないと。

    ヒント:$myposts = get_posts( $args ); が「ある場合」と「無い場合」ですかね

    トピック投稿者 tkj_tkj

    (@tkj_tkj)

    ありがとうございます!

    なんでもかんでも質問してしまって申し訳ございません。。。

    確認してみます。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「カスタムフィールド作ったラジオボタンの値で条件分岐したい」には新たに返信することはできません。