Skip to content
This repository was archived by the owner on Dec 16, 2022. It is now read-only.

Commit ea425d4

Browse files
committed
WIP: Sync changes from posts to nav menu items
1 parent ffdbe67 commit ea425d4

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

php/class-wp-customize-posts-preview.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public function add_preview_filters() {
9696
}
9797
add_filter( 'the_posts', array( $this, 'filter_the_posts_to_preview_settings' ), 1000, 2 );
9898
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 );
99100
add_action( 'the_post', array( $this, 'preview_setup_postdata' ) );
100101
add_filter( 'the_title', array( $this, 'filter_the_title' ), 1, 2 );
101102
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 ) {
534535
return 0;
535536
}
536537

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+
537575
/**
538576
* Keep track of the orderby keys used in queries on the page.
539577
*

0 commit comments

Comments
 (0)