按日期元数据排序自定义帖子

时间:2012-02-23 作者:Uffo

我有一个自定义元数据库,在其中以纯文本形式存储日期,如下所示:dd/mm/yy现在我需要在那个日期前订购邮件。调用自定义字段event_informations_date

<?php
    $args = array( \'post_type\' => \'Event\',\'posts_per_page\' => 1000 );
    $loop = new WP_Query( $args );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>

2 个回复
SO网友:alexleonard

当您在自定义post类型上保存数据时,需要对其进行设置,以便元框值实际存储为UNIX时间戳,例如:

if(!isset($_POST["event_informations_date"])) {
    return $post;
} else {
    $event_as_timestamp = strtotime ( $_POST["event_informations_date"];
    update_post_meta($post->ID, "event_informations_date", $event_as_timestamp );
}
这样,您的元键将具有可排序的值。您可以按照@helgatheviking进行查询

$args = array( \'post_type\' => \'Event\',
           \'posts_per_page\' => 1000,
           \'order_by\' => \'meta_value_num\',
            \'meta_value\' => \'event_informations_date\'  );
您需要确保add_meta_box() 您正在使用的函数将UNIX时间戳从保存的自定义字段值转换回您需要的格式。

SO网友:helgatheviking

首先,需要添加更多参数

$args = array( \'post_type\' => \'Event\',
               \'posts_per_page\' => 1000,
               \'order_by\' => \'meta_value_num\',
                \'meta_value\' => \'event_informations_date\'  );
问题是,您不能真正按照字符串日期进行排序。我会使用“meta\\u值”,但b/c您有dd/mm/yy您基本上看到的是每月第一天的所有事件都被分组在一起,然后是以2开头的事件,等等。我认为您需要更改日期的存储方式,以便能够按其排序。可能是unix时间戳?

ps-如果您想要所有帖子,我认为您应该将posts\\u per\\u page更改为-1

结束

相关推荐

在短代码中获取Metabox值?

是否可以在该页上执行的短代码中获取该页的元盒值?场景:我每个页面都有一个侧边栏元数据库</我有一些自定义的Gallery快捷码我的gallery快捷码输出600x200幅图像(我在这里使用timthumb)。但如果没有侧栏,我希望它显示900x300。通常我会使用:$sidebar = get_post_meta($post->ID, \'metabox_sidebar\', true); if($sidebar == \"true\") { do something }