web-dev-qa-db-ja.com

カスタムメタボックスの日付が期限切れでない場合にのみみ投稿を表示する

カスタム投稿の表示に問題があります - カスタムフィールドに設定された日付が過ぎていない場合にのみ各投稿を表示したいです。

コード内のif文をどこに置くべきかわからない。私の考えは:

if($daysleft >= 0)
 then execute the while "custom post";

次のコードは、すべてのカスタム投稿(期限切れと期限切れなしの両方)を表示しています。

<?php               
while(have_posts() ) : the_post();
$date = get_post_meta($post->ID, '_single_date', true); 
$daysleft = round( ($date-time()) / 24 / 60 / 60);  ?>

<div class="coupon-date">
<?php
if($date == '')_e('valid', 'Couponize');
else if($daysleft <= 0) _e('expired', 'Couponize'); 
else echo sprintf( _n('%d day left.', '%d days left.', $daysleft, 'Couponize'), $daysleft ); 
?>
2
anandmongol

あなたのループwhile(have_posts() ) : the_post();では無条件にすべての投稿を通過していますが、ループはthe_post()の後で停止するので実際には何も起こりません。だからそれは条件が行く必要があるところです:

while(have_posts() ) {
    the_post();
    if ($daysleft >= 0) {
         ... other actions
         }
    }

あなたのコードは私には少し不完全に見えるので、私の正確なコードが機能するかどうかはわかりませんが、これは間違いなくあなたが条件を望むところです。

たとえば、15件の投稿がクエリから返された場合、そのうちのいくつかが期限切れになっていると表示されなくなる可能性があります。固定量を表示したい場合は、クエリの結果を表示するループではなく、クエリ自体を変更してはいけません。

1
cjbj