我正在尝试为特定类别应用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
最合适的回答,由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数组。该函数不接受逗号分隔的字符串。