Using WordPress ‘get_pages’ PHP filter

The get_pages WordPress PHP filter allows you to modify the retrieved list of pages.

Usage

add_filter('get_pages', 'your_custom_function', 10, 2);
function your_custom_function($pages, $parsed_args) {
    // your custom code here
    return $pages;
}

Parameters

  • $pages (WP_Post[]): An array of page objects.
  • $parsed_args (array): An array of get_pages() arguments.

More information

See WordPress Developer Resources: get_pages

Examples

Exclude specific pages from the list

Exclude pages with IDs 5 and 8 from the list of retrieved pages.

add_filter('get_pages', 'exclude_specific_pages', 10, 2);
function exclude_specific_pages($pages, $parsed_args) {
    $excluded_ids = array(5, 8);
    return array_filter($pages, function($page) use ($excluded_ids) {
        return !in_array($page->ID, $excluded_ids);
    });
}

Sort pages by title in ascending order

Sort the retrieved list of pages alphabetically by title.

add_filter('get_pages', 'sort_pages_by_title', 10, 2);
function sort_pages_by_title($pages, $parsed_args) {
    usort($pages, function($a, $b) {
        return strcmp($a->post_title, $b->post_title);
    });
    return $pages;
}

Add a prefix to page titles

Add a custom prefix to the title of each retrieved page.

add_filter('get_pages', 'add_prefix_to_page_titles', 10, 2);
function add_prefix_to_page_titles($pages, $parsed_args) {
    $prefix = 'Custom Prefix: ';
    foreach ($pages as $page) {
        $page->post_title = $prefix . $page->post_title;
    }
    return $pages;
}

Limit the number of retrieved pages

Limit the number of retrieved pages to 5.

add_filter('get_pages', 'limit_retrieved_pages', 10, 2);
function limit_retrieved_pages($pages, $parsed_args) {
    return array_slice($pages, 0, 5);
}

Filter pages by custom meta value

Retrieve only pages that have a specific custom meta value.

add_filter('get_pages', 'filter_pages_by_meta_value', 10, 2);
function filter_pages_by_meta_value($pages, $parsed_args) {
    $meta_key = 'your_meta_key';
    $meta_value = 'your_meta_value';
    return array_filter($pages, function($page) use ($meta_key, $meta_value) {
        return get_post_meta($page->ID, $meta_key, true) === $meta_value;
    });
}