Sorting past events by month

时间:2013-06-20 作者:user1468810

我有一个网站,列出了即将发生的事件和过去发生的事件。

在我的类别中,过去的事件。php模板,这是我如何以降序(从最新到最旧)显示过去事件的方式:

    <?php
                $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
                $args = array(
                  \'posts_per_page\' => 100,
                  \'paged\' => $paged,
                  \'cat\' => 3709,
                  \'orderby\' => \'meta_value\',
                  \'meta_key\' => \'Deadline\', //formatted YYYYMMDD
                  \'order\' => \'desc\'
                );

                query_posts($args);     
        ?>
此设置成功地按事件出现的顺序列出事件,例如:。

事件6、事件5、事件4、事件3、事件2、事件1、我如何获得它,以便将过去的事件按月分解?E、 g。

2012年12月-6日-5日-4日

2012年11月—事件3—事件2—事件1

Update: 我在函数中设置了pre\\u get\\u posts。正如@s\\u ha\\u dum所建议的那样,php正在发挥作用。

@KrzysiekDródż,我的问题是,截止日期可能与get\\u时间(“F Y”)不一致。

这是因为我可能会创建一个最后期限为20131212的帖子(即发生在2013年12月),但该帖子的时间可能会有所不同。一、 现在是六月,我为十二月创建了一个即将到来的活动,该帖子的时间是六月,因为我是在六月创建的。

目前在一个生产站点上使用它(尽管我正在使用MAMP进行本地测试)。创建事件的工作流是将帖子分类为事件,然后在事件日期过去后,Post Expirator插件将其类别切换为过去的事件。存在截止日期,因此帖子可以按升序或降序排序。

我还在想过去的事件是如何循环的。php我会使用这个截止日期按月对它们进行排序

2 个回复
SO网友:Krzysiek Dróżdż

首先,我认为你不应该在这里使用你的自定义query\\u帖子。WordPress已经在查询帖子了,所以再查询一遍是浪费时间的。您应该使用pre\\u get\\u posts过滤器或类似的东西。

您可以如何按月拆分帖子?您必须在循环中手动执行此操作。这样的事情应该可以解决你的问题:

$prev_month = \'\';

while ( have_posts() ):
    the_post();
    $deadline = strtotime(get_post_meta($post->ID, \'Deadline\', true)); // this line may need to be changed - it depends on the format you choosed to store dates in deadline meta value
    $current_month = date(\'F Y\', $deadline);  
    if ( $current_month != $prev_month ) {
        echo \'<h2>\'. $current_month .\'</h2>\';
        $prev_month = $current_month;

    // output your post/event
endwhile;
它没有经过测试,所以可能有bug,但这个解决方案背后的想法应该很清楚。

SO网友:s_ha_dum

使用query_posts 这通常是个坏主意,因为它会导致另一个数据库查询,但它也会破坏分页,并可能导致其他问题。

你需要的是一个过滤器pre_get_posts.

function pgp($qry) {
  if (!is_admin() && is_main_query() && $qry->is_category(3709)) {
    $qry->set(\'orderby\',\'meta_value\');
    $qry->set(\'meta_key\',\'Deadline\'); //formatted YYYYMMDD
    $qry->set(\'ignore_sticky_posts\',true);
  }
  return $qry;
}
add_filter(\'pre_get_posts\',\'pgp\');
这是假设类别ID 3709是“过去事件”类别。完成后,请按照@KrzysiekDrozdz的答案进行操作

结束

相关推荐

jQuery Validate wp_editor

我有一个表单,在表单中,我使用<?php wp_editor(\'\', \'user_submitted_progress\', $settings = array(\'textarea_name\' => \'user_submitted_progress\')); ?> 生成一个TinyMCE,而不是一个简单的textarea. 问题是我无法通过jQuery验证来验证wp\\U编辑器。这是我的jQuery验证代码$(document).ready(function() {