Skip to content

Instantly share code, notes, and snippets.

@iandunn
Created January 1, 2026 21:47
Show Gist options
  • Select an option

  • Save iandunn/3e6c9f6b0dde95bf5c68356007effe13 to your computer and use it in GitHub Desktop.

Select an option

Save iandunn/3e6c9f6b0dde95bf5c68356007effe13 to your computer and use it in GitHub Desktop.
Show 120 items on WP admin screens instead of the default 20
<?php
namespace AdminScreenItems;
add_action( 'admin_init', __NAMESPACE__ . '\register_admin_screen_items_callback' );
/**
* Register set_minimum_number_admin_screen_items to all admin screens.
*
* It's necessary to manually add it for each screen name because WP_Screen::render_per_page_options
* doesn't have a generic filter.
*/
function register_admin_screen_items_callback() {
$core_screens = [
'edit_comments',
'upload',
'users',
'plugins',
'themes',
'edit_tags',
'export_personal_data_requests',
'remove_personal_data_requests',
'sites_network',
'users_network',
'site_users_network',
'plugins_network',
'themes_network',
'site_themes_network',
'comments',
'edit_categories',
];
$post_types = get_post_types( [], 'names' );
$taxonomies = get_taxonomies( [], 'names' );
$post_type_screens = array_map( fn( $post_type ) => "edit_{$post_type}", $post_types );
$taxonomy_screens = array_map( fn( $taxonomy ) => "edit_{$taxonomy}", $taxonomies );
$screen_hooks = array_merge( $core_screens, $post_type_screens, $taxonomy_screens );
foreach ( $screen_hooks as $hook ) {
add_filter( "get_user_option_{$hook}_per_page", __NAMESPACE__ . '\set_minimum_number_admin_screen_items' );
}
}
/**
* Admin screens should always show at least 120 items on each page.
*/
function set_minimum_number_admin_screen_items( $result ) {
return max( 120, (int) $result );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment