The edit_posts_per_page WordPress PHP filter lets you modify the number of posts displayed per page when listing “posts”.
Usage
add_filter('edit_posts_per_page', 'your_custom_function_name', 10, 2);
function your_custom_function_name($posts_per_page, $post_type) {
// your custom code here
return $posts_per_page;
}
Parameters
$posts_per_page (int): Number of posts to be displayed. Default is 20.$post_type (string): The post type.
More information
See WordPress Developer Resources: edit_posts_per_page
Examples
Change Posts Per Page for a Specific Post Type
Modify the number of posts per page for a custom post type called “products”.
add_filter('edit_posts_per_page', 'change_products_posts_per_page', 10, 2);
function change_products_posts_per_page($posts_per_page, $post_type) {
if ($post_type === 'products') {
$posts_per_page = 30;
}
return $posts_per_page;
}
Set Different Posts Per Page for Various Post Types
Change the number of posts per page for different post types.
add_filter('edit_posts_per_page', 'change_multiple_post_types_per_page', 10, 2);
function change_multiple_post_types_per_page($posts_per_page, $post_type) {
switch ($post_type) {
case 'products':
$posts_per_page = 30;
break;
case 'testimonials':
$posts_per_page = 10;
break;
}
return $posts_per_page;
}
Change Posts Per Page for All Post Types
Set the same number of posts per page for all post types.
add_filter('edit_posts_per_page', 'change_all_post_types_per_page', 10, 2);
function change_all_post_types_per_page($posts_per_page, $post_type) {
$posts_per_page = 25;
return $posts_per_page;
}
Display All Posts on One Page
Show all posts on a single page for a specific post type called “events”.
add_filter('edit_posts_per_page', 'display_all_events_on_one_page', 10, 2);
function display_all_events_on_one_page($posts_per_page, $post_type) {
if ($post_type === 'events') {
$posts_per_page = -1;
}
return $posts_per_page;
}
Display Posts Per Page Based on User Role
Change the number of posts per page for the “projects” post type, based on the user’s role.
add_filter('edit_posts_per_page', 'change_posts_per_page_based_on_role', 10, 2);
function change_posts_per_page_based_on_role($posts_per_page, $post_type) {
if ($post_type === 'projects') {
$user = wp_get_current_user();
if (in_array('editor', (array) $user->roles)) {
$posts_per_page = 15;
} elseif (in_array('administrator', (array) $user->roles)) {
$posts_per_page = 30;
}
}
return $posts_per_page;
}