Query date in wordpress loop

时间:2013-11-22 作者:user2960468

我目前有一个名为“事件”的自定义帖子类型。我根据这里的教程创建了这个http://tatiyants.com/how-to-use-wordpress-custom-post-types-to-add-events-to-your-site/. 我想查询日期,只显示日期即将到来的帖子,而不是过去的帖子。$event_date >= time

然而,在教程中,他使用一个短代码显示结果。我正在尝试将其转换为标准wp循环,以便在索引中显示它。php。他在其短代码函数中使用以下内容:

add_shortcode( \'events\', \'get_events_shortcode\' );

function get_events_shortcode($atts){
    global $post;

    // get shortcode parameter for daterange (can be "current" or "past")
    extract( shortcode_atts( array(
        \'daterange\' => \'current\',
    ), $atts ) );

    ob_start();

    // prepare to get a list of events sorted by the event date
    $args = array(
        \'post_type\' => \'events\',
        \'orderby\'   => \'event_date\',
        \'meta_key\'  => \'event_date\',
        \'order\'     => \'ASC\'
    );

    query_posts( $args );

    $events_found = false;

    // build up the HTML from the retrieved list of events
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            $event_date = get_post_meta($post->ID, \'event_date\', true);

            switch ($daterange) {
                case "current":
                    if ($event_date >= time() ) {
                        echo get_event_container();
                        $events_found = true;
                    }
                    break;

                case "past":
                    if ($event_date < time() ) {
                        echo get_past_event_summary();
                        $events_found = true;
                    }
                    break;
            }
        }
    }

    wp_reset_query();

    if (!$events_found) {
        echo "<p>no events found.</p>";
    }

    $output_string = ob_get_contents();
    ob_end_clean();

    return $output_string;
}
任何帮助或指导都将不胜感激,就好像我在这让我头痛之前已经编写了主题一样。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您要使用查询帖子event_date 在将来,但您已将日期保存为(或者从评论中可以看出是这样的):

date("F", $unixtime)." ".date("d", $unixtime).", ".date("Y", $unixtime);
即“文本月名”+“数字日”+“数字年”。无法查询/排序该格式以使其与日历匹配。您的排序选项是“字母顺序”,这显然是错误的,或者是“数字”,这也显然是错误的。这个only 以与日历匹配的方式进行排序的可读日期格式为“数字年”+“数字月”+“数字日”或“YYYY-MM-DD”。分隔符的选择是任意的,不能为空。那就是date(\'Y-m-d\'). 如果您的日期是以rational格式存储的,那么下面这样的查询应该满足您的需要:

$args = array(
    \'post_type\' => \'events\',
    \'orderby\'   => \'event_date\',
    \'meta_key\'  => \'event_date\',
    \'order\'     => \'ASC\',
    \'meta_query\' => array(
      array(
        \'key\' => \'event_date\',
        \'value\' => date(\'Y-m-d\',time()),
        \'compare\' => \'>\'
      )
    ),
);
$q = new WP_Query($args);
var_dump($q->request);
您也可以始终只存储Unix时间戳。这些排序也与日历顺序相匹配。然后设置显示日期的格式。这是我对日期的偏好,除非您在MySQL表中保存为“日期”格式的列。如果保存为时间戳,请使用:

\'value\' => strtotime(\'today\'),
而不是:

\'value\' => date(\'Y-m-d\',time()),

SO网友:Howdy_McGee

这将查询/显示所有未来posts - 标准WP查询由2个筛选器包围,1个用于添加筛选器以便应用于此查询,另一个用于删除筛选器以便不应用于任何其他查询:

这将是对自定义循环的查询:

add_filter( \'posts_where\', \'filter_where\' );
$events = new WP_Query(array(\'post_type\' => \'post\', \'posts_per_page\' => -1, \'order\' => \'ASC\', \'orderby\' => \'date\', \'post_status\' => array(\'publish\', \'future\')));
remove_filter( \'posts_where\', \'filter_where\' );
将其添加到过滤器的函数文件中:

function filter_where( $where = \'\' ) {
    global $wpdb;
    $where .= " AND ($wpdb->postmeta.meta_key = \'event_date\' AND $wpdb->postmeta.meta_value >= \'".date(\'Y-m-d\')."\')";
    return $where;
}
这两个组合将查询今天和之后的所有帖子,然后按日期排序。这就是你所指的吗?

结束

相关推荐

UPDATE_OPTION在独立的PHP脚本中不起作用

我在WordPress主题的目录中有一个独立的PHP脚本,我通过cron作业每小时运行一次(或者在需要时手动运行)。除了update_option() 作用我的脚本的简化版本如下所示:require_once(\'/path/to/site/wp-load.php\'); $value = my_function(); update_option(\'my_option\', $value); 在我的一个主题文件中,我运行以下代码:echo get_option(\'m