I’m trying to apply a Datefilter for specific categories.
WordPress crashs with a out of memory error. Is this a server problem or is my query wrong?
At first I tried query -> (…) but with approach I get an error, cause of too few arguments.
While using query = new WP_Query… I get the out of memory error.
Thank you for your help.
My code:
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);
Error Message:
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
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You’re not using pre_get_posts correctly. You’ve called new WP_Query which then runs your hook, which calls new WP_Query, which then runs your hook… and so on. You’re in an infinite loop.
The proper way to use pre_get_posts is to modify the $query parameter using $query->set() to adjust the query. You don’t need to perform a brand new query:
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,
),
)
);
}
}
}
Also note that I changed $query->in_category, which doesn’t exist, to $query->is_category, and I changed the value to an array of IDs. That function does not accept a comma-separated string.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0