两个日期之间的PRE_GET_POSTS查询(日期存储在自定义发布元中)

时间:2017-05-13 作者:bigdaveygeorge

我有一个自定义的帖子类型,其中有一个自定义的日期字段。

在帖子列表上(edit.php)I want to be able to filter posts between 2 dates based on the custom post meta date (非发布日期),此字段为_exm_date.

我读过以下文章:

https://rudrastyh.com/wordpress/date-range-filter.html

这对于实际的发布日期非常有用,但对于它使用的自定义字段则不适用date_query.

因此,我更改了周围的代码以使用meta_query.

我现在已经通过了查询,可以看到meta_querypre_get_posts 数组,但我没有得到任何结果。

我还尝试了以下解决方案:Query posts between two dates (custom meta keys) CMB2

但这对我不起作用,代码与我的类似。

我还研究了:Date query for a custom meta field

这是我的pre_get_posts 操作查询:

    public function filterquery( $admin_query ){
        global $pagenow;

        if (
            is_admin()
            && $admin_query->is_main_query()
            // by default filter will be added to all post types, you can operate with $_GET[\'post_type\'] to restrict it for some types
            && in_array( $pagenow, array( \'edit.php\', \'upload.php\' ) )
            && ( ! empty( $_GET[\'mishaDateFrom\'] ) || ! empty( $_GET[\'mishaDateTo\'] ) )
        ) {




            $meta_query = array(
                \'relation\' => \'AND\',
                array(
                    \'key\' => \'_exm_date\',
                    \'value\' => date( \'ymd\', strtotime( $_GET[\'mishaDateFrom\'] ) ),
                    \'compare\' => \'>=\',
                    \'type\' => \'DATE\'
                ), 
                array(
                    \'key\' => \'_exm_date\',
                    \'value\' => date( \'ymd\', strtotime( $_GET[\'mishaDateTo\'] ) ),
                    \'compare\' => \'<=\',
                    \'type\' => \'DATE\'
                )
            );

             $admin_query->set( \'meta_query\', $meta_query );

        }

        print_r($admin_query);

        return $admin_query;

    }
$admin_query 输出为:

$admin_query

### Solution ###

我想我可能在发布后一分钟内就解决了这个问题。这是因为保存为自定义元的日期的格式与查询中的值不同。Doh!

1 个回复
SO网友:Jay the Geek

您可以在查询中始终使用BETWEEN比较,我已经使用了这个,也许您可以根据您的情况调整它。它可以避免无缘无故地进行多次检查:)

$first_date = 110501;
$second_date = 170514;
$meta_query = array(
           \'key\' => \'_exm_date\',
           \'value\' => array($first_date, $second_date ),
           \'type\' => \'DATE\',
           \'compare\' => \'BETWEEN\'
        );

结束

相关推荐

为自定义循环重写GET_NEXT_POSTS_LINK()

我在试着操纵它get_next_posts_link() 用于我的自定义循环。我的作者页面有一个使用查询字符串的自定义循环”?sort=selfie“。我已将查看自拍注册为”query_vars.http://localhost/author/ricky/selfie/ 第一页很好用。但下一页链接返回404错误。当前我的下一页链接显示如下:http://localhost/author/ricky/selfie/page/2/ 但当我点击以下链接时,效果很好:http://localh