Make WordPress Core

Ticket #38836: 38836.2.diff

File 38836.2.diff, 3.3 KB (added by christophherr, 8 years ago)
  • src/wp-includes/nav-menu-template.php

     
    431431                                $classes[] = 'menu-item-home';
    432432                }
    433433
     434                // Get an array of all public custom post types.
     435                $post_types = get_post_types( array(
     436                        'public'   => true,
     437                        '_builtin' => false
     438                ) );
     439
     440                // Check if a custom post type single item is being viewed.
     441                if ( is_singular( $post_types ) ) {
     442
     443                        // Get the post type being viewed.
     444                        $post_type = get_post_type();
     445
     446                        if ( $post_type === $menu_item->object ) {
     447                                $classes[] = 'current_page_parent';
     448                        }
     449                }
     450
    434451                // back-compat with wp_page_menu: add "current_page_parent" to static home page link for any non-page query
    435452                if ( ! empty( $home_page_id ) && 'post_type' == $menu_item->type && empty( $wp_query->is_page ) && $home_page_id == $menu_item->object_id )
    436453                        $classes[] = 'current_page_parent';
  • tests/phpunit/tests/post/nav-menu.php

     
    523523
    524524                $this->assertNotContains( 'menu-item-home', $classes );
    525525        }
     526
     527        /**
     528         * @ticket 38836
     529         */
     530        function test_class_applied_to_public_custom_post_type_archive_on_single_cpt_post() {
     531                $page_id = self::factory()->post->create( array( 'post_type' => 'page', 'post_title' => 'Test Page' ) );
     532
     533                register_post_type( 'cpt', array( 'public' => true, 'has_archive' => true ) );
     534                $cpt_id = self::factory()->post->create( array( 'post_type' => 'cpt', 'post_name' => 'cpt-name' ) );
     535
     536                wp_update_nav_menu_item( $this->menu_id, 0, array(
     537                        'menu-item-type'   => 'post_type_archive',
     538                        'menu-item-object' => 'cpt',
     539                        'menu-item-status' => 'publish',
     540                ) );
     541
     542                wp_update_nav_menu_item( $this->menu_id, 0, array(
     543                        'menu-item-type'          => 'post_type',
     544                        'menu-item-object'        => 'page',
     545                        'menu-item-object-id' => $page_id,
     546                        'menu-item-status'        => 'publish',
     547                ) );
     548
     549                $permalink = get_permalink( $cpt_id );
     550                $this->go_to( $permalink );
     551
     552                $menu_items = wp_get_nav_menu_items( $this->menu_id );
     553                _wp_menu_item_classes_by_context( $menu_items );
     554
     555                $cptarchive_classes = $menu_items[0]->classes;
     556                $testpage_classes = $menu_items[1]->classes;
     557
     558                $this->assertContains( 'current_page_parent', $cptarchive_classes );
     559                $this->assertNotContains( 'current_page_parent', $testpage_classes );
     560        }
     561
     562        /**
     563         * @ticket 38836
     564         */
     565        function test_class_not_applied_to_custom_post_type_archive_on_single_cpt_post() {
     566                register_post_type( 'cpt', array( 'has_archive' => true ) );
     567                $cpt_id = self::factory()->post->create( array( 'post_type' => 'cpt', 'post_name' => 'cpt-name' ) );
     568
     569                wp_update_nav_menu_item( $this->menu_id, 0, array(
     570                        'menu-item-type'   => 'post_type_archive',
     571                        'menu-item-object' => 'cpt',
     572                        'menu-item-status' => 'publish',
     573                ) );
     574
     575                $permalink = get_permalink( $cpt_id );
     576                $this->go_to( $permalink );
     577
     578                $menu_items = wp_get_nav_menu_items( $this->menu_id );
     579                _wp_menu_item_classes_by_context( $menu_items );
     580
     581                $cptarchive_classes = $menu_items[0]->classes;
     582
     583                $this->assertNotContains( 'current_page_parent', $cptarchive_classes );
     584        }
    526585}