WordPress.org

Making WordPress.org

Ticket #1109: 1109.2.diff

File 1109.2.diff, 6.0 KB (added by chandrapatel, 3 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 70026b76e..e5368300d 100644
    class Source_Site_ID_Setting extends \WP_Customize_Setting { 
    110110         *
    111111         * @param int $source_site_id
    112112         *
    113          * @return null
     113         * @return void
    114114         */
    115115        protected function update( $source_site_id ) {
     116
     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        /**
     126         * Import CSS from source site to current site.
     127         *
     128         * @param int $source_site_id ID of source site.
     129         *
     130         * @return void
     131         */
     132        protected function import_css( $source_site_id ) {
    116133                switch_to_blog( $source_site_id );
    117134
    118135                $source_site_theme_mods = get_theme_mod( 'jetpack_custom_css' );
    class Source_Site_ID_Setting extends \WP_Customize_Setting { 
    164181                set_theme_mod( 'jetpack_custom_css', $source_site_theme_mods );
    165182                wp_update_custom_css_post( $source_site_css );
    166183        }
     184
     185        /**
     186         * Import menus from source site to current site.
     187         *
     188         * @param int $source_site_id ID of source site.
     189         *
     190         * @return void
     191         */
     192        protected function import_menus( $source_site_id ) {
     193                switch_to_blog( $source_site_id );
     194
     195                // Get all menus from source site.
     196                $menus = wp_get_nav_menus();
     197
     198                if ( empty( $menus ) || is_wp_error( $menus ) ) {
     199                        restore_current_blog();
     200                        return;
     201                }
     202
     203                $menu_items = array();
     204
     205                // Get page post type menu items of all menus.
     206                foreach ( $menus as $menu ) {
     207                        $items = wp_get_nav_menu_items( $menu->term_id );
     208
     209                        if ( empty( $items ) ) {
     210                                continue;
     211                        }
     212
     213                        foreach ( $items as $item ) {
     214                                if ( 'post_type' !== $item->type || 'page' !== $item->object ) {
     215                                        continue;
     216                                }
     217                                // Get page slug to get same page from current site.
     218                                $item->object_slug = get_post_field( 'post_name', $item->object_id, 'db' );
     219
     220                                $menu_items[ $menu->term_id ][] = $item;
     221                        }
     222                }
     223
     224                // Get menu locations from source site.
     225                $menu_locations = get_nav_menu_locations();
     226
     227                restore_current_blog();
     228
     229                $this->create_menus( $menus, $menu_items, $menu_locations );
     230        }
     231
     232        /**
     233         * Create menus and add menu items
     234         * Also set menu locations as per source site.
     235         *
     236         * @param array $menus          Menus of source site.
     237         * @param array $menu_items     Menus items of source site.
     238         * @param array $menu_locations Menu locations of source site.
     239         *
     240         * @return void
     241         */
     242        protected function create_menus( $menus, $menu_items, $menu_locations ) {
     243                $ref = array();
     244
     245                // Create menu and add it's menu items which exists in destination site.
     246                foreach ( $menus as $menu ) {
     247                        $new_menu_id = wp_create_nav_menu( $menu->name );
     248
     249                        if ( is_wp_error( $new_menu_id ) ) {
     250                                continue;
     251                        }
     252
     253                        // Save new menu id reference for old menu id. Use to set menu location.
     254                        $ref[ $menu->term_id ] = $new_menu_id;
     255
     256                        $menu_position = 1;
     257
     258                        $args = array(
     259                                'menu-item-position'   => $menu_position,
     260                                'menu-item-type'       => 'custom',
     261                                'menu-item-title'      => __( 'Home', 'wordcamporg' ),
     262                                'menu-item-attr-title' => __( 'Home', 'wordcamporg' ),
     263                                'menu-item-url'        => home_url( '/' ),
     264                                'menu-item-status'     => 'publish',
     265                        );
     266                        wp_update_nav_menu_item( $new_menu_id, 0, $args );
     267
     268                        if ( empty( $menu_items[ $menu->term_id ] ) ) {
     269                                continue;
     270                        }
     271
     272                        foreach ( $menu_items[ $menu->term_id ] as $menu_item ) {
     273
     274                                // Check whether source site page exist in current site.
     275                                $page = get_page_by_path( $menu_item->object_slug );
     276
     277                                if ( empty( $page ) ) {
     278                                        continue;
     279                                }
     280
     281                                $menu_item_title = ( ! empty( $menu_item->post_title ) ) ? $menu_item->post_title : $page->post_title;
     282
     283                                $menu_position++;
     284
     285                                $args = array(
     286                                        'menu-item-position'    => $menu_position,
     287                                        'menu-item-type'        => 'post_type',
     288                                        'menu-item-object'      => 'page',
     289                                        'menu-item-object-id'   => $page->ID,
     290                                        'menu-item-title'       => $menu_item_title,
     291                                        'menu-item-attr-title'  => $menu_item_title,
     292                                        'menu-item-url'         => get_page_link( $page->ID ),
     293                                        'menu-item-status'      => 'publish',
     294                                        'menu-item-description' => $menu_item->description,
     295                                        'menu-item-target'      => $menu_item->target,
     296                                        'menu-item-classes'     => $menu_item->classes,
     297                                        'menu-item-xfn'         => $menu_item->xfn,
     298                                );
     299                                wp_update_nav_menu_item( $new_menu_id, 0, $args );
     300
     301                        }
     302                }
     303
     304                // Set menu to same menu location as source site.
     305                if ( ! empty( $menu_locations ) ) {
     306                        foreach ( $menu_locations as $menu_location => $menu_id ) {
     307                                $menu_locations[ $menu_location ] = $ref[ $menu_id ];
     308                        }
     309                        set_theme_mod( 'nav_menu_locations', $menu_locations );
     310                }
     311
     312        }
     313
    167314}
  • wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/wordcamp-site-cloner.php

    diff --git wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/wordcamp-site-cloner.php wordcamp.org/public_html/wp-content/plugins/wordcamp-site-cloner/wordcamp-site-cloner.php
    index 61aa23047..7e85a0252 100755
    function initialize() { 
    2626
    2727        add_action( 'admin_enqueue_scripts', __NAMESPACE__ . '\register_scripts'               );
    2828        add_action( 'admin_menu',            __NAMESPACE__ . '\add_submenu_page'               );
    29         add_action( 'customize_register',    __NAMESPACE__ . '\register_customizer_components' );
     29        add_action( 'customize_register',    __NAMESPACE__ . '\register_customizer_components', 12 );
    3030        add_action( 'rest_api_init',         __NAMESPACE__ . '\register_api_endpoints'         );
    3131        add_action( PRIME_SITES_CRON_ACTION, __NAMESPACE__ . '\prime_wordcamp_sites'           );
    3232