サポート » 使い方全般 » 入力済みのカスタムフィールドの表示期限が切れたらエリアごと非表示に

  • 解決済 miso0nok

    (@miso0nok)


    お世話になります。
    カスタム投稿タイプとカスタムフィールドを用いて、クーポンサイトを作成しています。

    カスタムフィールド「Aクーポン」「Bクーポン」がそれぞれ入力されている状態で
    「Aクーポン」の表示期限が切れた場合は「Bクーポン」の内容を、
    「Bクーポン」の表示期限が切れた場合は「Aクーポン」の内容を、
    どちらも表示期限が切れている場合はエリアそのものを非表示にさせたいのですが、うまくいきません。

    <?php if(post_custom('Aクーポン')): ?>
    <!-- 非表示にさせたいエリア ここから -->
    	<img src="coupon_title.gif" width="470" height="93" alt="" class="coupon_title" />
    	<div class="shopbox2">
    
    		<?php date_default_timezone_set('Asia/Tokyo');
    		$Astart = get_post_meta($post->ID,'Aクーポンstart',TRUE);
    		$Astartdate = ($Astart-1)."25";
    		$Aend = get_post_meta($post->ID,'Aクーポンend',TRUE);
    		$Aenddate = ($Astart)."25";
    		if (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate ){ ?>
    
    		<div class="becocoupon"><?php echo get_post_meta($post->ID,'Aクーポン',TRUE); ?></div>
    		<div class="couponcomment"><?php echo get_post_meta($post->ID,'Aコメント',TRUE); ?>&emsp;
    		※クーポンについての説明文</div>
    		<?php } ?>
    	</div><!-- .shopbox2 -->
    <!-- 非表示にさせたいエリア ここまで -->
    <?php endif; ?>
    
    <?php if(post_custom('Bクーポン')): ?>
    <!-- 非表示にさせたいエリア ここから -->
    	<img src="coupon_title.gif" width="470" height="93" alt="" class="coupon_title" />
    	<div class="shopbox2">
    
    		<?php date_default_timezone_set('Asia/Tokyo');
    		$Bstart = get_post_meta($post->ID,'Bクーポンstart',TRUE);
    		$Bstartdate = ($Bstart-1)."25";
    		$Bend = get_post_meta($post->ID,'Bクーポンend',TRUE);
    		$Benddate = ($Bstart)."25";
    		if (date("Ymd") >= $Bstartdate && date("Ymd") < $Benddate ){ ?>
    
    		<div class="becocoupon"><?php echo get_post_meta($post->ID,'Bクーポン',TRUE); ?></div>
    		<div class="couponcomment"><?php echo get_post_meta($post->ID,'Bコメント',TRUE); ?>&emsp;
    		※クーポンについての説明文</div>
    		<?php } ?>
    	</div><!-- .shopbox2 -->
    <!-- 非表示にさせたいエリア ここまで -->
    <?php endif; ?>

    「Aクーポン」「Bクーポン」それぞれに表示期限を設定しているために、
    表示期限が切れてもカスタムフィールドに入力された値は存在しているので
    エリアが表示されてしまうのでは、と思ったのですが…。

    なお、

    <?php date_default_timezone_set('Asia/Tokyo');
    		$Astart = get_post_meta($post->ID,'Aクーポンstart',TRUE);
    		$Astartdate = ($Astart-1)."25";
    		$Aend = get_post_meta($post->ID,'Aクーポンend',TRUE);
    		$Aenddate = ($Astart)."25";
    		if (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate ){ ?>

    の箇所は前任者の記述したコードの為、ご質問頂いてもうまくお答えできないかもしれません。申し訳ありません。
    「Aクーポン」「Bクーポン」それぞれを毎月25日の午前0時で表示を切り替える、という内容のコードのようです。

    分かりづらい質問で申し訳ありません。
    ご教授いただければ幸いです。
    よろしくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 初めまして。

    現在のソースを見ると以下のようです。

    • Aクーポン表示期間内 → Aクーポン表示
    • Bクーポン表示期間内 → Bクーポン表示

    質問の内容から、Aクーポンの表示期間の有効・無効、Bクーポン表示期間の有効・無効で2×2のマトリックスを作ると以下になります。

    1. Aクーポン(無効)、Bクーポン(無効) → 表示無し
    2. Aクーポン(無効)、Bクーポン(有効) → Bクーポンを表示
    3. Aクーポン(有効)、Bクーポン(無効) → Aクーポンを表示
    4. Aクーポン(有効)、Bクーポン(有効) → AクーポンとBクーポンを表示?

    4. の表示内容が質問からは読み取れませんが、

    各クーポンの表示を行うかの判定を先に行う

    ように考えてはいかがでしょうか?

    詳細コードは割愛しますが、こんな感じです。

    <?php
    $isAdisplay = false;
    $isBdisplay = false;
    if (Aクーポンがあり、かつ表示期間が有効) {
      if (Bクーポンがあり、かつ表示期間が有効) {
        // Aクーポンを表示させない場合は以下をコメントアウトすること
        $isAdisplay = true;
        // Bクーポンを表示させない場合は以下をコメントアウトすること
        $isBdisplay = true;
      } elseif {  // Bクーポン表示期間が無効
        $isAdisplay = true;
      }
    } elseif {  // Aクーポン表示期間が無効
      if (Bクーポンがあり、かつ表示期間が有効) {
        $isBdisplay = true;
      } elseif {  // Bクーポン表示期間が無効
        // 表示クーポン無し
      }
    }
    
    // タイトルイメージが1か所表示の場合
    if (($isAdisplay == true) || ($isBdisplay == true)) {
     // タイトル表示
    }
    
    if ($isAdisplay == true) {
      // Aクーポン表示処理
    }
    if ($isBdisplay == true) {
      // Bクーポン表示処理
    }
    トピック投稿者 miso0nok

    (@miso0nok)

    shirakobato様、ありがとうございます。

    4. の場合の表示内容ですが、
    今回のサイトでは、AクーポンとBクーポン、どちらか必ず一方のみを有効にする、という形を取っているので
    4. の場合の条件は考えておりませんでした。

    また、当方PHPにはさほど明るくないもので
    もう少々ヒントを頂けましたら幸いです…。

    我儘ばかりで本当に申し訳ありません。
    なにとぞ、よろしくお願いいたします。

    トピック投稿者 miso0nok

    (@miso0nok)

    shirakobato様

    ご提示いただきましたコードを参考に、PHPを記述してみましたが、エラーとなってしまいました。
    ご教授いただけましたら幸いです。

    <?php
    $isAdisplay = false;
    $isBdisplay = false;
    if ('Aクーポン' && (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate )) {
      if ('Bクーポン' && (date("Ymd") >= $Bstartdate && date("Ymd") < $Benddate )) {
        // Aクーポンを表示させない場合は以下をコメントアウトすること
        $isAdisplay = true;
        // Bクーポンを表示させない場合は以下をコメントアウトすること
        $isBdisplay = true;
      } elseif {  // Bクーポン表示期間が無効
        $isAdisplay = true;
      }
    } elseif {  // Aクーポン表示期間が無効
      if ('Bクーポン' && (date("Ymd") >= $Bstartdate && date("Ymd") < $Benddate )) {
        $isBdisplay = true;
      } elseif {  // Bクーポン表示期間が無効
        // 表示クーポン無し
      }
    }
    
    // タイトルイメージが1か所表示の場合
    if (($isAdisplay == true) || ($isBdisplay == true)) {
    <img src="coupon_title.gif" width="470" height="93" alt="" class="coupon_title" />
    }
    
    if ($isAdisplay == true) {
    <div class="shopbox2">
    
    	<?php date_default_timezone_set('Asia/Tokyo');
    	$Astart = get_post_meta($post->ID,'Aクーポンstart',TRUE);
    	$Astartdate = ($Astart-1)."25";
    	$Aend = get_post_meta($post->ID,'Aクーポンend',TRUE);
    	$Aenddate = ($Astart)."25";
    	if (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate ){ ?>
    
    	<div class="becocoupon"><?php echo get_post_meta($post->ID,'Aクーポン',TRUE); ?></div>
    	<div class="couponcomment"><?php echo get_post_meta($post->ID,'Aコメント',TRUE); ?> 
    	※クーポンについての説明文</div>
    	<?php } ?>
    </div><!-- .shopbox2 -->
    }
    if ($isBdisplay == true) {
    <div class="shopbox2">
    	<?php date_default_timezone_set('Asia/Tokyo');
    	$Bstart = get_post_meta($post->ID,'Bクーポンstart',TRUE);
    	$Bstartdate = ($Bstart-1)."25";
    	$Bend = get_post_meta($post->ID,'Bクーポンend',TRUE);
    	$Benddate = ($Bstart)."25";
    	if (date("Ymd") >= $Bstartdate && date("Ymd") < $Benddate ){ ?>
    
    	<div class="becocoupon"><?php echo get_post_meta($post->ID,'Bクーポン',TRUE); ?></div>
    	<div class="couponcomment"><?php echo get_post_meta($post->ID,'Bコメント',TRUE); ?> 
    	※クーポンについての説明文</div>
    	<?php } ?>
    </div><!-- .shopbox2 -->
    }

    こんにちは。

    どこまで回答すべきか、このフォーラムの趣旨を考えながら回答いたします。
    ※カスタムフィールドの使い方という点ではWordPressに関連していますが、主な回答内容がPHPの実装であり、そのような質問が増えると、まずいと思いますので。

    以下は私が思うサイト表示前提条件です。
    実際はどうであるか、確認をお願いします。

    1. 各投稿には「Aクーポン」、「Bクーポン」というカスタムフィールドがある
    2. 上記のカスタムフィールには「各クーポンの有効年月」が入力される
    3. 各クーポンの有効期限は入力した有効年月の「前月25日~当月24日まで」である

    詳細不明となっている以下のコードで

    <?php date_default_timezone_set('Asia/Tokyo');
    		$Astart = get_post_meta($post->ID,'Aクーポンstart',TRUE);
    		$Astartdate = ($Astart-1)."25";
    		$Aend = get_post_meta($post->ID,'Aクーポンend',TRUE);
    		$Aenddate = ($Astart)."25";

    $AstartdateがAクーポン表示開始年月日、$AenddateがAクーポン表示終了年月日です。

    カスタムフィールドからの内容取り出しにはWP組み込み関数のget_post_meta関数を使用しています。
    また、表示期間範囲内かはPHPの組み込み関数のdate関数を使用しています。
    if (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate ){

    if ('Aクーポン' && (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate )) {
    の前に$Astartdate、$Aenddateの値を設定して下さい。
    また、'Aクーポン' &&は今回は不要ですので削除して下さい。
    Bクーポンの場合も同様です。

    WordPressの実装にはPHPとHTML、CSSの知識が必須ですので、ソースを読みながら不明点をサイトで調べ、知識を増やしていくことをお勧めします。

    また、納期等がせまっている状況ならば、この部分だけでも外注するのも一つの手かもしれません。おそらく数千円でやってくれると思います。

    追加です。

    if ($isAdisplay == true) {
    <div class="shopbox2">
    
    	<?php date_default_timezone_set('Asia/Tokyo');
    	$Astart = get_post_meta($post->ID,'Aクーポンstart',TRUE);
    	$Astartdate = ($Astart-1)."25";
    	$Aend = get_post_meta($post->ID,'Aクーポンend',TRUE);
    	$Aenddate = ($Astart)."25";
    	if (date("Ymd") >= $Astartdate && date("Ymd") < $Aenddate ){ ?>

    の部分は、以下となります。

    if ($isAdisplay == true) {
    <div class="shopbox2">
    	<div class="becocoupon"><?php echo get_post_meta($post->ID,'Aクーポン',TRUE); ?></div>
    	<div class="couponcomment"><?php echo get_post_meta($post->ID,'Aコメント',TRUE); ?> 
    	※クーポンについての説明文</div>
    </div>

    トピック投稿者 miso0nok

    (@miso0nok)

    shirakobato様

    まずはお返事が遅くなってしまったこと、お詫び申し上げます。

    場違いの質問にもかかわらず、重ね重ねご丁寧に、本当にありがとうございます。

    サイト表示前提条件は、ご提示のもので間違っておりません。その通りの条件でした。

    教えていただいたコードと内容を参考に組み立ててみます。
    そして、PHPとHTML、CSSの勉強ももっと深めていきたいと思います。

    このたびは、本当にありがとうございました。

    トピック投稿者 miso0nok

    (@miso0nok)

    投稿のタイトルが消えてしまっているようなのですが、どうすれば良いのでしょうか?

    ひとまず解決済みとさせていただきます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「入力済みのカスタムフィールドの表示期限が切れたらエリアごと非表示に」には新たに返信することはできません。