0

我在 for 循环中使用 Wordpress 中的以下自定义查询,使我能够为我为“新闻”创建的自定义帖子类型的前 8 个月创建一个选项卡式存档。

这非常有效,但是我希望在“旧新闻”标题下显示每个旧帖子。我正在努力弄清楚如何在任何时候将超过 8 个月的帖子与当前日期分开。

任何人都可以告诉我一个自定义查询结构,这将使我能够做到这一点。

这是我用来在其相关容器中输出 CPT 的代码。

<?php for($i = $this_month-1; $i > $this_month-8; $i--) :
        if($i==-1){$m=11;}
        if($i==-2){$m=10;}
        if($i==-3){$m=9;}
        if($i==-4){$m=8;}
        if($i==-5){$m=7;}
        if($i==-6){$m=6;}
        if($i==-7){$m=5;}
        if($i==-8){$m=4;}
        else{$m=$i;}

        query_posts( array(
            'post_type' => 'news',
            'posts_per_page' => '-1',
            'orderby' => 'date',
            'order' => 'ASC',
            'monthnum'=>$m
        ) );  
.......
4

2 回答 2

2

你可以试试这个

<?php 
    add_filter('posts_where', 'filter_where');
    query_posts( array('post_type' => 'news', 'posts_per_page' => '-1', 'orderby' => 'date')); 
    function filter_where($where = ''){
        $where .= " AND post_date < '".date('Y-m-d', strtotime('-8 month'))."'";
        return $where;
    }
    remove_filter('posts_where', 'filter_where');
    if (have_posts()) : 
        while (have_posts()) : the_post();
        // your code
        endwhile;
    endif;
    wp_reset_query();
?>

更新:也许这可以帮助你。

$args = array(
    'post_type' => 'news',
    'posts_per_page' => '-1',
    'orderby' => 'date',
    'year'     => date('Y'), // for current year, date('Y')-1 for 1 year ago
    'monthnum' => $m, // the month in the loop
    'order'    => 'ASC'
);
query_posts( $args );
于 2012-08-21T09:22:03.563 回答
0

我不太了解wordpress,但可以在逻辑上为您提供帮助。据我所知,这可以通过在检索“旧新闻”类别的帖子时检查查询中的“WHERE creation_date < 8 个月”之类的条件来完成。所以首先获取当前日期。

<?php $today = date('Y-m-d'); ?>

然后从中减去 8 个月,你会得到一个大 8 个月的日期

<?php $eight_month = date('Y-m-d',strtotime("-8 month $today")); ?> 

现在您可以在查询中使用 $eight_month ,因此您的查询将是这样的。检查您存储在数据库中以供发布的日期格式,如果它与格式“Ymd”不同,请相应地更改我的日期

"SELECT * FROM posts WHERE creation_date < '$eight_month'"

希望这是您想要的,并在您的项目中为您提供帮助。祝你好运,祝你有美好的一天

于 2012-08-21T08:36:08.460 回答