set_vars( $config ); $this->init(); } /** * Set some settings * @since 1.0.0 * @param $config Our config parameters */ public function set_vars( $config ) { // require_once trailingslashit( WHIZZIE_DIR ) . 'tgm/class-tgm-plugin-activation.php'; require_once trailingslashit( WHIZZIE_DIR ) . 'tgm/tgm.php'; if( isset( $config['page_slug'] ) ) { $this->page_slug = esc_attr( $config['page_slug'] ); } if( isset( $config['page_title'] ) ) { $this->page_title = esc_attr( $config['page_title'] ); } if( isset( $config['steps'] ) ) { $this->config_steps = $config['steps']; } $this->plugin_path = trailingslashit( dirname( __FILE__ ) ); $relative_url = str_replace( get_template_directory(), '', $this->plugin_path ); $this->plugin_url = trailingslashit( get_template_directory_uri() . $relative_url ); $current_theme = wp_get_theme(); $this->theme_title = $current_theme->get( 'Name' ); $this->theme_name = strtolower( preg_replace( '#[^a-zA-Z]#', '', $current_theme->get( 'Name' ) ) ); $this->page_slug = apply_filters( $this->theme_name . '_theme_setup_wizard_page_slug', $this->theme_name . '-wizard' ); $this->parent_slug = apply_filters( $this->theme_name . '_theme_setup_wizard_parent_slug', '' ); } /** * Hooks and filters * @since 1.0.0 */ public function init() { add_action( 'after_switch_theme', array( $this, 'redirect_to_wizard' ) ); if ( class_exists( 'TGM_Plugin_Activation' ) && isset( $GLOBALS['tgmpa'] ) ) { add_action( 'init', array( $this, 'get_tgmpa_instance' ), 30 ); add_action( 'init', array( $this, 'set_tgmpa_url' ), 40 ); } add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); add_action( 'admin_menu', array( $this, 'menu_page' ) ); add_action( 'admin_init', array( $this, 'get_plugins' ), 30 ); add_filter( 'tgmpa_load', array( $this, 'tgmpa_load' ), 10, 1 ); add_action( 'wp_ajax_setup_plugins', array( $this, 'setup_plugins' ) ); add_action( 'wp_ajax_setup_widgets', array( $this, 'setup_widgets' ) ); } public function redirect_to_wizard() { global $pagenow; if( is_admin() && 'themes.php' == $pagenow && isset( $_GET['activated'] ) && current_user_can( 'manage_options' ) ) { wp_redirect( admin_url( 'themes.php?page=' . esc_attr( $this->page_slug ) ) ); } } public function enqueue_scripts() { wp_enqueue_style( 'theme-wizard-style', get_template_directory_uri() . '/theme-wizard/assets/css/theme-wizard-style.css'); wp_register_script( 'theme-wizard-script', get_template_directory_uri() . '/theme-wizard/assets/js/theme-wizard-script.js', array( 'jquery' ), ); wp_localize_script( 'theme-wizard-script', 'bridal_jewelry_store_whizzie_params', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'verify_text' => esc_html( 'verifying', 'bridal-jewelry-store' ) ) ); wp_enqueue_script( 'theme-wizard-script' ); } public static function get_instance() { if ( ! self::$instance ) { self::$instance = new self; } return self::$instance; } public function tgmpa_load( $status ) { return is_admin() || current_user_can( 'install_themes' ); } /** * Get configured TGMPA instance * * @access public * @since 1.1.2*/ public function get_tgmpa_instance() { $this->tgmpa_instance = call_user_func( array( get_class( $GLOBALS['tgmpa'] ), 'get_instance' ) ); } /** * Update $tgmpa_menu_slug and $tgmpa_parent_slug from TGMPA instance * * @access public * @since 1.1.2 */ public function set_tgmpa_url() { $this->tgmpa_menu_slug = ( property_exists( $this->tgmpa_instance, 'menu' ) ) ? $this->tgmpa_instance->menu : $this->tgmpa_menu_slug; $this->tgmpa_menu_slug = apply_filters( $this->theme_name . '_theme_setup_wizard_tgmpa_menu_slug', $this->tgmpa_menu_slug ); $tgmpa_parent_slug = ( property_exists( $this->tgmpa_instance, 'parent_slug' ) && $this->tgmpa_instance->parent_slug !== 'themes.php' ) ? 'admin.php' : 'themes.php'; $this->tgmpa_url = apply_filters( $this->theme_name . '_theme_setup_wizard_tgmpa_url', $tgmpa_parent_slug . '?page=' . $this->tgmpa_menu_slug ); } /*** Make a modal screen for the wizard ***/ public function menu_page() { add_theme_page( esc_html( $this->page_title ), esc_html( $this->page_title ), 'manage_options', $this->page_slug, array( $this, 'bridal_jewelry_store_setup_wizard' ) ); } /*** Make an interface for the wizard ***/ public function wizard_page() { tgmpa_load_bulk_installer(); // install plugins with TGM. if ( ! class_exists( 'TGM_Plugin_Activation' ) || ! isset( $GLOBALS['tgmpa'] ) ) { die( 'Failed to find TGM' ); } $url = wp_nonce_url( add_query_arg( array( 'plugins' => 'go' ) ), 'whizzie-setup' ); // copied from TGM $method = ''; // Leave blank so WP_Filesystem can populate it as necessary. $fields = array_keys( $_POST ); // Extra fields to pass to WP_Filesystem. if ( false === ( $creds = request_filesystem_credentials( esc_url_raw( $url ), $method, false, false, $fields ) ) ) { return true; // Stop the normal page form from displaying, credential request form will be shown. } // Now we have some credentials, setup WP_Filesystem. if ( ! WP_Filesystem( $creds ) ) { // Our credentials were no good, ask the user for them again. request_filesystem_credentials( esc_url_raw( $url ), $method, true, false, $fields ); return true; } /* If we arrive here, we have the filesystem */ ?>
'; // The wizard is a list with only one item visible at a time $steps = $this->get_steps(); echo ''; ?>

site_url(), 'theme_text_domain' => wp_get_theme()->get( 'TextDomain' ) ]; $body = wp_json_encode( $body ); $options = [ 'body' => $body, 'sslverify' => false, 'headers' => [ 'Content-Type' => 'application/json', ] ]; //custom function about theme customizer $return = add_query_arg( array()) ; $theme = wp_get_theme( 'bridal-jewelry-store' ); ?>
wizard_page(); ?>
config_steps; $steps = array( 'intro' => array( 'id' => 'intro', 'title' => __( 'Welcome to ', 'bridal-jewelry-store' ) . $this->theme_title, 'icon' => 'dashboard', 'view' => 'get_step_intro', // Callback for content 'callback' => 'do_next_step', // Callback for JS 'button_text' => __( 'Start Now', 'bridal-jewelry-store' ), 'can_skip' => false // Show a skip button? ), 'plugins' => array( 'id' => 'plugins', 'title' => __( 'Plugins', 'bridal-jewelry-store' ), 'icon' => 'admin-plugins', 'view' => 'get_step_plugins', 'callback' => 'install_plugins', 'button_text' => __( 'Install Plugins', 'bridal-jewelry-store' ), 'can_skip' => true ), 'widgets' => array( 'id' => 'widgets', 'title' => __( 'Demo Importer', 'bridal-jewelry-store' ), 'icon' => 'welcome-widgets-menus', 'view' => 'get_step_widgets', 'callback' => 'install_widgets', 'button_text' => __( 'Import Demo', 'bridal-jewelry-store' ), 'can_skip' => true ), 'done' => array( 'id' => 'done', 'title' => __( 'All Done', 'bridal-jewelry-store' ), 'icon' => 'yes', 'view' => 'get_step_done', 'callback' => '' ) ); // Iterate through each step and replace with dev config values if( $dev_steps ) { // Configurable elements - these are the only ones the dev can update from config.php $can_config = array( 'title', 'icon', 'button_text', 'can_skip' ); foreach( $dev_steps as $dev_step ) { // We can only proceed if an ID exists and matches one of our IDs if( isset( $dev_step['id'] ) ) { $id = $dev_step['id']; if( isset( $steps[$id] ) ) { foreach( $can_config as $element ) { if( isset( $dev_step[$element] ) ) { $steps[$id][$element] = $dev_step[$element]; } } } } } } return $steps; } /*** Display the content for the intro step ***/ public function get_step_intro() { ?>

get_plugins(); $content = array(); ?>

'; // Add each plugin into a list foreach( $plugins['all'] as $slug=>$plugin ) { $content['detail'] .= '
  • ' . esc_html( $plugin['name'] ) . ''; $keys = array(); if ( isset( $plugins['install'][ $slug ] ) ) { $keys[] = 'Installation'; } if ( isset( $plugins['update'][ $slug ] ) ) { $keys[] = 'Update'; } if ( isset( $plugins['activate'][ $slug ] ) ) { $keys[] = 'Activation'; } $content['detail'] .= implode( ' and ', $keys ) . ' required'; $content['detail'] .= '
  • '; } $content['detail'] .= ''; return $content; } /*** Display the content for the widgets step ***/ public function get_step_widgets() { ?>

    1. > Pages >> Add New','bridal-jewelry-store'); ?>

    1. > Appearance >> Menu','bridal-jewelry-store'); ?>

    1. > Appearance >> Widgets','bridal-jewelry-store'); ?>
    array(), 'install' => array(), 'update' => array(), 'activate' => array() ); foreach( $instance->plugins as $slug=>$plugin ) { if( $instance->is_plugin_active( $slug ) && false === $instance->does_plugin_have_update( $slug ) ) { // Plugin is installed and up to date continue; } else { $plugins['all'][$slug] = $plugin; if( ! $instance->is_plugin_installed( $slug ) ) { $plugins['install'][$slug] = $plugin; } else { if( false !== $instance->does_plugin_have_update( $slug ) ) { $plugins['update'][$slug] = $plugin; } if( $instance->can_plugin_activate( $slug ) ) { $plugins['activate'][$slug] = $plugin; } } } } return $plugins; } public function setup_plugins() { $json = array(); // send back some json we use to hit up TGM $plugins = $this->get_plugins(); // what are we doing with this plugin? foreach ( $plugins['activate'] as $slug => $plugin ) { if ( $_POST['slug'] == $slug ) { $json = array( 'url' => admin_url( $this->tgmpa_url ), 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa_menu_slug, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-activate', 'action2' => - 1, 'message' => esc_html__( 'Activating Plugin','bridal-jewelry-store' ), ); break; } } foreach ( $plugins['update'] as $slug => $plugin ) { if ( $_POST['slug'] == $slug ) { $json = array( 'url' => admin_url( $this->tgmpa_url ), 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa_menu_slug, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-update', 'action2' => - 1, 'message' => esc_html__( 'Updating Plugin','bridal-jewelry-store' ), ); break; } } foreach ( $plugins['install'] as $slug => $plugin ) { if ( $_POST['slug'] == $slug ) { $json = array( 'url' => admin_url( $this->tgmpa_url ), 'plugin' => array( $slug ), 'tgmpa-page' => $this->tgmpa_menu_slug, 'plugin_status' => 'all', '_wpnonce' => wp_create_nonce( 'bulk-plugins' ), 'action' => 'tgmpa-bulk-install', 'action2' => - 1, 'message' => esc_html__( 'Installing Plugin','bridal-jewelry-store' ), ); break; } } if ( $json ) { $json['hash'] = md5( serialize( $json ) ); // used for checking if duplicates happen, move to next plugin wp_send_json( $json ); } else { wp_send_json( array( 'done' => 1, 'message' => esc_html__( 'Success','bridal-jewelry-store' ) ) ); } exit; } /***------------------------------------------------- Imports the Demo Content* @since 1.1.0 ----------------------------------------------****/ // ------------- MENUS ----------------- // public function bridal_jewelry_store_customizer_primary_menu(){ // ------- Create Primary Menu -------- $bridal_jewelry_store_themename = 'Bridal Jewelry Store'; // Ensure the theme name is set $bridal_jewelry_store_menuname = $bridal_jewelry_store_themename . ' Primary Menu'; $bridal_jewelry_store_bpmenulocation = 'primary'; $bridal_jewelry_store_menu_exists = wp_get_nav_menu_object($bridal_jewelry_store_menuname); if( !$bridal_jewelry_store_menu_exists ) { $bridal_jewelry_store_menu_id = wp_create_nav_menu($bridal_jewelry_store_menuname); // Home wp_update_nav_menu_item($bridal_jewelry_store_menu_id, 0, array( 'menu-item-title' => __('Home', 'bridal-jewelry-store'), 'menu-item-classes' => 'home', 'menu-item-url' => home_url('/'), 'menu-item-status' => 'publish' )); // Shop $shop_page_id = wc_get_page_id('shop'); // Get the WooCommerce shop page ID if ($shop_page_id) { wp_update_nav_menu_item($bridal_jewelry_store_menu_id, 0, array( 'menu-item-title' => __('Shop', 'bridal-jewelry-store'), // Update the title to 'Shop' 'menu-item-classes' => 'shop', // Add a class if needed 'menu-item-url' => get_permalink($shop_page_id), // Get the permalink for the shop page 'menu-item-status' => 'publish' // Publish the menu item )); } // Products $page_products = get_page_by_path('products'); if($page_products){ wp_update_nav_menu_item($bridal_jewelry_store_menu_id, 0, array( 'menu-item-title' => __('Products', 'bridal-jewelry-store'), 'menu-item-classes' => 'products', 'menu-item-url' => get_permalink($page_products), 'menu-item-status' => 'publish' )); } // Blog $page_blog = get_page_by_path('blog'); if($page_blog){ wp_update_nav_menu_item($bridal_jewelry_store_menu_id, 0, array( 'menu-item-title' => __('Blog', 'bridal-jewelry-store'), 'menu-item-classes' => 'blog', 'menu-item-url' => get_permalink($page_blog), 'menu-item-status' => 'publish' )); } // Contact $page_contact = get_page_by_path('contact-us'); if($page_contact){ wp_update_nav_menu_item($bridal_jewelry_store_menu_id, 0, array( 'menu-item-title' => __('Contact', 'bridal-jewelry-store'), 'menu-item-classes' => 'contact', 'menu-item-url' => get_permalink($page_contact), 'menu-item-status' => 'publish' )); } // Assign menu to location if not set if( !has_nav_menu($bridal_jewelry_store_bpmenulocation) ){ $locations = get_theme_mod('nav_menu_locations'); $locations[$bridal_jewelry_store_bpmenulocation] = $bridal_jewelry_store_menu_id; set_theme_mod('nav_menu_locations', $locations); } } } public function setup_widgets() { // Create a front page and assign the template $bridal_jewelry_store_home_title = 'Home'; $bridal_jewelry_store_home_check = get_page_by_path('home'); if (!$bridal_jewelry_store_home_check) { $bridal_jewelry_store_home = array( 'post_type' => 'page', 'post_title' => $bridal_jewelry_store_home_title, 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'home' // Unique slug for the home page ); $bridal_jewelry_store_home_id = wp_insert_post($bridal_jewelry_store_home); // Set the static front page if (!is_wp_error($bridal_jewelry_store_home_id)) { update_option('page_on_front', $bridal_jewelry_store_home_id); update_option('show_on_front', 'page'); } } // Create a posts page and assign the template $bridal_jewelry_store_blog_title = 'Blog'; $bridal_jewelry_store_blog_check = get_page_by_path('blog'); if (!$bridal_jewelry_store_blog_check) { $bridal_jewelry_store_blog = array( 'post_type' => 'page', 'post_title' => $bridal_jewelry_store_blog_title, 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'blog' // Unique slug for the blog page ); $bridal_jewelry_store_blog_id = wp_insert_post($bridal_jewelry_store_blog); // Set the posts page if (!is_wp_error($bridal_jewelry_store_blog_id)) { update_option('page_for_posts', $bridal_jewelry_store_blog_id); } } // Create a Products page and assign the template $bridal_jewelry_store_products_title = 'Products'; $bridal_jewelry_store_products_check = get_page_by_path('products'); if (!$bridal_jewelry_store_products_check) { $bridal_jewelry_store_products = array( 'post_type' => 'page', 'post_title' => $bridal_jewelry_store_products_title, 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'products' // Unique slug for the Products page ); wp_insert_post($bridal_jewelry_store_products); } // Create a Contact page and assign the template $bridal_jewelry_store_contact_title = 'Contact'; $bridal_jewelry_store_contact_check = get_page_by_path('contact-us'); if (!$bridal_jewelry_store_contact_check) { $bridal_jewelry_store_contact = array( 'post_type' => 'page', 'post_title' => $bridal_jewelry_store_contact_title, 'post_status' => 'publish', 'post_author' => 1, 'post_name' => 'contact-us' // Unique slug for the Contact page ); wp_insert_post($bridal_jewelry_store_contact); } /*----------------------------------------- Header Button --------------------------------------------------*/ /*----------------------------------------- Product --------------------------------------------------*/ set_theme_mod( 'bridal_jewelry_store_trending_product_heading', 'TRUE UNIQUE STYLE'); set_theme_mod( 'bridal_jewelry_store_about_2_heading', 'NECKLACE'); set_theme_mod( 'bridal_jewelry_store_about_left_image_2',get_template_directory_uri().'/resource/img/product.png'); set_theme_mod( 'bridal_jewelry_store_about_2_button_link', '#'); $products = array( 'Ball Bypass Bracelet 01', 'Ball Bypass Bracelet 02', ); $product_prices = array( '29.99', '39.99', ); $review_text = array( 'Nice product', 'Good Quality Product', ); $k = 1; foreach ($products as $index => $product_title) { // Create post content $content = 'Lorem Ipsum has been the industry standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book.'; // Create post object $my_post = array( 'post_title' => wp_strip_all_tags($product_title), 'post_content' => $content, 'post_status' => 'publish', 'post_type' => 'product', ); // Insert the post into the database $post_id = wp_insert_post($my_post); // Set the product category wp_set_post_terms($post_id, 'uncategorized', 'product_cat'); // Set the price of the product update_post_meta($post_id, '_regular_price', '1599'); // Set regular price update_post_meta($post_id, '_sale_price', '1499'); // Set sale price update_post_meta($post_id, '_price', '1499'); // Set current price (sale price is applied) // Add ratings and reviews for ($c = 0; $c <= 1; $c++) { // Only loop through available review texts $comment_id = wp_insert_comment(array( 'comment_post_ID' => $post_id, 'comment_author' => get_the_author_meta('display_name'), 'comment_author_email' => get_the_author_meta('user_email'), 'comment_content' => $review_text[$c], 'comment_parent' => 0, 'user_id' => get_current_user_id(), // <== Important 'comment_date' => date('Y-m-d H:i:s'), 'comment_approved' => 1, )); // Ensure the 'rating' meta is correctly added if ($comment_id) { update_comment_meta($comment_id, 'rating', 5); // Set rating value here } } // Handle product image upload $image_url = get_template_directory_uri() . '/resource/img/' . str_replace(' ', '-', strtolower($product_title)) . '.png'; $image_name = $product_title . '.png'; $upload_dir = wp_upload_dir(); // Set upload folder $image_data = file_get_contents(esc_url($image_url)); // Generate unique name $unique_file_name = wp_unique_filename($upload_dir['path'], $image_name); $filename = basename($unique_file_name); // Check folder permission and define file location if (wp_mkdir_p($upload_dir['path'])) { $file = $upload_dir['path'] . '/' . $filename; } else { $file = $upload_dir['basedir'] . '/' . $filename; } // Create the image file on the server file_put_contents($file, $image_data); // Check image file type $wp_filetype = wp_check_filetype($filename, null); // Set attachment data $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'post_title' => sanitize_file_name($filename), 'post_type' => 'product', 'post_status' => 'inherit', ); // Create the attachment $attach_id = wp_insert_attachment($attachment, $file, $post_id); // Include image.php require_once(ABSPATH . 'wp-admin/includes/image.php'); // Define attachment metadata $attach_data = wp_generate_attachment_metadata($attach_id, $file); // Assign metadata to attachment wp_update_attachment_metadata($attach_id, $attach_data); // Assign featured image to post set_post_thumbnail($post_id, $attach_id); $k++; } // ------------------------------------------ Blogs for Sections -------------------------------------- wp_delete_post(1); // Loop to create posts for ($i = 1; $i <= 3; $i++) { $title = array('WHERE BEAUTY MEETS BRILLIANCE', 'WHERE BEAUTY MEETS BRILLIANCE', 'WHERE BEAUTY MEETS BRILLIANCE'); $content = 'Lorem Ipsum has been the industry standard dummy text ever since the 1500s when an unknown printer took a galley of type and scrambled it to make a type specimen book.'; // Create post object $my_post = array( 'post_title' => wp_strip_all_tags( $title[$i-1] ), 'post_content' => $content, 'post_status' => 'publish', 'post_type' => 'post', ); // Insert the post into the database $post_id = wp_insert_post($my_post); $bridal_jewelry_store_image_url = get_template_directory_uri() . '/resource/img/slider.png'; $bridal_jewelry_store_image_name = 'slider.png'; $bridal_jewelry_store_upload_dir = wp_upload_dir(); $bridal_jewelry_store_image_data = file_get_contents($bridal_jewelry_store_image_url); $bridal_jewelry_store_unique_file_name = wp_unique_filename($bridal_jewelry_store_upload_dir['path'], $bridal_jewelry_store_image_name); $filename = basename($bridal_jewelry_store_unique_file_name); if (wp_mkdir_p($bridal_jewelry_store_upload_dir['path'])) { $file = $bridal_jewelry_store_upload_dir['path'] . '/' . $filename; } else { $file = $bridal_jewelry_store_upload_dir['basedir'] . '/' . $filename; } file_put_contents($file, $bridal_jewelry_store_image_data); $wp_filetype = wp_check_filetype($filename, null); $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'post_title' => sanitize_file_name($filename), 'post_content' => '', 'post_status' => 'inherit' ); $bridal_jewelry_store_attach_id = wp_insert_attachment($attachment, $file, $post_id); require_once(ABSPATH . 'wp-admin/includes/image.php'); $bridal_jewelry_store_attach_data = wp_generate_attachment_metadata($bridal_jewelry_store_attach_id, $file); wp_update_attachment_metadata($bridal_jewelry_store_attach_id, $bridal_jewelry_store_attach_data); set_post_thumbnail($post_id, $bridal_jewelry_store_attach_id); } // ---------------------------------------- Slider --------------------------------------------------- // for($i=1; $i<=3; $i++) { set_theme_mod('bridal_jewelry_store_banner_button_label_'.$i,'Shop Our New Collection'); set_theme_mod('bridal_jewelry_store_banner_button_link_'.$i,''); } // ---------------------------------------- Footer section --------------------------------------------------- // set_theme_mod('bridal_jewelry_store_footer_background_color_setting','#000000'); // ---------------------------------------- Related post_tag --------------------------------------------------- // set_theme_mod('bridal_jewelry_store_post_related_post_label','Related Posts'); set_theme_mod('bridal_jewelry_store_related_posts_count','3'); $this->bridal_jewelry_store_customizer_primary_menu(); } }