我想要完成的是拥有“精选演讲者”,只出现一周(包括他们讲话的那一天),并且在他们说完之后的第二天,它将显示下一个人在网站上发言一周,直到他们说话等等。
我对逻辑感到困惑。我一直表现良好,直到我点击:
if($ postdatenum> = $ todaynum + 6)
当月份不同时,哪个不起作用。
我知道我的代码很复杂,可能已经过时了,但如果有人能够详细说明计算7天事物的逻辑,那就太棒了。
这是我到目前为止所拥有的:
<?php
query_posts(array(
'post_type' => 'post',
'category_name' => 'speakers',
'showposts' => 1,
'order' => DESC
) );
while (have_posts()) : the_post(); ?>
<div class="">
<?php
$today = date('m/d');
$postdate = the_date('m/d','','',FALSE);
//IF POST DATE AND TODAYS DATE NOT THE SAME
if($postdate != $today){
wp_reset_query();
query_posts(array(
'post_status' => 'future',
'showposts' => 1,
'order' => ASC
) );
while (have_posts()) : the_post();
$todaynum = date('d'); //10
$postdatenum = the_date('d','','',FALSE); //17
if($postdatenum >= $todaynum + 6){
?>
<h2><?php the_title(); ?></h2>
<?php the_post_thumbnail(('medium'), array('class' => 'alignright')); ?>
<?php the_content(); ?>
<?php
}
endwhile;
wp_reset_query();
}else{
?>
<h2><?php the_title(); ?></h2>
<?php the_post_thumbnail(('medium'), array('class' => 'alignright')); ?>
<?php the_content(); ?>
<?php
} endwhile;
?>
答案 0 :(得分:1)
使用strtotime和日期
if($postdatenum >= date('Y-m-d', strtotime('today' . '+6 days') ) )
不确定您使用的格式,但请查看差异格式http://php.net/manual/en/function.date.php。你显然不能只使用这一天因为涉及数月和数年。
答案 1 :(得分:1)
我想知道date_query
的这个技巧是否适用于您作为单个查询(未经测试):
$args = array(
'posts_per_page' => 2,
'post_status' => array( 'publish', 'future' ),
'orderby' => 'date',
'order' => 'ASC',
'category_name' => 'speakers',
'date_query' => array(
array(
'before' => '+13days',
'after' => '-1days',
'inclusive' => true,
),
),
);
$query = new WP_Query( $args );
此查询的第一篇文章应该是本周的当前发言人,之后的另一篇文章将是即将发表的演讲者。
如果您想要添加更多即将发言的演讲者,可以增加posts_per_page
并增加before
参数中的天数。
因此不需要多个查询。
ps:不要使用query_posts()
,不推荐,请查看the Codex中的这句话:
注意:此功能不适用于插件或主题。如 稍后解释,有更好的,更高性能的选项可以改变 主要查询。 query_posts()过于简单和有问题的方式 通过将其替换为新的实例来修改页面的主要查询 查询。它是低效的(重新运行SQL查询)并且将彻底 在某些情况下失败(特别是在处理职位时经常失败) 分页)。任何现代WP代码都应该使用更可靠的方法,比如 为此目的,使用pre_get_posts钩子。
我们假设讲座总是在每周中午12点开始。
然后我们在日历上标记扬声器(A,B,C,D,E,...):
Jan 2014 Feb 2014
A B C D E
1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 | 15 16 17 18 19 20 21 | 22 23 24 25 26 27 28 | 29 30 31 1 2 3 4 | 5 6 7 8 9 10
- * + + + + + + + + + + + + +
- * + + + + + + + + + + + + +
- * + + + + + + + + + + + + +
- * + + + + + + + + + + + + +
对于上述不匹配的+/-和当天*感到抱歉。这只是一个如何标记日历的例子。
然后我们可以从上面的查询构建以下列表:
Day Time Speaker
------------
...
5 12:00 AB
5 12:01 AB
6 12:00 AB
6 12:01 AB
7 12:00 AB
7 12:01 BC
8 12:00 BC
8 12:01 BC
...
12 12:00 BC
12 12:01 BC
13 12:00 BC
13 12:01 CD
14 12:00 CD
14 12:01 CD
...