我有一个自定义的帖子类型,可以在元数据中设置开始和结束日期。
我使用下面的函数过滤搜索结果,只显示来自帖子类型的结果visitor
:
function SearchFilter($query) {
if ($query->is_search) {
$query->set(\'post_type\', \'visitor\');
}
return $query;
}
add_filter(\'pre_get_posts\', \'SearchFilter\');
我有两个元数据字段,其中包含开始日期和结束日期:
get_post_meta( get_the_ID(), \'visitor-start-date\', true ); // Start date
get_post_meta( get_the_ID(), \'visitor-date\', true ); // End date
我想过滤搜索结果,仅当当前日期(今天)介于这两个日期之间时才显示结果。日期在
epoch/unix
看起来是这样的:
1539129600
1546214400
如何在我上面创建的过滤器中包含此内容,以便仅显示今天日期介于开始日期和结束日期之间的结果?
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
您可以使用元查询根据需要过滤帖子。
以下是示例代码:
function SearchFilter( $query ) {
if ( !is_admin() && $query->is_search ) {
$query->set( \'post_type\', \'visitor\' );
$query->set( \'meta_query\', array(
\'relation\' => \'AND\',
array(
\'key\' => \'visitor-start-date\',
\'value\' => time(),
\'compare\' => \'<=\'
),
array(
\'key\' => \'visitor-date\',
\'value\' => time(),
\'compare\' => \'>=\'
),
) );
}
}
add_action( \'pre_get_posts\', \'SearchFilter\' ); // pre_get_posts is an action, not a filter, so you don\'t have to return anything in it
如果需要服务器时间,请使用
time
功能如上述代码所示。
另一方面,如果需要在比较中使用WP时间,则使用current_time
功能:
current_time( \'timestamp\' );