Wordpress - 提前一周显示帖子

时间:2014-09-10 21:46:41

标签: php wordpress

  • 我有一个扬声器类别
  • 每个发言者都设置为帖子
  • wordpress发布日期,是他们发言的日期(所以大多数发言人的帖子都是“预定的”)
  • 每周都有一位新演讲者(每7天一次)
  • 在我的发言人页面上,我会显示“本周特色发言人”,其中包含所有发布信息
  • 在特色演讲者的下方,是即将发言的名单(只是标题,而不是整个帖子)

我想要完成的是拥有“精选演讲者”,只出现一周(包括他们讲话的那一天),并且在他们说完之后的第二天,它将显示下一个人在网站上发言一周,直到他们说话等等。

我对逻辑感到困惑。我一直表现良好,直到我点击:

  

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;
?>

2 个答案:

答案 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

 ...