add post to nav menu
<?php | |
add_action( 'add_meta_boxes', 'add_custom_box_wpse_87594' ); | |
add_action( 'save_post', 'save_postdata_wpse_87594', 10, 2 ); | |
function add_custom_box_wpse_87594() | |
{ | |
add_meta_box( | |
'section_id_wpse_87594', | |
__( 'Available Nav-Menus' ), | |
'inner_custom_box_wpse_87594', | |
'post', | |
'side', | |
'high' | |
); | |
} | |
function inner_custom_box_wpse_87594() | |
{ | |
$navmenus = wp_get_nav_menus( array( 'hide_empty' => false, 'orderby' => 'none' ) ); | |
// DEBUG | |
// echo '<pre>' . print_r( $navmenus, true ) . '</pre>'; | |
wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_wpse_87594' ); | |
echo '<select name="nav_menus_dropdown" id="nav_menus_dropdown"> | |
<option value="">- Select -</option>'; | |
foreach( $navmenus as $m ) | |
{ | |
echo "<optgroup label='$m->name'>"; | |
echo "<option value={$m->term_id}>↑ Add on top</option>"; | |
$items = wp_get_nav_menu_items( $m->term_id); | |
foreach ($items as $key => $menu_item ) { | |
if(!$menu_item->menu_item_parent){ | |
printf('<option value="%s-%s">%s</option>', | |
$m->term_id, | |
$menu_item->object_id, | |
$menu_item->title); | |
} | |
echo "</optgroup>"; | |
} | |
echo '</select>'; | |
} | |
} | |
function save_postdata_wpse_87594( $post_id, $post_object ) | |
{ | |
// Auto save? | |
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) | |
return; | |
// Security | |
if ( | |
!isset( $_POST['noncename_wpse_87594'] ) | |
|| !wp_verify_nonce( $_POST['noncename_wpse_87594'], plugin_basename( __FILE__ ) ) | |
) | |
return; | |
// Correct post_type | |
if ( 'post' != $post_object->post_type ) | |
return; | |
if( !empty( $_POST['nav_menus_dropdown'] ) ) | |
{ | |
$parents = explode('-', $_POST['nav_menus_dropdown']); | |
$item = array( | |
'menu-item-title' => $_POST['post_title'], | |
'menu-item-object' => 'page', | |
'menu-item-object-id' => $_POST['ID'], | |
'menu-item-type' => 'post_type', | |
'menu-item-status' => 'publish' | |
); | |
if(count($parents) > 1){ | |
$item['menu-item-parent-id'] = $parents[1]; | |
} | |
wp_update_nav_menu_item( | |
$_POST['nav_menus_dropdown'], | |
0, | |
$item | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment