Using WordPress ‘nav_menu_items_{$post_type_name}_recent’ PHP filter

The nav_menu_items_{$post_type_name}_recent WordPress PHP filter allows you to modify the posts displayed in the ‘Most Recent’ tab of the current post type’s menu items meta box.

Usage

add_filter( 'nav_menu_items_post_recent', 'your_custom_function', 10, 4 );

function your_custom_function( $most_recent, $args, $box, $recent_args ) {
  // Your custom code here
  return $most_recent;
}

Parameters

  • $most_recent (WP_Post[]): An array of post objects being listed.
  • $args (array): An array of WP_Query arguments for the meta box.
  • $box (array): Arguments passed to wp_nav_menu_item_post_type_meta_box().
  • $recent_args (array): An array of WP_Query arguments for the ‘Most Recent’ tab.

More information

See WordPress Developer Resources: nav_menu_items_post_recent

Examples

Exclude specific categories from recent posts

add_filter( 'nav_menu_items_post_recent', 'exclude_categories_from_recent_posts', 10, 4 );

function exclude_categories_from_recent_posts( $most_recent, $args, $box, $recent_args ) {
  $exclude_categories = array( 3, 5, 7 ); // Category IDs to exclude
  $filtered_posts = array();

  foreach ( $most_recent as $post ) {
    if ( !in_category( $exclude_categories, $post ) ) {
      $filtered_posts[] = $post;
    }
  }

  return $filtered_posts;
}

Change the number of recent posts displayed

add_filter( 'nav_menu_items_post_recent_args', 'change_recent_posts_number', 10, 3 );

function change_recent_posts_number( $args, $box, $recent_args ) {
  $args['posts_per_page'] = 15; // Change the number of posts displayed
  return $args;
}
add_filter( 'nav_menu_items_post_recent', 'only_featured_image_posts', 10, 4 );

function only_featured_image_posts( $most_recent, $args, $box, $recent_args ) {
  $featured_posts = array();

  foreach ( $most_recent as $post ) {
    if ( has_post_thumbnail( $post->ID ) ) {
      $featured_posts[] = $post;
    }
  }

  return $featured_posts;
}

Order recent posts by comment count

add_filter( 'nav_menu_items_post_recent_args', 'order_recent_posts_by_comment_count', 10, 3 );

function order_recent_posts_by_comment_count( $args, $box, $recent_args ) {
  $args['orderby'] = 'comment_count';
  $args['order'] = 'DESC';
  return $args;
}

Show only posts from a specific author

add_filter( 'nav_menu_items_post_recent_args', 'show_specific_author_posts', 10, 3 );

function show_specific_author_posts( $args, $box, $recent_args ) {
  $args['author'] = 2; // Change the author ID
  return $args;
}