Detect a screen option change

In WordPress code, how can I detect a screen option change? Ie, in the below image I want to hook when one of the column screen options changes. Is there a specific hook for this?



My usecase:

I need to add a screen option to the 'All Posts' page. If the user has unchecked my screen option then the All Posts table should not display posts that have a certain category. I have pretty much all my code for this usecase working (see below) apart from being able to hook/detect when 'My Custom Screen Option' is changed (ticked on or off). If I can do that I can then update the users meta with this decision.

function add_custom_columns( $columns ) {
    $columns['display_xyz'] = __( 'XYZ Posts' );
    return $columns;
}
add_filter( 'manage_posts_columns', 'add_custom_columns' );

function set_sortable_columns( $columns ) {
    $columns['display_xyz'] = 'display_xyz';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'set_sortable_columns' );

function sort_all_posts( $query ) {
    global $current_screen;

    // If on 'All Posts' page.
    if ( isset( $current_screen )  is_admin()  $current_screen-id === 'edit-post'  $query-query_vars['post_type'] === 'post' ) {
        $show_xyz_posts = get_user_meta( get_current_user_id(), 'display_xyz' );

        if ( ! $show_xyz_posts ) {
            // Edit $query to not retrieve posts that have a specific category 'xyz'
        }
    }
}
add_filter( 'parse_query', 'sort_all_posts' );

// How to detect change of my custom screen option so I can hook the below option??
function on_change_screen_option($option, $value) {

    if ( $option === 'display_xyz' ) {
        update_user_meta( get_current_user_id(), 'display_xyz', $value );
    }
}
add_action( '???', 'on_change_screen_option' );

Topic screen-options Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.