@@ -96,6 +96,7 @@ public function add_preview_filters() {
96
96
}
97
97
add_filter ( 'the_posts ' , array ( $ this , 'filter_the_posts_to_preview_settings ' ), 1000 , 2 );
98
98
add_filter ( 'get_pages ' , array ( $ this , 'filter_get_pages_to_preview_settings ' ), 1 , 2 );
99
+ add_filter ( 'wp_setup_nav_menu_item ' , array ( $ this , 'filter_wp_setup_nav_menu_item_to_preview_settings ' ), 1 );
99
100
add_action ( 'the_post ' , array ( $ this , 'preview_setup_postdata ' ) );
100
101
add_filter ( 'the_title ' , array ( $ this , 'filter_the_title ' ), 1 , 2 );
101
102
add_filter ( 'get_post_metadata ' , array ( $ this , 'filter_get_post_meta_to_preview ' ), 1000 , 4 );
@@ -534,6 +535,43 @@ protected function compare_posts_for_get_pages( $post1, $post2 ) {
534
535
return 0 ;
535
536
}
536
537
538
+ /**
539
+ * Filter wp_setup_nav_menu_item to preview settings.
540
+ *
541
+ * Note that the post_parent for a nav_menu_item is set to the original object's post_parent.
542
+ * However, if the original object's post_parent is changed, core does not currently keep the
543
+ * nav menu item's post_parent in sync. As such, the classes on a nav menu item like
544
+ * `current_page_ancestor` or `current_page_parent` will only be valid if the post_parent
545
+ * for a page was not modified after the nav menu item was created. See
546
+ * {@link https://core.trac.wordpress.org/ticket/17077}.
547
+ *
548
+ * @param object $nav_menu_item Nav menu item object.
549
+ * @return object Mutated object.
550
+ */
551
+ public function filter_wp_setup_nav_menu_item_to_preview_settings ( $ nav_menu_item ) {
552
+
553
+ if ( ! ( isset ( $ nav_menu_item ->type ) && 'post_type ' === $ nav_menu_item ->type && ! empty ( $ nav_menu_item ->object_id ) ) ) {
554
+ return $ nav_menu_item ;
555
+ }
556
+
557
+ $ original_post = get_post ( $ nav_menu_item ->object_id );
558
+ if ( empty ( $ original_post ) ) {
559
+ return $ nav_menu_item ;
560
+ }
561
+
562
+ $ post_setting_id = WP_Customize_Post_Setting::get_post_setting_id ( $ original_post );
563
+ $ post_setting = $ this ->component ->manager ->get_setting ( $ post_setting_id );
564
+ if ( ! $ post_setting || ! array_key_exists ( $ post_setting , $ this ->component ->manager ->unsanitized_post_values () ) ) {
565
+ return $ nav_menu_item ;
566
+ }
567
+
568
+ $ previewed_post_data = $ post_setting ->value ();
569
+
570
+ // @todo Override menu_order?
571
+ // @todo Override post_parent?
572
+ return $ nav_menu_item ;
573
+ }
574
+
537
575
/**
538
576
* Keep track of the orderby keys used in queries on the page.
539
577
*
0 commit comments