Verify nav menu items. props filosofo, fixes #13154.

git-svn-id: http://svn.automattic.com/wordpress/trunk@14263 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
nacin 2010-04-28 02:04:30 +00:00
parent 1143a84f7f
commit f01d1883e4
3 changed files with 29 additions and 35 deletions

View File

@ -402,7 +402,7 @@ case 'delete-menu-item' :
if ( ! current_user_can( 'switch_themes' ) )
die('-1');
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) )
if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) )
die('1');
else
die('0');
@ -1466,33 +1466,7 @@ case 'set-post-thumbnail':
}
}
die( '0' );
case 'save-custom-link':
if ( ! current_user_can('manage_links') )
die('-1');
$link_name = isset( $_POST['link_name'] ) ? esc_html($_POST['link_name']) : null;
$link_url = isset( $_POST['link_url'] ) ? esc_url_raw($_POST['link_url']) : null;
if ( !$link_name || !$link_url )
die('-1');
$post = array(
'post_status' => 'draft', 'post_type' => 'nav_menu_item', 'ping_status' => 0,
'post_author' => $user_ID, 'post_title' => $link_name, 'post_excerpt' => '',
'post_parent' => 0, 'menu_order' => 0, 'post_content' => '',
);
$link_id = wp_insert_post( $post );
update_post_meta( $link_id, '_menu_item_type', 'custom' );
update_post_meta( $link_id, '_menu_item_object_id', (int) $link_id );
update_post_meta( $link_id, '_menu_item_object', 'custom' );
update_post_meta( $link_id, '_menu_item_target', '' );
update_post_meta( $link_id, '_menu_item_classes', '' );
update_post_meta( $link_id, '_menu_item_xfn', '' );
update_post_meta( $link_id, '_menu_item_url', $link_url );
die( json_encode($link_id) );
break;
default :
do_action( 'wp_ajax_' . $_POST['action'] );
die('0');

View File

@ -63,7 +63,7 @@ switch ( $action ) {
check_admin_referer( 'move-menu_item' );
$menu_item_id = (int) $_REQUEST['menu-item'];
$next_item_id = 0;
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
if ( is_nav_menu_item( $menu_item_id ) ) {
$menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
if ( ! is_wp_error( $menus ) ) {
foreach( (array) $menus as $menu_id ) {
@ -84,7 +84,7 @@ switch ( $action ) {
case 'move-up-menu-item' :
check_admin_referer( 'move-menu_item' );
$menu_item_id = empty( $next_item_id ) ? (int) $_REQUEST['menu-item'] : $next_item_id;
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
if ( is_nav_menu_item( $menu_item_id ) ) {
$menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
if ( ! is_wp_error( $menus ) ) {
foreach( (array) $menus as $menu_id ) {
@ -166,7 +166,7 @@ switch ( $action ) {
check_admin_referer( 'delete-menu_item_' . $menu_item_id );
if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
if ( is_nav_menu_item( $menu_item_id ) ) {
if ( wp_delete_post( $menu_item_id, true ) ) {
$messages_div = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>';
@ -260,9 +260,11 @@ switch ( $action ) {
}
// Remove menu items from the menu that weren't in $_POST
if ( !empty( $menu_items ) ) {
if ( ! empty( $menu_items ) ) {
foreach ( array_keys( $menu_items ) as $menu_item_id ) {
wp_delete_post( $menu_item_id );
if ( is_nav_menu_item( $menu_item_id ) ) {
wp_delete_post( $menu_item_id );
}
}
}

View File

@ -35,9 +35,9 @@ function wp_get_nav_menu_object( $menu ) {
}
/**
* Check if navigation menu exists.
* Check if the given ID is a nav menu.
*
* Returns the menu object, or false if the term doesn't exist.
* Returns true if it is; false otherwise.
*
* @since 3.0.0
*
@ -56,6 +56,18 @@ function is_nav_menu( $menu ) {
return false;
}
/**
* Determine whether the given ID is a nav menu item.
*
* @since 3.0.0
*
* @param int $menu_item_id The ID of the potential nav menu item.
* @return bool Whether the given ID is that of a nav menu item.
*/
function is_nav_menu_item( $menu_item_id = 0 ) {
return ( ! is_wp_error( $menu_item_id ) && ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) );
}
/**
* Create a Navigation Menu.
*
@ -178,6 +190,11 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item
$menu_id = (int) $menu_id;
$menu_item_db_id = (int) $menu_item_db_id;
// make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects
if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) {
return new WP_Error('update_nav_menu_item_failed', __('The given object ID is not that of a menu item.'));
}
$menu = wp_get_nav_menu_object( $menu_id );
if ( ! $menu || is_wp_error( $menu ) ) {
@ -235,6 +252,7 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item
// New menu item
if ( 0 == $menu_item_db_id ) {
$post['ID'] = 0;
$menu_item_db_id = wp_insert_post( $post );
// Update existing menu item