WordPress.org

Make WordPress Core

Changeset 14263


Ignore:
Timestamp:
04/28/2010 02:04:30 AM (10 years ago)
Author:
nacin
Message:

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

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/admin-ajax.php

    r14248 r14263  
    403403        die('-1');
    404404
    405     if ( 'nav_menu_item' == get_post_type( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) )
     405    if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) )
    406406        die('1');
    407407    else
     
    14671467    }
    14681468    die( '0' );
    1469 case 'save-custom-link':
    1470     if ( ! current_user_can('manage_links') )
    1471         die('-1');
    1472 
    1473     $link_name = isset( $_POST['link_name'] ) ? esc_html($_POST['link_name']) : null;
    1474     $link_url = isset( $_POST['link_url'] ) ? esc_url_raw($_POST['link_url']) : null;
    1475 
    1476     if ( !$link_name || !$link_url )
    1477         die('-1');
    1478 
    1479     $post = array(
    1480         'post_status' => 'draft', 'post_type' => 'nav_menu_item', 'ping_status' => 0,
    1481         'post_author' => $user_ID, 'post_title' => $link_name, 'post_excerpt' => '',
    1482         'post_parent' => 0, 'menu_order' => 0, 'post_content' => '',
    1483     );
    1484 
    1485     $link_id = wp_insert_post( $post );
    1486 
    1487     update_post_meta( $link_id, '_menu_item_type', 'custom' );
    1488     update_post_meta( $link_id, '_menu_item_object_id', (int) $link_id );
    1489     update_post_meta( $link_id, '_menu_item_object', 'custom' );
    1490     update_post_meta( $link_id, '_menu_item_target', '' );
    1491     update_post_meta( $link_id, '_menu_item_classes', '' );
    1492     update_post_meta( $link_id, '_menu_item_xfn', '' );
    1493     update_post_meta( $link_id, '_menu_item_url', $link_url );
    1494 
    1495     die( json_encode($link_id) );
     1469    break;
    14961470default :
    14971471    do_action( 'wp_ajax_' . $_POST['action'] );
  • trunk/wp-admin/nav-menus.php

    r14254 r14263  
    6464        $menu_item_id = (int) $_REQUEST['menu-item'];
    6565        $next_item_id = 0;
    66         if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     66        if ( is_nav_menu_item( $menu_item_id ) ) {
    6767            $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
    6868            if ( ! is_wp_error( $menus ) ) {
     
    8585        check_admin_referer( 'move-menu_item' );
    8686        $menu_item_id = empty( $next_item_id ) ? (int) $_REQUEST['menu-item'] : $next_item_id;
    87         if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     87        if ( is_nav_menu_item( $menu_item_id ) ) {
    8888            $menus = isset( $_REQUEST['menu'] ) ? array( (int) $_REQUEST['menu'] ) : wp_get_object_terms( $menu_item_id, 'nav_menu', array( 'fields' => 'ids' ) );
    8989            if ( ! is_wp_error( $menus ) ) {
     
    167167
    168168
    169         if ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) {
     169        if ( is_nav_menu_item( $menu_item_id ) ) {
    170170            if ( wp_delete_post( $menu_item_id, true ) ) {
    171171               
     
    261261
    262262                // Remove menu items from the menu that weren't in $_POST
    263                 if ( !empty( $menu_items ) ) {
     263                if ( ! empty( $menu_items ) ) {
    264264                    foreach ( array_keys( $menu_items ) as $menu_item_id ) {
    265                         wp_delete_post( $menu_item_id );
     265                        if ( is_nav_menu_item( $menu_item_id ) ) {
     266                            wp_delete_post( $menu_item_id );
     267                        }
    266268                    }
    267269                }
  • trunk/wp-includes/nav-menu.php

    r14248 r14263  
    3636
    3737/**
    38  * Check if navigation menu exists.
    39  *
    40  * Returns the menu object, or false if the term doesn't exist.
     38 * Check if the given ID is a nav menu.
     39 *
     40 * Returns true if it is; false otherwise.
    4141 *
    4242 * @since 3.0.0
     
    5555   
    5656    return false;
     57}
     58
     59/**
     60 * Determine whether the given ID is a nav menu item.
     61 *
     62 * @since 3.0.0
     63 *
     64 * @param int $menu_item_id The ID of the potential nav menu item.
     65 * @return bool Whether the given ID is that of a nav menu item.
     66 */
     67function is_nav_menu_item( $menu_item_id = 0 ) {
     68    return ( ! is_wp_error( $menu_item_id ) && ( 'nav_menu_item' == get_post_type( $menu_item_id ) ) );
    5769}
    5870
     
    178190    $menu_id = (int) $menu_id;
    179191    $menu_item_db_id = (int) $menu_item_db_id;
     192
     193    // make sure that we don't convert non-nav_menu_item objects into nav_menu_item objects
     194    if ( ! empty( $menu_item_db_id ) && ! is_nav_menu_item( $menu_item_db_id ) ) {
     195        return new WP_Error('update_nav_menu_item_failed', __('The given object ID is not that of a menu item.'));
     196    }
    180197
    181198    $menu = wp_get_nav_menu_object( $menu_id );
     
    236253    // New menu item
    237254    if ( 0 == $menu_item_db_id ) {
     255        $post['ID'] = 0;
    238256        $menu_item_db_id = wp_insert_post( $post );
    239257
Note: See TracChangeset for help on using the changeset viewer.