wp_edit_posts_query

The timeline below displays how wordpress function wp_edit_posts_query has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 5.9

/**
 * Runs the query to fetch the posts for listing on the edit posts page.
 *
 * @since 2.5.0
 *
 * @param array|false $q Optional. Array of query variables to use to build the query.
 *                       Defaults to the `$_GET` superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types(), true)) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    $post_status = '';
    $perm = '';
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati, true)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    $orderby = '';
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'), true)) {
        $orderby = 'modified';
    }
    $order = '';
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' === $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Possible hook names include:
     *
     *  - `edit_post_per_page`
     *  - `edit_page_per_page`
     *  - `edit_attachment_per_page`
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && empty($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 5.8

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|false $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types(), true)) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    $post_status = '';
    $perm = '';
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati, true)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    $orderby = '';
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'), true)) {
        $orderby = 'modified';
    }
    $order = '';
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' === $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Possible hook names include:
     *
     *  - `edit_post_per_page`
     *  - `edit_page_per_page`
     *  - `edit_attachment_per_page`
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && empty($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 5.7

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|false $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types(), true)) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    $post_status = '';
    $perm = '';
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati, true)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    $orderby = '';
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'), true)) {
        $orderby = 'modified';
    }
    $order = '';
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' === $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && empty($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 5.5

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types(), true)) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    $post_status = '';
    $perm = '';
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati, true)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    $orderby = '';
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'), true)) {
        $orderby = 'modified';
    }
    $order = '';
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' === $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && empty($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: .10

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    $post_status = '';
    $perm = '';
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    $orderby = '';
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    $order = '';
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && empty($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 4.6

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filters the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filters the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 4.2

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filter the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filter the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
        $query['fields'] = 'id=>parent';
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 4.1

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filter the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, `$post_type`, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filter the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 4.0

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = "edit_{$post_type}_per_page";
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filter the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic portion of the hook name, $post_type, refers to the post type.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given post
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters("edit_{$post_type}_per_page", $posts_per_page);
    /**
     * Filter the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $posts_per_page Number of posts to be displayed. Default 20.
     * @param string $post_type      The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 3.9

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = 'edit_' . $post_type . '_per_page';
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    /**
     * Filter the number of items per page to show for a specific 'per_page' type.
     *
     * The dynamic hook name, $per_page, refers to a hook name comprised of the post type,
     * preceded by 'edit_', and succeeded by '_per_page', e.g. 'edit_$post_type_per_page'.
     *
     * Some examples of filter hooks generated here include: 'edit_attachment_per_page',
     * 'edit_post_per_page', 'edit_page_per_page', etc.
     *
     * @since 3.0.0
     *
     * @param int $posts_per_page Number of posts to display per page for the given 'per_page'
     *                            type. Default 20.
     */
    $posts_per_page = apply_filters($per_page, $posts_per_page);
    /**
     * Filter the number of posts displayed per page when specifically listing "posts".
     *
     * @since 2.8.0
     *
     * @param int    $per_page  Number of posts to be displayed. Default 20.
     * @param string $post_type The post type.
     */
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}

WordPress Version: 3.7

/**
 * Run the wp query to fetch the posts for listing on the edit posts page
 *
 * @since 2.5.0
 *
 * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal.
 * @return array
 */
function wp_edit_posts_query($q = false)
{
    if (false === $q) {
        $q = $_GET;
    }
    $q['m'] = isset($q['m']) ? (int) $q['m'] : 0;
    $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0;
    $post_stati = get_post_stati();
    if (isset($q['post_type']) && in_array($q['post_type'], get_post_types())) {
        $post_type = $q['post_type'];
    } else {
        $post_type = 'post';
    }
    $avail_post_stati = get_available_post_statuses($post_type);
    if (isset($q['post_status']) && in_array($q['post_status'], $post_stati)) {
        $post_status = $q['post_status'];
        $perm = 'readable';
    }
    if (isset($q['orderby'])) {
        $orderby = $q['orderby'];
    } elseif (isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft'))) {
        $orderby = 'modified';
    }
    if (isset($q['order'])) {
        $order = $q['order'];
    } elseif (isset($q['post_status']) && 'pending' == $q['post_status']) {
        $order = 'ASC';
    }
    $per_page = 'edit_' . $post_type . '_per_page';
    $posts_per_page = (int) get_user_option($per_page);
    if (empty($posts_per_page) || $posts_per_page < 1) {
        $posts_per_page = 20;
    }
    $posts_per_page = apply_filters($per_page, $posts_per_page);
    $posts_per_page = apply_filters('edit_posts_per_page', $posts_per_page, $post_type);
    $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page');
    // Hierarchical types require special args.
    if (is_post_type_hierarchical($post_type) && !isset($orderby)) {
        $query['orderby'] = 'menu_order title';
        $query['order'] = 'asc';
        $query['posts_per_page'] = -1;
        $query['posts_per_archive_page'] = -1;
    }
    if (!empty($q['show_sticky'])) {
        $query['post__in'] = (array) get_option('sticky_posts');
    }
    wp($query);
    return $avail_post_stati;
}