WordPress.org

Make WordPress Core

Ticket #13822: 13822.2.diff

File 13822.2.diff, 3.8 KB (added by nacin, 9 years ago)
  • wp-includes/nav-menu-template.php

     
    151151        if ( ! $menu && !$args->theme_location ) {
    152152                $menus = wp_get_nav_menus();
    153153                foreach ( $menus as $menu_maybe ) {
    154                         if ( $menu_items = wp_get_nav_menu_items($menu_maybe->term_id) ) {
     154                        if ( $menu_items = wp_get_nav_menu_items($menu_maybe->term_id, array( 'public' => true ) ) ) {
    155155                                $menu = $menu_maybe;
    156156                                break;
    157157                        }
     
    160160
    161161        // If the menu exists, get its items.
    162162        if ( $menu && ! is_wp_error($menu) && !isset($menu_items) )
    163                 $menu_items = wp_get_nav_menu_items( $menu->term_id );
     163                $menu_items = wp_get_nav_menu_items( $menu->term_id, array( 'public' => true ) );
    164164
    165165        // If no menu was found or if the menu has no items and no location was requested, call the fallback_cb if it exists
    166166        if ( ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) && !$args->theme_location ) )
  • wp-includes/nav-menu.php

     
    454454
    455455        $defaults = array( 'order' => 'ASC', 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item',
    456456                'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order', 'nopaging' => true,
    457                 'update_post_term_cache' => false );
     457                'update_post_term_cache' => false, 'public' => false );
    458458        $args = wp_parse_args( $args, $defaults );
     459        $public_consumption = $args['public'];
     460        unset( $args['public'] );
    459461        if ( count( $items ) > 1 )
    460462                $args['include'] = implode( ',', $items );
    461463        else
     
    497499                unset($terms);
    498500        }
    499501
    500         $items = array_map( 'wp_setup_nav_menu_item', $items );
     502        if ( $public_consumption )
     503                $items = array_filter( array_map( 'wp_setup_nav_menu_item_published', $items ) );
     504        else
     505                $items = array_map( 'wp_setup_nav_menu_item', $items );
    501506
    502507        if ( ARRAY_A == $args['output'] ) {
    503508                $GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
     
    512517}
    513518
    514519/**
     520 * Callback that wraps wp_setup_nav_menu_item() to ensure only published posts are shown publicly.
     521 *
     522 * @uses wp_setup_nav_menu_item()
     523 * @since 3.0.0
     524 */
     525function wp_setup_nav_menu_item_published( $menu_item ) {
     526        return wp_setup_nav_menu_item( $menu_item, array( 'post_object_status' => 'publish' ) );
     527}
     528
     529/**
    515530 * Decorates a menu item object with the shared navigation menu item properties.
    516531 *
    517532 * Properties:
     
    533548 * @since 3.0.0
    534549 *
    535550 * @param object $menu_item The menu item to modify.
     551 * @param array $args
    536552 * @return object $menu_item The menu item with standard menu item properties.
    537553 */
    538 function wp_setup_nav_menu_item( $menu_item ) {
     554function wp_setup_nav_menu_item( $menu_item, $args ) {
     555        $defaults = array( 'post_object_status' => 'any' );
     556        $args = wp_parse_args( $args, $defaults );
     557
    539558        if ( isset( $menu_item->post_type ) ) {
    540559                if ( 'nav_menu_item' == $menu_item->post_type ) {
    541560                        $menu_item->db_id = (int) $menu_item->ID;
     
    545564                        $menu_item->type = empty( $menu_item->type ) ? get_post_meta( $menu_item->ID, '_menu_item_type', true ) : $menu_item->type;
    546565
    547566                        if ( 'post_type' == $menu_item->type ) {
     567                                $original_object = get_post( $menu_item->object_id );
     568                                if ( 'publish' == $args['post_object_status'] && $original_object->post_status != 'publish' )
     569                                        return null;
     570
    548571                                $object = get_post_type_object( $menu_item->object );
    549572                                $menu_item->type_label = $object->labels->singular_name;
    550573                                $menu_item->url = get_permalink( $menu_item->object_id );
    551574
    552                                 $original_object = get_post( $menu_item->object_id );
    553575                                $original_title = $original_object->post_title;
    554576                                $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
    555577