Make WordPress Core

Ticket #39665: 39665.4.diff

File 39665.4.diff, 2.9 KB (added by dlh, 7 years ago)
  • src/wp-includes/class-wp-customize-nav-menus.php

     
    12741274                ksort( $exported_args );
    12751275                $exported_args['args_hmac'] = $this->hash_nav_menu_args( $exported_args );
    12761276
     1277                // Add edit shortcuts to fallbacks. See #39665.
     1278                if ( $can_partial_refresh && is_callable( $exported_args['fallback_cb'] ) ) {
     1279                        $args['fallback_cb'] = array( $this, 'echo_preview_nav_menu_args_fallback_with_partial_refresh' );
     1280                }
     1281
    12771282                $args['customize_preview_nav_menus_args'] = $exported_args;
    12781283                $this->preview_nav_menu_instance_args[ $exported_args['args_hmac'] ] = $exported_args;
     1284
    12791285                return $args;
    12801286        }
    12811287
     
    12891295         *
    12901296         * @see wp_nav_menu()
    12911297         *
    1292          * @param string $nav_menu_content The HTML content for the navigation menu.
    1293          * @param object $args             An object containing wp_nav_menu() arguments.
     1298         * @param string       $nav_menu_content The HTML content for the navigation menu.
     1299         * @param object|array $args            wp_nav_menu() arguments.
    12941300         * @return null
    12951301         */
    12961302        public function filter_wp_nav_menu( $nav_menu_content, $args ) {
     1303                $args = (object) $args;
    12971304                if ( isset( $args->customize_preview_nav_menus_args['can_partial_refresh'] ) && $args->customize_preview_nav_menus_args['can_partial_refresh'] ) {
    12981305                        $attributes = sprintf( ' data-customize-partial-id="%s"', esc_attr( 'nav_menu_instance[' . $args->customize_preview_nav_menus_args['args_hmac'] . ']' ) );
    12991306                        $attributes .= ' data-customize-partial-type="nav_menu_instance"';
     
    13201327        }
    13211328
    13221329        /**
     1330         * Wraps a previewed nav menu's `fallback_cb` output with attributes for partial refresh.
     1331         *
     1332         * @param array $args Array of nav menu arguments.
     1333         */
     1334        public function echo_preview_nav_menu_args_fallback_with_partial_refresh( $args ) {
     1335                if ( ! empty( $args['customize_preview_nav_menus_args']['fallback_cb'] ) ) {
     1336                        ob_start();
     1337                        call_user_func( $args['customize_preview_nav_menus_args']['fallback_cb'], $args );
     1338                        echo $this->filter_wp_nav_menu( ob_get_clean(), $args );
     1339                }
     1340        }
     1341
     1342        /**
    13231343         * Enqueue scripts for the Customizer preview.
    13241344         *
    13251345         * @since 4.3.0
  • src/wp-includes/js/customize-preview-nav-menus.js

     
    212212                                } else if ( partial.params.navMenuArgs.theme_location && api.has( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ) ) {
    213213                                        menuId = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ).get();
    214214                                }
    215                                 if ( ! menuId ) {
     215                                if ( ! menuId && ! partial.params.navMenuArgs.fallback_cb ) {
    216216                                        partial.fallback();
    217217                                        deferred.reject();
    218218                                        return deferred.promise();