Using WordPress ‘parse_query’ PHP action

The parse_query WordPress PHP action fires after the main query variables have been parsed.

Usage

add_action('parse_query', 'your_custom_function_name');
function your_custom_function_name($query) {
    // your custom code here
}

Parameters

  • $query (WP_Query) – The WP_Query instance (passed by reference).

More information

See WordPress Developer Resources: parse_query

Examples

Modify the main query to exclude a specific category

add_action('parse_query', 'exclude_category_from_main_query');
function exclude_category_from_main_query($query) {
    if ($query->is_main_query()) {
        $query->set('cat', '-5'); // Exclude category with ID 5
    }
}

Show only posts from a specific author on the home page

add_action('parse_query', 'filter_homepage_by_author');
function filter_homepage_by_author($query) {
    if ($query->is_main_query() && $query->is_home()) {
        $query->set('author', '2'); // Show posts from author with ID 2
    }
}

Show only posts with a specific tag on the search results page

add_action('parse_query', 'filter_search_results_by_tag');
function filter_search_results_by_tag($query) {
    if ($query->is_main_query() && $query->is_search()) {
        $query->set('tag', 'featured'); // Show posts with the 'featured' tag
    }
}

Limit the number of posts per page on the archive page

add_action('parse_query', 'limit_posts_per_page_on_archive');
function limit_posts_per_page_on_archive($query) {
    if ($query->is_main_query() && $query->is_archive()) {
        $query->set('posts_per_page', '10'); // Show 10 posts per page
    }
}

Order posts by title on the category page

add_action('parse_query', 'order_posts_by_title_on_category');
function order_posts_by_title_on_category($query) {
    if ($query->is_main_query() && $query->is_category()) {
        $query->set('orderby', 'title');
        $query->set('order', 'ASC'); // Order posts by title in ascending order
    }
}