set_screen_options

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

WordPress Version: 6.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (!isset($_POST['wp_screen_options']) || !is_array($_POST['wp_screen_options'])) {
        return;
    }
    check_admin_referer('screen-options-nonce', 'screenoptionnonce');
    $user = wp_get_current_user();
    if (!$user) {
        return;
    }
    $option = $_POST['wp_screen_options']['option'];
    $value = $_POST['wp_screen_options']['value'];
    if (sanitize_key($option) !== $option) {
        return;
    }
    $map_option = $option;
    $type = str_replace('edit_', '', $map_option);
    $type = str_replace('_per_page', '', $type);
    if (in_array($type, get_taxonomies(), true)) {
        $map_option = 'edit_tags_per_page';
    } elseif (in_array($type, get_post_types(), true)) {
        $map_option = 'edit_per_page';
    } else {
        $option = str_replace('-', '_', $option);
    }
    switch ($map_option) {
        case 'edit_per_page':
        case 'users_per_page':
        case 'edit_comments_per_page':
        case 'upload_per_page':
        case 'edit_tags_per_page':
        case 'plugins_per_page':
        case 'export_personal_data_requests_per_page':
        case 'remove_personal_data_requests_per_page':
        // Network admin.
        case 'sites_network_per_page':
        case 'users_network_per_page':
        case 'site_users_network_per_page':
        case 'plugins_network_per_page':
        case 'themes_network_per_page':
        case 'site_themes_network_per_page':
            $value = (int) $value;
            if ($value < 1 || $value > 999) {
                return;
            }
            break;
        default:
            $screen_option = false;
            if (str_ends_with($option, '_page') || 'layout_columns' === $option) {
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false from the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 * @since 5.4.2 Only applied to options ending with '_page',
                 *              or the 'layout_columns' option.
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed  $screen_option The value to save instead of the option value.
                 *                              Default false (to skip saving the current option).
                 * @param string $option        The option name.
                 * @param int    $value         The option value.
                 */
                $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
            }
            /**
             * Filters a screen option value before it is set.
             *
             * The dynamic portion of the hook name, `$option`, refers to the option name.
             *
             * Returning false from the filter will skip saving the current option.
             *
             * @since 5.4.2
             *
             * @see set_screen_options()
             *
             * @param mixed   $screen_option The value to save instead of the option value.
             *                               Default false (to skip saving the current option).
             * @param string  $option        The option name.
             * @param int     $value         The option value.
             */
            $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
            if (false === $value) {
                return;
            }
            break;
    }
    update_user_meta($user->ID, $option, $value);
    $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
    if (isset($_POST['mode'])) {
        $url = add_query_arg(array('mode' => $_POST['mode']), $url);
    }
    wp_safe_redirect($url);
    exit;
}

WordPress Version: 6.1

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (!isset($_POST['wp_screen_options']) || !is_array($_POST['wp_screen_options'])) {
        return;
    }
    check_admin_referer('screen-options-nonce', 'screenoptionnonce');
    $user = wp_get_current_user();
    if (!$user) {
        return;
    }
    $option = $_POST['wp_screen_options']['option'];
    $value = $_POST['wp_screen_options']['value'];
    if (sanitize_key($option) !== $option) {
        return;
    }
    $map_option = $option;
    $type = str_replace('edit_', '', $map_option);
    $type = str_replace('_per_page', '', $type);
    if (in_array($type, get_taxonomies(), true)) {
        $map_option = 'edit_tags_per_page';
    } elseif (in_array($type, get_post_types(), true)) {
        $map_option = 'edit_per_page';
    } else {
        $option = str_replace('-', '_', $option);
    }
    switch ($map_option) {
        case 'edit_per_page':
        case 'users_per_page':
        case 'edit_comments_per_page':
        case 'upload_per_page':
        case 'edit_tags_per_page':
        case 'plugins_per_page':
        case 'export_personal_data_requests_per_page':
        case 'remove_personal_data_requests_per_page':
        // Network admin.
        case 'sites_network_per_page':
        case 'users_network_per_page':
        case 'site_users_network_per_page':
        case 'plugins_network_per_page':
        case 'themes_network_per_page':
        case 'site_themes_network_per_page':
            $value = (int) $value;
            if ($value < 1 || $value > 999) {
                return;
            }
            break;
        default:
            $screen_option = false;
            if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false from the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 * @since 5.4.2 Only applied to options ending with '_page',
                 *              or the 'layout_columns' option.
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed  $screen_option The value to save instead of the option value.
                 *                              Default false (to skip saving the current option).
                 * @param string $option        The option name.
                 * @param int    $value         The option value.
                 */
                $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
            }
            /**
             * Filters a screen option value before it is set.
             *
             * The dynamic portion of the hook name, `$option`, refers to the option name.
             *
             * Returning false from the filter will skip saving the current option.
             *
             * @since 5.4.2
             *
             * @see set_screen_options()
             *
             * @param mixed   $screen_option The value to save instead of the option value.
             *                               Default false (to skip saving the current option).
             * @param string  $option        The option name.
             * @param int     $value         The option value.
             */
            $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
            if (false === $value) {
                return;
            }
            break;
    }
    update_user_meta($user->ID, $option, $value);
    $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
    if (isset($_POST['mode'])) {
        $url = add_query_arg(array('mode' => $_POST['mode']), $url);
    }
    wp_safe_redirect($url);
    exit;
}

