Php date和get_post的唯一问题

时间:2017-12-05 作者:Zayd Bhyat

我在事件页面上有几个日期查询,该页面根据帖子的月份和年份输出事件帖子。每个帖子都有一个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个月,然后检查是否应该是明年。然后执行查询,然后输出数据。据我所知,由于某种原因,这一年并没有推迟到下一年,尽管案例陈述说应该再增加一年。任何帮助都将不胜感激。谢谢

1 个回复
最合适的回答,由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;

结束

相关推荐

POST/UPDATE/CHANGE选项等时空白白页

关于主题,我有一个问题,我在本地主机上测试了主题后,在主机上尝试了:当我尝试发布、更新、更改选项时,我得到了一个空白的白色页面然后我启用了调试模式,它会给我这些错误Notice: register_sidebar was called incorrectly. No id was set in the arguments array for the \"footer\" sidebar. Defaulting to \"sidebar-1\". Manually set the id