我在事件页面上有几个日期查询,该页面根据帖子的月份和年份输出事件帖子。每个帖子都有一个YYYY mm dd格式的自定义日期字段和一个相应的年和月自定义字段。“事件”页面上的月份以11个月为周期,从当前月份开始,通过选项卡,用户可以查看10个月内的每个月。问题是,有时某些月份(通常是两个标签)比预期的时间晚了一年。很难指出哪个选项卡是问题所在,因为它们每个月都是随机的,并且选项卡两侧不正确的选项卡实际上是正确的。很难解释,但下面是我的代码,它显示了我的php计算年份和相应的get_posts
查找需要输出的数据的查询。
<!-- Tabs for current month -->
<?php
$fullDate1 = date(\'Ym01\');
$dateM=date(\'m\',strtotime($fullDate1."+6 months"));
$dateY = date(\'Y\');
switch($dateM)
{
case 01:
$dateY = date(\'Y\')+1;
break;
case 02:
$dateY = date(\'Y\')+1;
break;
case 03:
$dateY=date(\'Y\')+1;
break;
case 04:
$dateY=date(\'Y\')+1;
break;
case 05:
$dateY=date(\'Y\')+1;
break;
case 06:
$dateY=date(\'Y\')+1;
break;
default:
$dateY = date(\'Y\');
}
$args = array(\'post_type\' => \'events\', \'numberposts\' => \'-1\', \'meta_key\' => \'event_start\', \'orderby\' => \'meta_value_num\', \'order\' => \'ASC\',
\'meta_query\' => array( \'relation\' => \'AND\',
array(\'key\'=>\'Event Month Start\', \'value\' => $dateM, \'compare\' => \'=\', \'type\' => \'NUMERIC\'),
array (\'key\'=>\'Event Year Start\', \'value\' => $dateY, \'compare\' => \'=\', \'type\' => \'NUMERIC\')
));
$recent_posts = get_posts($args);
foreach($recent_posts as $recent): setup_postdata($recent);
$image = wp_get_attachment_image(get_post_thumbnail_id($recent->ID),\'events-loop\');
$event_start_S = get_post_meta($recent->ID,\'event_start\',true);
$event_start = date(\'j F Y\', strtotime($event_start_S));
$event_end_S = get_post_meta($recent->ID,\'event_end\',true);
$event_end = date(\'j F Y\', strtotime($event_end_S));?>
<article>
<div class="pic"><a href="<?php echo get_the_permalink($recent);?>" class="w_hover img-link img-wrap"><?php echo $image; ?><span class="link-gallery"></span> </a> </div>
<h3><a href="<?php echo the_permalink($recent); ?>"><?php echo get_the_title($recent); ?></a></h3>
<ul class="icons">
<li><a href="<?php echo get_the_permalink($recent);?>" class="post_date"><?php echo $event_start;?> - <?php echo $event_end;?></a></li>
<li><a href="" class="comments_count"></a></li>
</ul>
<div class="text"><?php echo get_excerpt(900,$recent); ?></div>
</article>
<?php endforeach;
wp_reset_postdata(); ?>
上面的代码将选项卡放置在当前月份之前6个月,然后检查是否应该是明年。然后执行查询,然后输出数据。据我所知,由于某种原因,这一年并没有推迟到下一年,尽管案例陈述说应该再增加一年。任何帮助都将不胜感激。谢谢
最合适的回答,由SO网友:inarilo 整理而成
date
返回字符串,但在switch
陈述使用:
case \'01\':
$dateY = date(\'Y\')+1;
break;
等等。
但是,开关代码可以简单得多,并且无需再次调用date函数,因为dateY已经提前初始化:
switch($dateM)
{
case \'01\':
case \'02\':
case \'03\':
case \'04\':
case \'05\':
case \'06\':
$dateY+=1;
}
更简单的是,您可以完全跳过切换:
if(intval($dateM) < 7) $dateY+=1;