set_vars( $config );
$this->init();
}
/**
* Set some settings
* @since 1.0.0
* @param $config Our config parameters
*/
public function set_vars( $config ) {
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( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
add_action( 'admin_menu', array( $this, 'menu_page' ) );
add_action( 'wp_ajax_setup_widgets', array( $this, 'setup_widgets' ) );
}
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',
'aster_portfolio_whizzie_params',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'verify_text' => esc_html( 'verifying', 'aster-portfolio' )
)
);
wp_enqueue_script( 'theme-wizard-script' );
}
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
public function menu_page() {
add_theme_page( esc_html( $this->page_title ), esc_html( $this->page_title ), 'manage_options', $this->page_slug, array( $this, 'aster_portfolio_setup_wizard' ) );
}
/*** Make an interface for the wizard ***/
public function wizard_page() {
$url = wp_nonce_url( add_query_arg( array( 'plugins' => 'go' ) ), 'whizzie-setup' );
$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 '
',
esc_attr( $step['callback'] ),
esc_attr( $step['id'] ),
esc_html( $step['button_text'] )
);
?>
';
}
echo '';
?>
home_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( 'aster-portfolio' );
?>
config_steps;
$steps = array(
'intro' => array(
'id' => 'intro',
'title' => __( 'Welcome to ', 'aster-portfolio' ) . $this->theme_title,
'icon' => 'dashboard',
'view' => 'get_step_intro', // Callback for content
'callback' => 'do_next_step', // Callback for JS
'button_text' => __( 'Start Now', 'aster-portfolio' ),
'can_skip' => false // Show a skip button?
),
'widgets' => array(
'id' => 'widgets',
'title' => __( 'Demo Importer', 'aster-portfolio' ),
'icon' => 'welcome-widgets-menus',
'view' => 'get_step_widgets',
'callback' => 'install_widgets',
'button_text' => __( 'Import Demo', 'aster-portfolio' ),
'can_skip' => true
),
'done' => array(
'id' => 'done',
'title' => __( 'All Done', 'aster-portfolio' ),
'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() { ?>
__('Home','aster-portfolio'),
'menu-item-classes' => 'home',
'menu-item-url' => home_url( '/' ),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($aster_portfolio_menu_id, 0, array(
'menu-item-title' => __('Services','aster-portfolio'),
'menu-item-classes' => 'services',
'menu-item-url' => get_permalink(get_page_by_title('Services')),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($aster_portfolio_menu_id, 0, array(
'menu-item-title' => __('Projects','aster-portfolio'),
'menu-item-classes' => 'projects',
'menu-item-url' => get_permalink(get_page_by_title('Projects')),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($aster_portfolio_menu_id, 0, array(
'menu-item-title' => __('Blogs','aster-portfolio'),
'menu-item-classes' => 'blogs',
'menu-item-url' => get_permalink(get_page_by_title('Blogs')),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($aster_portfolio_menu_id, 0, array(
'menu-item-title' => __('About','aster-portfolio'),
'menu-item-classes' => 'about',
'menu-item-url' => get_permalink(get_page_by_title('About')),
'menu-item-status' => 'publish'));
wp_update_nav_menu_item($aster_portfolio_menu_id, 0, array(
'menu-item-title' => __('Contact','aster-portfolio'),
'menu-item-classes' => 'contact',
'menu-item-url' => get_permalink(get_page_by_title('Contact')),
'menu-item-status' => 'publish'));
if( !has_nav_menu( $aster_portfolio_bpmenulocation ) ){
$locations = get_theme_mod('nav_menu_locations');
$locations[$aster_portfolio_bpmenulocation] = $aster_portfolio_menu_id;
set_theme_mod( 'nav_menu_locations', $locations );
}
}
}
// ------------- /*** Imports demo content ***/ ----------------- //
public function setup_widgets() {
// Create a front page and assigned the template
$aster_portfolio_home_title = 'Home';
$aster_portfolio_home_check = get_page_by_title($aster_portfolio_home_title);
$aster_portfolio_home = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_home_title,
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'home'
);
$aster_portfolio_home_id = wp_insert_post($aster_portfolio_home);
//Set the static front page
$aster_portfolio_home = get_page_by_title( 'Home' );
update_option( 'page_on_front', $aster_portfolio_home->ID );
update_option( 'show_on_front', 'page' );
// Create a about and assigned the template
$aster_portfolio_about_title = 'About';
$aster_portfolio_about_check = get_page_by_title($aster_portfolio_about_title);
$aster_portfolio_about = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_about_title,
'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960 with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
',
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'about'
);
$aster_portfolio_about_id = wp_insert_post($aster_portfolio_about);
// Create a contact and assigned the template
$aster_portfolio_contact_title = 'Services';
$aster_portfolio_contact_check = get_page_by_title($aster_portfolio_contact_title);
$aster_portfolio_contact = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_contact_title,
'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960 with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
',
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'Services'
);
$aster_portfolio_contact_id = wp_insert_post($aster_portfolio_contact);
// Create a contact and assigned the template
$aster_portfolio_contact_title = 'Projects';
$aster_portfolio_contact_check = get_page_by_title($aster_portfolio_contact_title);
$aster_portfolio_contact = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_contact_title,
'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960 with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
',
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'projects'
);
$aster_portfolio_contact_id = wp_insert_post($aster_portfolio_contact);
// Create a posts page and assigned the template
$aster_portfolio_blog_title = 'Blogs';
$aster_portfolio_blog = get_page_by_title($aster_portfolio_blog_title);
if (!$aster_portfolio_blog) {
$aster_portfolio_blog = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_blog_title,
'post_status' => 'publish',
'post_author' => 1,
'post_name' => 'blogs'
);
$aster_portfolio_blog_id = wp_insert_post($aster_portfolio_blog);
if (is_wp_error($aster_portfolio_blog_id)) {
// Handle error
}
} else {
$aster_portfolio_blog_id = $aster_portfolio_blog->ID;
}
// Set the posts page
update_option('page_for_posts', $aster_portfolio_blog_id);
// Create a contact and assigned the template
$aster_portfolio_contact_title = 'About';
$aster_portfolio_contact_check = get_page_by_title($aster_portfolio_contact_title);
$aster_portfolio_contact = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_contact_title,
'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960 with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
',
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'about'
);
$aster_portfolio_contact_id = wp_insert_post($aster_portfolio_contact);
// Create a contact and assigned the template
$aster_portfolio_contact_title = 'Contact';
$aster_portfolio_contact_check = get_page_by_title($aster_portfolio_contact_title);
$aster_portfolio_contact = array(
'post_type' => 'page',
'post_title' => $aster_portfolio_contact_title,
'post_content' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry standard dummy text ever since the 1500, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960 with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
',
'post_status' => 'publish',
'post_author' => 1,
'post_slug' => 'contact'
);
$aster_portfolio_contact_id = wp_insert_post($aster_portfolio_contact);
/*----------------------------------------- Header Section --------------------------------------------------*/
set_theme_mod( 'aster_portfolio_topheader_button_text', 'Get In Touch ');
set_theme_mod( 'aster_portfolio_topheader_button_url', '#');
// ------------------------- Slider Section -------------------------
set_theme_mod( 'aster_portfolio_enable_slider_section', true);
$aster_portfolio_slider_data = [
1 => [
'subtitle' => 'It is a long established fact that a reader will be distracted by readable content.',
'title' => 'Thoughtful Interfaces Built With Real Intention.',
'expertise_text' => 'EXPERTISE',
'expertise_content' => 'UI / UX & Web Design',
'born_text' => 'BORN IN',
'born_content' => 'New York, USA',
'birth_text' => 'DATE OF BIRTH',
'birth_content' => '26 May 1996',
'education_text' => 'EDUCATION',
'education_content' => 'Master of Design',
'award_text' => 'NWINNING AWARD',
'award_content' => 'WordPress Designer',
],
2 => [
'subtitle' => 'Design bridges the gap between business goals and user satisfaction.',
'title' => 'Designing Digital Products That Connect People.',
'expertise_text' => 'SPECIALIZATION',
'expertise_content' => 'Product & Interaction Design',
'born_text' => 'HOMETOWN',
'born_content' => 'London, United Kingdom',
'birth_text' => 'DATE OF BIRTH',
'birth_content' => '14 August 1994',
'education_text' => 'EDUCATION HISTORY',
'education_content' => 'Bachelor of Creative Arts',
'award_text' => 'ACHIEVEMENT',
'award_content' => 'Best UI Designer 2023',
],
3 => [
'subtitle' => 'Code and creativity merge to form powerful digital experiences.',
'title' => 'Building Scalable Frontend Solutions.',
'expertise_text' => 'TECHNICAL FOCUS',
'expertise_content' => 'Frontend Development',
'born_text' => 'ORIGIN',
'born_content' => 'Berlin, Germany',
'birth_text' => 'BORN ON',
'birth_content' => '09 February 1992',
'education_text' => 'STUDY FIELD',
'education_content' => 'BSc Computer Science',
'award_text' => 'RECOGNITION',
'award_content' => 'Creative Developer Award',
],
];
// Slider Count
set_theme_mod( 'aster_portfolio_slider_count', count( $aster_portfolio_slider_data ) );
foreach ( $aster_portfolio_slider_data as $aster_portfolio_i => $aster_portfolio_data ) {
set_theme_mod( "aster_portfolio_slider_subtitle_{$aster_portfolio_i}", $aster_portfolio_data['subtitle'] );
set_theme_mod( "aster_portfolio_slider_title_{$aster_portfolio_i}", $aster_portfolio_data['title'] );
set_theme_mod(
"aster_portfolio_slider_title_image_one_{$aster_portfolio_i}",
get_template_directory_uri() . "/resource/img/title-img-{$aster_portfolio_i}.png"
);
set_theme_mod(
"aster_portfolio_slider_title_image_two_{$aster_portfolio_i}",
get_template_directory_uri() . "/resource/img/content-img-{$aster_portfolio_i}.png"
);
set_theme_mod(
"aster_portfolio_slider_image_{$aster_portfolio_i}",
get_template_directory_uri() . "/resource/img/slider-{$aster_portfolio_i}.png"
);
foreach ( $aster_portfolio_data as $aster_portfolio_key => $aster_portfolio_value ) {
if ( in_array( $aster_portfolio_key, [ 'subtitle', 'title' ], true ) ) {
continue;
}
set_theme_mod( "aster_portfolio_slider_{$aster_portfolio_key}_{$aster_portfolio_i}", $aster_portfolio_value );
}
}
// ------------------------- Services Section -------------------------
set_theme_mod( 'aster_portfolio_enable_site_title_setting', false);
set_theme_mod( 'aster_portfolio_enable_services_section', true);
set_theme_mod( 'aster_portfolio_services_short_content', 'SERVICES' );
set_theme_mod( 'aster_portfolio_services_section_heading', 'CRAFTING MEANINGFUL EXPERIENCES' );
set_theme_mod( 'aster_portfolio_services_section_content', 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy' );
$category_name = 'Services';
$category_slug = sanitize_title( $category_name );
// Create category if not exists
$term = term_exists( $category_slug, 'category' );
if ( ! $term ) {
$term = wp_insert_term( $category_name, 'category' );
}
$category_id = is_array( $term ) ? $term['term_id'] : (int) $term;
// Save category slug for frontend query
set_theme_mod( 'aster_portfolio_blog_args_', $category_slug );
$titles = array(
'Digital Strategy',
'Web Development',
'UI / UX Design',
'Brand Identity',
'SEO Optimization',
'Business Consulting'
);
$content = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod.';
for ( $i = 0; $i < 6; $i++ ) {
$post_id = wp_insert_post( array(
'post_title' => $titles[ $i ],
'post_status' => 'publish',
'post_content' => $content,
'post_type' => 'post',
'post_category'=> array( $category_id ),
) );
if ( is_wp_error( $post_id ) ) {
continue;
}
// Featured image
$image_path = get_stylesheet_directory() . '/resource/img/service' . ( $i + 1 ) . '.png';
if ( file_exists( $image_path ) ) {
$upload = wp_upload_bits(
basename( $image_path ),
null,
file_get_contents( $image_path )
);
if ( empty( $upload['error'] ) ) {
$attachment_id = wp_insert_attachment(
array(
'post_mime_type' => wp_check_filetype( $upload['file'] )['type'],
'post_title' => basename( $upload['file'] ),
'post_status' => 'inherit',
),
$upload['file'],
$post_id
);
require_once ABSPATH . 'wp-admin/includes/image.php';
wp_update_attachment_metadata(
$attachment_id,
wp_generate_attachment_metadata( $attachment_id, $upload['file'] )
);
set_post_thumbnail( $post_id, $attachment_id );
}
}
}
$aster_portfolio_service_icons = array(
'fas fa-lightbulb',
'fas fa-code',
'fas fa-pencil-ruler',
'fas fa-palette',
'fas fa-laptop-code',
'fas fa-briefcase'
);
for ( $aster_portfolio_i = 1; $aster_portfolio_i <= 6; $aster_portfolio_i++ ) {
set_theme_mod(
'aster_portfolio_category_icon' . $aster_portfolio_i,
$aster_portfolio_service_icons[ $aster_portfolio_i - 1 ]
);
}
// ---------------------------------------- Related post_tag --------------------------------------------------- //
set_theme_mod('aster_portfolio_post_related_post_label','Related Posts');
set_theme_mod('aster_portfolio_related_posts_count','3');
$this->aster_portfolio_customizer_primary_menu();
update_option('is-demo-imported', true);
}
}