如果当前日期在两个日期之间,是否仅显示搜索结果?

时间:2018-11-01 作者:joq3

我有一个自定义的帖子类型,可以在元数据中设置开始和结束日期。

我使用下面的函数过滤搜索结果,只显示来自帖子类型的结果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

如何在我上面创建的过滤器中包含此内容,以便仅显示今天日期介于开始日期和结束日期之间的结果?

1 个回复
最合适的回答,由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\' );

结束

相关推荐

如何解析php通知“常量EMPTY_TRASH_DAYS已定义”

具有define(\'WP_DEBUG\', true); 在wp配置中。php,我收到以下通知:/wp config中已定义常量EMPTY\\u TRASH\\u天。php在线83我检查了这个文件,这个常量只定义了一次。我还搜索了服务器上的所有php文件,没有发现它是在其他地方定义的。我已经彻底搜查过了。唯一定义的其他位置是default-constants.php:如果(!defined(\'EMPTY\\u TRASH\\u DAYS\'))定义(\'EMPTY\\u TRASH\\u DAYS\'