apply_filters( 'set-screen-option', bool $keep, string $option, int $value )

Filters a screen option value before it is set.


Description Description

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.

See also See also


Top ↑

Parameters Parameters

$keep

(bool) Whether to save or skip saving the screen option value. Default false.

$option

(string) The option name.

$value

(int) The number of rows to use.


Top ↑

Source Source

File: wp-admin/includes/misc.php

View on Trac


Top ↑

Changelog Changelog

Changelog
Version Description
2.8.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content

    This cannot be called too late in the WordPress action stack or it will not fire at the right time. You cannot put it inside a function running during the ‘admin_menu’ hook, for example. For the Store Locator Plus plugin (you can find up-to-date working code buried in there) I find adding the filter inside the WordPress ‘init’ methods works best as this is called early in the WordPress action stack.

    The “sister” add_screen_option() call, however, tends to work better later in the call stack such as within the ‘admin_menu’ hook.

    The general premise: save the options goes before (WP ‘init’ hook) setting up the options (WP ‘admin_menu’ hook).

  2. Skip to note 2 content
    Contributed by vee

    To make it really work and easy to understand.

    This code will NOT work.

    add_filter('set-screen-option', 'myFilterScreenOption', 10, 3);
    function myFilterScreenOption($keep, $option, $value) {
        if ($option === 'myitem_per_page') {
            if ($value < 0) {
                $value = 0;
            } elseif ($value > 100) {
                $value = 100;
            }
        }
        return $value;
    }
    

    If you enter 200 as item per page, it will still be 200 not 100 because you call to this filter too early.

    This code will work.

    add_filter('set-screen-option', 'myFilterScreenOption', 11, 3);
    function myFilterScreenOption($keep, $option, $value) {
        if ($option === 'myitem_per_page') {
            if ($value < 0) {
                $value = 0;
            } elseif ($value > 100) {
                $value = 100;
            }
        }
        return $value;
    }
    

    Just add priority to more than 10.

    Tested in WordPress 5.1

You must log in before being able to contribute a note or feedback.