通过自定义字段排序的WordPress get_posts这是一个自定义日期
我有一个自定义后类型成员和出生日期被保存象2013年1月1日通过自定义字段排序的WordPress get_posts这是一个自定义日期
$args = array(
'numberposts' => -1,
'post_type' => 'mitglied',
'post_status' => 'publish',
'meta_key' => 'geburtsdatum',
'meta_value' => date("d.m.Y"),
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$geburtstage = get_posts ($args);
我想与各成员的有序生日列表按月份和日子里,
- 月4日,10人
- 3月8日的,人2
- ...
- 月1日,人3
与列表上面的代码是由日下令十二月
- 月1日,人3
- 1月4日的,人3月10日
- 8日,人2
也很重要的是,排序不受出生年份的影响
我想,我的任务是不是只有get_posts solveable,所以我做了3个步骤。
首先,我用get_posts得到所有成员
$args = array(
'numberposts' => -1,
'post_type' => 'mitglied',
);
$geburtstage = get_posts ($args);
然后填充有数据的数组。为了排序,我用生日的日期和月份做了时间戳,但是实际的年份。 虽然使用这种解决方案,但它不是必需的,我将日期格式更改为yyyy-mm-dd。 @barakadam在他对我的问题的回答中解释了如何做到这一点。 我使用WordPress插件高级自定义字段,所以我取与get_field()
$mitglieder = array(array());
$i = 0;
foreach($geburtstage as $post){
setup_postdata($post);
$datum = explode("-",get_field('geburtsdatum'));
$mitglieder[$i]['orderby'] = mktime(0, 0, 0, (int)$datum[1], (int)$datum[2], date('Y'));
$mitglieder[$i]['name'] = get_field('name');
$i++;
}
的最后一步是用在array_multisort获得预期的订单
foreach ($mitglieder as $key => $row) {
$dates[$key] = $row['orderby'];
}
array_multisort($dates, SORT_ASC, $mitglieder);
由于@barakadam和自定义字段@Christopher参与。
已存储的格式不正确的日期在自定义字段。您应该使用UNIX邮票或其他格式,如Y-m-d,这样可以按时间顺序排序。 你现在唯一的解决方案是检索你的结果而不对它们进行排序(忘记'order' => 'ASC'
),但不限制它们(因为即使看起来它的日期限制不起作用),创建一个包含所有这些数组的数组,日期时间作为UNIX时间戳(使用strtotime
)并按日期排序... 但我真正的建议是使用时间戳或正确格式化日期(Ymd)重构您的网站。您可以创建一个循环,通过每一个岗位去,并与UNIX等值替换您的自定义字段的值,使用:在此之前
$oldvalue = get_post_meta($post_id, 'geburtsdatum', true);
update_post_meta($post_id, 'geburtsdatum', strtotime($old_value));
请备份您的数据库,或者至少使矿石测试或两个职位,但这应该解决它。然后,您将可以稍后使用:
date("d.m.Y", $yourunixstamp)
以获取格式化日期。
,然后也,你以前的代码将刚刚成为:
$args = array(
'numberposts' => -1,
'post_type' => 'mitglied',
'post_status' => 'publish',
'meta_key' => 'geburtsdatum',
'meta_value' => time(),
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$geburtstage = get_posts ($args);
感谢这一点,我已经想过改变日期格式,但与update_post_meta它是非常容易和快速!现在唯一的事情是,我如何才能按月份和日期对日期进行排序?因此,如果某人出生在1950年或2000年,那么这无关紧要 - 出生在前一个月的人应该位列榜首 – oliverspies
然后,您应该将日,月和年存储在不同的字段中(+保留一个字段UNIX邮票)或有一个字段“md”(月和日 - 在这种情况下,你会自动得到你想要的名单)。 (再次,您可以在循环中使用'add_post_meta',在您存储'geburtsdatum'时检索其值并在另一个自定义字段中提供月份和日期。 – barakadam
wordpress问题在这里没关系,但为了将来的使用,我发现WP有一个特定的StackExchange站点,它非常好。 http://wordpress.stackexchange.com –
问题是,通过存储格式化的日期而不是Unix时间,Wordpress的订购选项不会对你有任何帮助。您需要提出自己的排序方法,或者挂钩保存操作并使用strtotime将帖子的DOB元数据转换为Unix。 – maiorano84