Making WordPress.org

Ticket #1109: 1109.diff

File 1109.diff, 2.9 KB (added by chandrapatel, 6 years ago)

Import menus and set to menu location

  • wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/includes/source-site-id-setting.php

    diff --git wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/includes/source-site-id-setting.php wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/includes/source-site-id-setting.php
    index a917144b..3ea8e04f 100644
    class Source_Site_ID_Setting extends \WP_Customize_Setting { 
    114114         * @return null
    115115         */
    116116        protected function update( $source_site_id ) {
     117                // Import css from source site to current site.
     118                $this->import_css( $source_site_id );
     119
     120                // Import menus from source site to current site.
     121                $this->import_menus( $source_site_id );
     122        }
     123
     124        /**
     125         * Import CSS from source site to current site.
     126         *
     127         * @param type $source_site_id ID of source site.
     128         */
     129        protected function import_css( $source_site_id ) {
    117130                switch_to_blog( $source_site_id );
    118131
    119132                $source_site_theme_mods = get_theme_mod( 'jetpack_custom_css' );
    class Source_Site_ID_Setting extends \WP_Customize_Setting { 
    160173                wp_update_custom_css_post( $source_site_css );
    161174                set_theme_mod( 'jetpack_custom_css', $source_site_theme_mods );
    162175        }
     176
     177        /**
     178         * Import menus without menu item from source site to current site.
     179         * Create default `Home` menu item for each menu.
     180         * Also set menu locations as per source site.
     181         *
     182         * @param type $source_site_id ID of source site.
     183         */
     184        protected function import_menus( $source_site_id ) {
     185                switch_to_blog( $source_site_id );
     186
     187                // Get all menus from source site.
     188                $menus = wp_get_nav_menus();
     189
     190                if ( empty( $menus ) || is_wp_error( $menus ) ) {
     191                        restore_current_blog();
     192                        return;
     193                }
     194
     195                // Get menu locations from source site.
     196                $menu_locations = get_nav_menu_locations();
     197
     198                restore_current_blog();
     199
     200                $ref = array();
     201
     202                // Create menu and add one menu item to that menu.
     203                foreach ( $menus as $menu ) {
     204                        $new_menu_id = wp_create_nav_menu( $menu->name );
     205
     206                        if ( is_wp_error( $new_menu_id ) ) {
     207                                continue;
     208                        }
     209
     210                        // save new menu id reference for old menu id. Use to set menu location.
     211                        $ref[ $menu->term_id ] = $new_menu_id;
     212
     213                        $args = array(
     214                                'menu-item-position'            => 1,
     215                                'menu-item-type'                        => 'custom',
     216                                'menu-item-title'                       => __( 'Home', 'wordcamporg' ),
     217                                'menu-item-attr-title'      => __( 'Home', 'wordcamporg' ),
     218                                'menu-item-url'                         => home_url( '/' ),
     219                                'menu-item-status'                      => 'publish',
     220                        );
     221
     222                        wp_update_nav_menu_item( $new_menu_id, 0, $args );
     223                }
     224
     225                // Set menu to same menu location as source site.
     226                if ( ! empty( $menu_locations ) ) {
     227                        foreach ( $menu_locations as $menu_location => $menu_id ) {
     228                                $menu_locations[ $menu_location ] = $ref[ $menu_id ];
     229                        }
     230                        set_theme_mod( 'nav_menu_locations', array_map( 'absint', $menu_locations ) );
     231                }
     232        }
    163233}