WordPress Version: 5.9

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies(), true)) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types(), true)) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false from the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook name, `$option`, refers to the option name.
                 *
                 * Returning false from the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.5

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies(), true)) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types(), true)) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false from the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false from the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if (sanitize_key($option) != $option) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin.
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 3.5

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 3.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 3.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        $user = wp_get_current_user();
        if (!$user) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 2.8

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 2.7

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 2.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .20

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 2.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 1.7

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 1.6

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 1.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.1

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool     $keep   Whether to save or skip saving the screen option value. Default false.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 0.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .20

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 0.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .11

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 9.8

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 9.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .20

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 9.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .16

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .15

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .10

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            case 'export_personal_data_requests_per_page':
            case 'remove_personal_data_requests_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 6.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .20

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 6.2

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .19

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.6

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filters a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .30

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 5.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .23

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .22

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .30

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .24

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: .23

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 4.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        $url = remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer());
        if (isset($_POST['mode'])) {
            $url = add_query_arg(array('mode' => $_POST['mode']), $url);
        }
        wp_safe_redirect($url);
        exit;
    }
}

WordPress Version: 3.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .30

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 3.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .25

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .24

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 2.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .30

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 2.3

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .29

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .28

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 1.5

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .40

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 1.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .32

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .31

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 0.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .32

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .31

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 3.9

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8.0
 */
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The filter can also be used to modify non-standard [items]_per_page
                 * settings. See the parent function for a full list of standard options.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 2.8.0
                 *
                 * @see set_screen_options()
                 *
                 * @param bool|int $value  Screen option value. Default false to skip.
                 * @param string   $option The option name.
                 * @param int      $value  The number of rows to use.
                 */
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 8.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .35

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .34

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 7.5

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .40

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 7.4

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .35

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $screen_option = false;
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param mixed  $screen_option The value to save instead of the option value.
                     *                              Default false (to skip saving the current option).
                     * @param string $option        The option name.
                     * @param int    $value         The option value.
                     */
                    $screen_option = apply_filters('set-screen-option', $screen_option, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param mixed   $screen_option The value to save instead of the option value.
                 *                               Default false (to skip saving the current option).
                 * @param string  $option        The option name.
                 * @param int     $value         The option value.
                 */
                $value = apply_filters("set_screen_option_{$option}", $screen_option, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: .34

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                if ('_page' === substr($option, -5) || 'layout_columns' === $option) {
                    /**
                     * Filters a screen option value before it is set.
                     *
                     * The filter can also be used to modify non-standard [items]_per_page
                     * settings. See the parent function for a full list of standard options.
                     *
                     * Returning false to the filter will skip saving the current option.
                     *
                     * @since 2.8.0
                     * @since 5.4.2 Only applied to options ending with '_page',
                     *              or the 'layout_columns' option.
                     *
                     * @see set_screen_options()
                     *
                     * @param bool   $keep   Whether to save or skip saving the screen option value.
                     *                       Default false.
                     * @param string $option The option name.
                     * @param int    $value  The number of rows to use.
                     */
                    $value = apply_filters('set-screen-option', false, $option, $value);
                    // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
                }
                /**
                 * Filter a screen option value before it is set.
                 *
                 * The dynamic portion of the hook, `$option`, refers to the option name.
                 *
                 * Returning false to the filter will skip saving the current option.
                 *
                 * @since 5.4.2
                 *
                 * @see set_screen_options()
                 *
                 * @param bool   $keep   Whether to save or skip saving the screen option value.
                 *                       Default false.
                 * @param string $option The option name.
                 * @param int    $value  The number of rows to use.
                 */
                $value = apply_filters("set_screen_option_{$option}", false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}

WordPress Version: 3.7

/**
 * Saves option for number of rows when listing posts, pages, comments, etc.
 *
 * @since 2.8
**/
function set_screen_options()
{
    if (isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options'])) {
        check_admin_referer('screen-options-nonce', 'screenoptionnonce');
        if (!$user = wp_get_current_user()) {
            return;
        }
        $option = $_POST['wp_screen_options']['option'];
        $value = $_POST['wp_screen_options']['value'];
        if ($option != sanitize_key($option)) {
            return;
        }
        $map_option = $option;
        $type = str_replace('edit_', '', $map_option);
        $type = str_replace('_per_page', '', $type);
        if (in_array($type, get_taxonomies())) {
            $map_option = 'edit_tags_per_page';
        } elseif (in_array($type, get_post_types())) {
            $map_option = 'edit_per_page';
        } else {
            $option = str_replace('-', '_', $option);
        }
        switch ($map_option) {
            case 'edit_per_page':
            case 'users_per_page':
            case 'edit_comments_per_page':
            case 'upload_per_page':
            case 'edit_tags_per_page':
            case 'plugins_per_page':
            // Network admin
            case 'sites_network_per_page':
            case 'users_network_per_page':
            case 'site_users_network_per_page':
            case 'plugins_network_per_page':
            case 'themes_network_per_page':
            case 'site_themes_network_per_page':
                $value = (int) $value;
                if ($value < 1 || $value > 999) {
                    return;
                }
                break;
            default:
                $value = apply_filters('set-screen-option', false, $option, $value);
                if (false === $value) {
                    return;
                }
                break;
        }
        update_user_meta($user->ID, $option, $value);
        wp_safe_redirect(remove_query_arg(array('pagenum', 'apage', 'paged'), wp_get_referer()));
        exit;
    }
}