Pre_Get_POST中的DATE_QUERY内存不足

时间:2021-05-29 作者:BennyVenassi

我正在尝试为特定类别应用Datefilter。

Wordpress因内存不足错误而崩溃。这是服务器问题还是我的查询错误?起初,我尝试查询->;(…)但用这种方法,我得到了一个错误,因为参数太少。使用query=new WP\\u query时。。。我得到内存不足错误。

谢谢你的帮助。

我的代码:

    function test_filter( $query ) {
        $options = get_option(\'dh_options\');
        $cats = "54,55,56";
        if ($options[\'checkbox_usr_q\'] == true) {
            if ( !is_admin()  && $query->is_main_query() && $query->in_category($cats)) {
                $args = array(
                    \'date_query\' => array(
                        array(
                            \'column\' => \'post_date_gmt\',
                            \'after\' => \'May 1st, 2021\',
                            \'inclusive\' => true
                        ),
                    ),
                    \'posts_per_page\' => -1
                );
                $query = new WP_Query( $args );
            }
        }
    }

add_action( \'pre_get_posts\', \'test_filter\' , 100, 3);
错误消息:

Fatal error: Out of memory (allocated 699400192) (tried to allocate 262144 bytes) in /homepages/1/d861373325/htdocs/wp/wp-includes/class-wp-query.php on line 892

Fatal error: Out of memory (allocated 699400192) (tried to allocate 262144 bytes) in /homepages/1/d861373325/htdocs/wp/wp-includes/class-wp-recovery-mode.php on line 361

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

你没有使用pre_get_posts 正确地你打过电话new WP_Query 然后运行钩子new WP_Query, 然后你的钩子。。。等等你处在一个无限循环中。

正确的使用方法pre_get_posts 是修改$query 参数使用$query->set() 调整查询。您不需要执行全新的查询:

function test_filter( $query ) {
    $options = get_option( \'dh_options\' );
    $cats    = array( 54, 55, 56 );

    if ( $options[\'checkbox_usr_q\'] == true ) {
        if ( ! is_admin() && $query->is_main_query() && $query->is_category( $cats ) ) {
            $query->set(
                \'date_query\',
                array(
                    array(
                        \'column\'    => \'post_date_gmt\',
                        \'after\'     => \'May 1st, 2021\',
                        \'inclusive\' => true,
                    ),
                )
            );
        }
    }
}
还请注意,我改变了$query->in_category, 这根本不存在$query->is_category, 我将该值更改为ID数组。该函数不接受逗号分隔的字符串。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post