这个问题与此密切相关question 我已经得到了一个有效的答案。
我有一个名为“wr\\u event”的自定义帖子模板和一个名为“event\\u type”的自定义分类法。
这个“事件帖子”有一个元框,我在其中设置事件日期,我使用这个…
function change_order_for_events( $query ) {
//only show future events and events in the last 24hours
$yesterday = time() - 24*60*60;
if ( $query->is_main_query() && is_tax(\'event_type\') ) {
$query->set( \'meta_key\', \'_wr_event_date\' );
$query->set( \'orderby\', \'meta_value_num\' );
$query->set( \'order\', \'ASC\' );
$query->set( \'meta_value\', $yesterday );
$query->set( \'meta_compare\', \'>\' );
}
}
add_action( \'pre_get_posts\', \'change_order_for_events\' );
…根据事件日期对所有“事件帖子”进行排序。
这很好用,完全符合我的要求。
到目前为止,唯一不起作用的是“archive.php”,我希望它能在这里生效。
我补充道\'has_archive\' => \'events\'
到我的自定义帖子模板。/events
现在显示我已经使用的“archive.php”文件is_post_type_archive(\'wr_event\')
作为我的标题。
但是,我希望我的存档事件也按正确的日期顺序排列。所以上面的函数相同change_order-for_events()
应该可以使用我的“archive.php”模板。当然,在这种情况下,函数应该只显示已经发生的旧事件。
你知道我该怎么做吗?
update:我将时间戳存储在MetaBox and CustomFields Class
$meta_boxes[] = array(
\'id\' => \'event_date\',
\'title\' => \'Event Date\',
\'pages\' => array( \'wr_event\', ),
\'context\' => \'normal\',
\'priority\' => \'high\',
\'fields\' => array(
array(
\'name\' => \'Event Date Picker\',
\'desc\' => \'The date the event takes place\',
\'id\' => $prefix . \'event_date\',
\'type\' => \'text_date_timestamp\',
)
),
);
我使用在模板文件中查询它
$wr_event_fields = get_post_custom();
$wr_event_fields[\'_wr_event_date\'][0];
最合适的回答,由SO网友:Stephen Harris 整理而成
只需使用appropriate conditionals:
function change_order_for_events( $query ) {
//only show future events and events in the last 24hours
$yesterday = current_time(\'timestamp\') - 24*60*60;
if ( $query->is_main_query() && (is_tax(\'event_type\') || is_post_type_archive(\'wr_event\')) ) {
$query->set( \'meta_key\', \'_wr_event_date\' );
$query->set( \'orderby\', \'meta_value_num\' );
$query->set( \'order\', \'ASC\' );
//Get events after 24 hours ago
$query->set( \'meta_value\', $yesterday );
$query->set( \'meta_compare\', \'>\' );
//Get events before now
//$query->set( \'meta_value\', current_time(\'timestamp\') );
//$query->set( \'meta_compare\', \'<\' );
}
}
add_action( \'pre_get_posts\', \'change_order_for_events\' );
这将更改分类法术语存档的主查询
event_type
以及岗位类型的档案
wr_event
.