Making WordPress.org

Ticket #1109: 1109.1.diff

File 1109.1.diff, 3.1 KB (added by chandrapatel, 6 years ago)
  • 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..0582d763 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 int $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 from source site to current site.
     179         *
     180         * @param int $source_site_id ID of source site.
     181         */
     182        protected function import_menus( $source_site_id ) {
     183                switch_to_blog( $source_site_id );
     184
     185                // Get all menus from source site.
     186                $menus = wp_get_nav_menus();
     187
     188                if ( empty( $menus ) || is_wp_error( $menus ) ) {
     189                        restore_current_blog();
     190                        return;
     191                }
     192
     193                // Get menu locations from source site.
     194                $menu_locations = get_nav_menu_locations();
     195
     196                restore_current_blog();
     197
     198                $this->create_menus( $menus, $menu_locations );
     199        }
     200
     201        /**
     202         * Create menus and add default menu item.
     203         * Also set menu locations as per source site.
     204         *
     205         * @param array $menus            All menus of source site.
     206         * @param array $menu_locations   Menu locations of source site.
     207         */
     208        protected function create_menus( $menus, $menu_locations ) {
     209                $ref = array();
     210
     211                // Create menu and add one menu item to that menu.
     212                foreach ( $menus as $menu ) {
     213                        $new_menu_id = wp_create_nav_menu( $menu->name );
     214
     215                        if ( is_wp_error( $new_menu_id ) ) {
     216                                continue;
     217                        }
     218
     219                        // save new menu id reference for old menu id. Use to set menu location.
     220                        $ref[ $menu->term_id ] = $new_menu_id;
     221
     222                        $args = array(
     223                                'menu-item-position'            => 1,
     224                                'menu-item-type'                        => 'custom',
     225                                'menu-item-title'                       => __( 'Home', 'wordcamporg' ),
     226                                'menu-item-attr-title'      => __( 'Home', 'wordcamporg' ),
     227                                'menu-item-url'                         => home_url( '/' ),
     228                                'menu-item-status'                      => 'publish',
     229                        );
     230
     231                        wp_update_nav_menu_item( $new_menu_id, 0, $args );
     232                }
     233
     234                // Set menu to same menu location as source site.
     235                if ( ! empty( $menu_locations ) ) {
     236                        foreach ( $menu_locations as $menu_location => $menu_id ) {
     237                                $menu_locations[ $menu_location ] = $ref[ $menu_id ];
     238                        }
     239                        set_theme_mod( 'nav_menu_locations', array_map( 'absint', $menu_locations ) );
     240                }
     241        }
    163242}