cap->manage_terms, $object_id );
}
// for menu item types we don't filter
return true;
}
function _rs_mnt_modify_nav_menu_item( $menu_item_id, $menu_operation ) {
if ( $menu_item = get_post( $menu_item_id ) ) {
if ( 'nav_menu_item' == $menu_item->post_type ) {
//$item_type = get_post_meta( $menu_item_id, '_menu_item_type', true );
$object_type = get_post_meta( $menu_item_id, '_menu_item_object', true );
$object_id = get_post_meta( $menu_item_id, '_menu_item_object_id', true );
if ( ! $is_post_type = post_type_exists($object_type) )
$is_taxonomy = taxonomy_exists($object_type);
// WP performs update on every item even if no values have changed
if ( 'edit' == $menu_operation ) {
$posted_vals = array();
foreach ( array( 'title' => 'menu-item-title', 'attribute' => 'menu-item-attr-title', 'description' => 'menu-item-description', 'target' => 'menu-item-target',
'classes' => 'menu-item-classes', 'xfn' => 'menu-item-xfn', 'menu_order' => 'menu-item-position', 'menu_parent' => 'menu-item-parent-id' ) as $property => $col ) {
if ( isset( $_POST[$col][$menu_item_id] ) )
$posted_vals[$property] = $_POST[$col][$menu_item_id];
}
if ( isset( $posted_vals['classes'] ) )
$posted_vals['classes'] = array_map( 'sanitize_html_class', explode( ' ', $posted_vals['classes'] ) );
$stored_vals = array();
foreach( array( 'title' => 'post_title', 'attribute' => 'post_excerpt', 'description' => 'post_content', 'menu_order' => 'menu_order' ) as $property => $col ) {
$stored_vals[$property] = $menu_item->$col;
}
$stored_vals['menu_parent'] = get_post_meta( $menu_item_id, '_menu_item_menu_item_parent', true );
$stored_vals['target'] = get_post_meta( $menu_item_id, '_menu_item_target', true );
$stored_vals['classes'] = (array) get_post_meta( $menu_item_id, '_menu_item_classes', true );
$stored_vals['xfn'] = get_post_meta( $menu_item_id, '_menu_item_xfn', true );
if ( empty($stored_val['title']) )
$stored_vals['title'] = ( $is_post_type ) ? get_post_field( 'post_title', $object_id ) : get_term_field( 'name', $object_id, $object_type );
$changed = false;
foreach( array_keys($posted_vals) as $property ) {
if ( $posted_vals[$property] != $stored_vals[$property] ) {
$changed = true;
break;
}
}
if ( ! $changed )
return;
}
if ( $is_post_type ) {
$deny_menu_operation = ! current_user_can( 'edit_post', $object_id );
} elseif ( $is_taxonomy ) {
if ( $tx_obj = get_taxonomy( $object_type ) ) {
$deny_menu_operation = ! current_user_can( $tx_obj->cap->manage_terms, $object_id );
}
}
if ( ! empty($deny_menu_operation) ) {
if ( empty( $stored_vals['title'] ) )
$stored_vals['title'] = $menu_item->post_title;
if ( ! $stored_val['title'] )
$stored_vals['title'] = ( $is_post_type ) ? get_post_field( 'post_title', $object_id ) : get_term_field( 'name', $object_id, $object_type );
$link = admin_url( 'nav-menus.php' );
switch( $menu_operation ) {
case 'move':
wp_die( sprintf( __( 'You do not have permission to move the menu item "%1$s".
Return to Menu Editor', 'scoper' ), $stored_vals['title'], $link ) );
break;
case 'delete':
wp_die( sprintf( __( 'You do not have permission to delete the menu item "%1$s".
Return to Menu Editor', 'scoper' ), $stored_vals['title'], $link ) );
break;
default:
wp_die( sprintf( __( 'You do not have permission to edit the menu item "%1$s".
Return to Menu Editor', 'scoper' ), $stored_vals['title'], $link ) );
} // end switch
}
}
}
}
// transplanted from nav-menus.php
function _rs_determine_selected_menu() {
$nav_menus = wp_get_nav_menus( array('orderby' => 'name') );
// Get recently edited nav menu
$recently_edited = (int) get_user_option( 'nav_menu_recently_edited' );
$nav_menu_selected_id = isset( $_REQUEST['menu'] ) ? (int) $_REQUEST['menu'] : 0;
// If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu.
if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) {
$recently_edited = $nav_menu_selected_id;
// Else if $nav_menu_selected_id is not a menu and not requesting that we create a new menu, but $recently_edited is a menu, grab that one.
} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && is_nav_menu( $recently_edited ) ) {
$nav_menu_selected_id = $recently_edited;
// Else try to grab the first menu from the menus list
} elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && ! empty($nav_menus) ) {
$nav_menu_selected_id = $nav_menus[0]->term_id;
}
return $nav_menu_selected_id;
}
function _rs_disable_uneditable_items_ui() {
if ( ! $menu_id = _rs_determine_selected_menu() )
return;
$menu_items = wp_get_nav_menu_items( $menu_id, array('post_status' => 'any') );
$uneditable_items = array();
foreach( array_keys($menu_items) as $key ) {
if ( ! _rs_can_edit_menu_item( $menu_items[$key]->ID ) )
$uneditable_items[]= $menu_items[$key]->ID;
}
if ( ! $uneditable_items )
return;
?>