add_filter( 'wp_get_nav_menu_items', function( $items, $menu ) {
// Settings
$menu_name = 'MENU NAME HERE';
$parent_title = 'PARENT MENU ITEM TITLE HERE';
// Select Menu
if( $menu->name != $menu_name ) {
return $items;
}
// Loop Menu Items
$menu_children = [];
$menu_order = 0;
foreach( $items as $i => $item ) {
// Match Parent Item
if( $item->post_title != $parent_title ) {
if( $menu_order ) {
$item->menu_order = ++ $menu_order;
}
continue;
}
$menu_order = $item->menu_order;
// Query Sticky Posts
$args = [
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC',
'include' => implode( ',', get_option( 'sticky_posts' ) )
];
$posts = get_posts( $args );
// Query Latest Posts
$args = [
'posts_per_page' => 10,
'orderby' => 'date',
'order' => 'DESC',
'exclude' => implode( ',', get_option( 'sticky_posts' ) )
];
$posts = array_merge( $posts, get_posts( $args ) );
// Pad To Ten
$posts = array_slice( $posts, 0, 10 );
// Loop Posts To Add
foreach( $posts as $post ) {
$post->menu_item_parent = $item->ID;
$post->post_type = 'nav_menu_item';
$post->object = 'custom';
$post->type = 'custom';
$post->menu_order = ++ $menu_order;
$post->title = $post->post_title;
$post->url = get_permalink( $post->ID );
$post->target = '';
$post->attr_title = '';
$post->description = '';
$post->classes = [];
$post->xfn = '';
$menu_children[] = $post;
}
}
// Return New Menu
return array_merge( $items, $menu_children );
}, 10, 2 );
Navigation menu add sticky and latest posts as menu items
Adds sticky and latest posts as menu items to a navigation menu by title and a parent menu item by title.
How to use
PHP Code Snippets
- Log into a staging, development, or locally hosted clone of your site
- Install and activate Code Snippets
- WP Admin > Snippets > Add New
- Copy and paste the code from the Description tab above
- Check to ensure formatting came over properly and no syntax errors show up in the editor
- Customize the code as desired
- Add a meaningful title
- Select whether to run on front-end or back-end (or both)
- Click “Save and Activate”
- Test your site to ensure it works
- Disable if any problems, or recover
- Repeat for live environment
License
All code snippets are licensed GPLv2 (or later) matching WordPress licensing.
Disclaimer of warranty:
Except when otherwise stated in writing the copyright holders and/or other parties provide the program as-is without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
Support
- Describe the issue and what you’ve observed.
- Describe your expected outcome(s).
- List steps to reproduce the issue.
- Optionally provide screen-shot or video URLs.
