Hotel Raxa - Advanced Booking System Implementation
🏨 Hotel Booking Enhancements: - Implemented Eagle Booking Advanced Pricing add-on - Added Booking.com-style rate management system - Created professional calendar interface for pricing - Integrated deals and discounts functionality 💰 Advanced Pricing Features: - Dynamic pricing models (per room, per person, per adult) - Base rates, adult rates, and child rates management - Length of stay discounts and early bird deals - Mobile rates and secret deals implementation - Seasonal promotions and flash sales 📅 Availability Management: - Real-time availability tracking - Stop sell and restriction controls - Closed to arrival/departure functionality - Minimum/maximum stay requirements - Automatic sold-out management 💳 Payment Integration: - Maintained Redsys payment gateway integration - Seamless integration with existing Eagle Booking - No modifications to core Eagle Booking plugin 🛠️ Technical Implementation: - Custom database tables for advanced pricing - WordPress hooks and filters integration - AJAX-powered admin interface - Data migration from existing Eagle Booking - Professional calendar view for revenue management 📊 Admin Interface: - Booking.com-style management dashboard - Visual rate and availability calendar - Bulk operations for date ranges - Statistics and analytics dashboard - Modal dialogs for quick editing 🔧 Code Quality: - WordPress coding standards compliance - Secure database operations with prepared statements - Proper input validation and sanitization - Error handling and logging - Responsive admin interface 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
27
wp-content/themes/himara/core/admin/ajax.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
/* --------------------------------------------------------------------------
|
||||
* Hide update notification and update theme version
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
|
||||
add_action('wp_ajax_himara_update_version', 'himara_update_version');
|
||||
|
||||
if(!function_exists('himara_update_version')):
|
||||
function himara_update_version(){
|
||||
update_option('HIMARA_THEME_VERSION', HIMARA_THEME_VERSION);
|
||||
die();
|
||||
}
|
||||
endif;
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Hide welcome notification
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
add_action('wp_ajax_himara_hide_welcome', 'himara_hide_welcome');
|
||||
|
||||
if(!function_exists('himara_hide_welcome')):
|
||||
function himara_hide_welcome(){
|
||||
update_option('himara_welcome_box_displayed', true);
|
||||
die();
|
||||
}
|
||||
endif;
|
||||
568
wp-content/themes/himara/core/admin/dashboard.php
Normal file
@@ -0,0 +1,568 @@
|
||||
<?php
|
||||
|
||||
// Exit if accessed directly
|
||||
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||
|
||||
require_once "inc/licensor.php";
|
||||
|
||||
|
||||
if ( !class_exists( 'Himara_Theme_License' ) ) {
|
||||
|
||||
class Himara_Theme_License {
|
||||
|
||||
public $plugin_file = __FILE__;
|
||||
public $responseObj;
|
||||
public $licenseMessage;
|
||||
public $showMessage = false;
|
||||
public $slug = "himara_dashboard";
|
||||
|
||||
public $status;
|
||||
|
||||
function __construct() {
|
||||
|
||||
$licenseKey = get_option("himara_license_key","");
|
||||
$liceEmail = get_option( "himara_license_email","");
|
||||
$templateDir = get_stylesheet_directory();
|
||||
|
||||
if( HimaraBase::CheckWPPlugin( $licenseKey, $liceEmail, $this->licenseMessage, $this->responseObj, $templateDir."/style.css" )){
|
||||
|
||||
$this->status = true;
|
||||
|
||||
add_action( 'admin_menu', [$this,'ActiveAdminMenu'], 99999);
|
||||
add_action( 'admin_post_deactivate_license', [ $this, 'action_deactivate_license' ] );
|
||||
|
||||
if ( get_option('himara_support_notice') != true ) add_action('admin_notices', [ $this, 'support_expired_notice' ] );
|
||||
|
||||
add_action( 'wp_ajax_support_notice', [ $this, 'support_notice' ] );
|
||||
add_action( 'admin_enqueue_scripts', [ $this, 'support_notice_script' ] );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
$this->status = false;
|
||||
|
||||
if(!empty($licenseKey) && !empty($this->licenseMessage)){
|
||||
$this->showMessage = true;
|
||||
}
|
||||
|
||||
update_option("himara_license_key","") || add_option("himara_license_key","");
|
||||
add_action( 'admin_post_Himara_el_activate_license', [ $this, 'action_activate_license' ] );
|
||||
add_action( 'admin_menu', [$this,'InactiveMenu'], 11);
|
||||
add_action('admin_notices', [ $this, 'license_activation_notice' ] );
|
||||
|
||||
}
|
||||
|
||||
add_filter( 'admin_body_class', array( &$this, 'theme_dashboard_body_class' ) );
|
||||
|
||||
}
|
||||
|
||||
function ActiveAdminMenu(){
|
||||
|
||||
add_submenu_page(
|
||||
'himara_options',
|
||||
__('Dashboard', 'himara'),
|
||||
__('Dashboard', 'himara'),
|
||||
'activate_plugins',
|
||||
$this->slug,
|
||||
[$this, "ActivePage"],
|
||||
0
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function InactiveMenu() {
|
||||
|
||||
add_submenu_page(
|
||||
'himara_options',
|
||||
__('Dashboard', 'himara'),
|
||||
__('Dashboard', 'himara'),
|
||||
'manage_options',
|
||||
$this->slug,
|
||||
[$this, "InactivePage"],
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* License Active Page Element
|
||||
*
|
||||
* @since 1.2.9.5
|
||||
*/
|
||||
function ActivePage() {
|
||||
$this->Header();
|
||||
$this->Activated();
|
||||
$this->ServerRequirements();
|
||||
$this->Help();
|
||||
}
|
||||
|
||||
/**
|
||||
* License Inactive Page Element
|
||||
*
|
||||
* @since 1.2.9.5
|
||||
*/
|
||||
function InactivePage() {
|
||||
$this->Header();
|
||||
$this->LicenseForm();
|
||||
$this->ServerRequirements();
|
||||
$this->Help();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update options on license activation
|
||||
*
|
||||
* @since 1.2.9.5
|
||||
*/
|
||||
function action_activate_license(){
|
||||
|
||||
check_admin_referer( 'el-license' );
|
||||
|
||||
$licenseKey = !empty($_POST['el_license_key'])?$_POST['el_license_key']:"";
|
||||
$licenseEmail = !empty($_POST['el_license_email'])?$_POST['el_license_email']:"";
|
||||
|
||||
update_option("himara_license_key",$licenseKey) || add_option("himara_license_key", $licenseKey);
|
||||
update_option("himara_license_email",$licenseEmail) || add_option("himara_license_email", $licenseEmail);
|
||||
|
||||
wp_safe_redirect(admin_url( 'admin.php?page='.$this->slug));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update options on license deactivation
|
||||
*
|
||||
* @since 1.2.9.5
|
||||
*
|
||||
*/
|
||||
function action_deactivate_license() {
|
||||
|
||||
check_admin_referer( 'el-license' );
|
||||
|
||||
$message="";
|
||||
|
||||
if( HimaraBase::RemoveLicenseKey(__FILE__,$message )) {
|
||||
|
||||
update_option('himara_license_key', '');
|
||||
update_option('himara_license_email', '');
|
||||
}
|
||||
|
||||
wp_safe_redirect(admin_url( 'admin.php?page='.$this->slug));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add custom class to body tag
|
||||
*
|
||||
* @since 1.2.9.5
|
||||
*/
|
||||
function theme_dashboard_body_class() {
|
||||
|
||||
$classes = '';
|
||||
$currentScreen = get_current_screen();
|
||||
|
||||
if( $currentScreen->id === "himara_page_himara_dashboard" || $currentScreen->id === "admin_page_himara_dashboard" ) {
|
||||
|
||||
$classes = 'eth-theme-dashboard';
|
||||
}
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
function Header() {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-admin-header">
|
||||
<div class="eth-admin-header-inner">
|
||||
<div class="eth-admin-brand">
|
||||
<a href="https://eagle-themes.com/?utm_source=eth_header_logo" target="_blank" class="eth-admin-logo">
|
||||
<img src="<?php echo get_template_directory_uri().'/assets/images/admin/eth_logo.png'?>" alt="Eagle Booking">
|
||||
</a>
|
||||
<div class="eth-admin-slogan">
|
||||
<span><?php echo HIMARA_THEME_NAME ?><small><?php echo HIMARA_THEME_VERSION ?></small></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="eth-admin-menu">
|
||||
<div class="view-switcher">
|
||||
<a href="admin.php?page=himara_dashboard" class="btn active"><?php echo __('Dashboard', 'himara') ?></a>
|
||||
<a href="admin.php?page=himara_demo_importer" class="btn"><?php echo __('Demo Importer', 'himara') ?></a>
|
||||
<a href="admin.php?page=himara_options" class="btn"><?php echo __('Theme Settings', 'himara' )?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
function Activated() {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
|
||||
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
|
||||
<input type="hidden" name="action" value="deactivate_license"/>
|
||||
<div class="eth-license el-license-container">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php echo __('Theme License', 'himara');?> </h3>
|
||||
</div>
|
||||
<div class="eth-theme-panel-inner">
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p><?php echo __('If you want to use your license on a different domain you have to deactivate your license first and activate it on your new domain.', 'himara') ?></p>
|
||||
</div>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td width="50%"><?php echo __('Theme Version', 'himara') ?></td>
|
||||
<td width="30%">
|
||||
<span class="no"><?php echo HIMARA_THEME_VERSION ?></span>
|
||||
</td>
|
||||
<td><a href="<?php echo esc_url('https://docs.eagle-themes.com/kb/himara/himara-changelog/') ?>" target="_blank"><?php echo __('Changelog', 'himara' ) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('Theme License', 'himara') ?></td>
|
||||
<td>
|
||||
<?php if ( $this->responseObj->is_valid ) : ?>
|
||||
<span class="eth-license-activated"><?php echo __("Activated", 'himara');?></span>
|
||||
<?php else : ?>
|
||||
<span class="el-license-valid"><?php echo __("Not Activated", 'himara');?></span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<div class="el-license-active-btn">
|
||||
<?php wp_nonce_field( 'el-license' ); ?>
|
||||
<?php submit_button( __( 'Deactivate License', 'himara' ), 'eth-deactivate-btn' ); ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('Purchase Code', 'himara') ?></td>
|
||||
<td><?php echo esc_attr( substr( $this->responseObj->license_key, 0 ,9 )."XXXXXXXX-XXXXXXXX".substr( $this->responseObj->license_key, -9 ) ); ?></td>
|
||||
<td><a href="https://docs.eagle-themes.com/kb/general/where-is-my-purchase-code/" target="_blank"><?php echo __("Where Is My Purchase Code?", 'himara') ?> </a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('Support Expired on', 'himara') ?></td>
|
||||
<td>
|
||||
<span class="<?php echo $this->responseObj->is_valid ? "yes" : "no" ?>">
|
||||
<?php
|
||||
|
||||
if ( isset( $this->responseObj->support_end ) && $this->responseObj->support_end != 'Unlimited') {
|
||||
|
||||
$expired_date = new DateTime($this->responseObj->support_end);
|
||||
$expired_date = $expired_date->format('d-m-Y');
|
||||
echo esc_html( $expired_date );
|
||||
}
|
||||
|
||||
?>
|
||||
</span>
|
||||
</td>
|
||||
<td><a href="<?php echo esc_url('https://themeforest.net/checkout/from_item/22325268?license=regular&size=source&support=renew_6month') ?>" target="_blank"><?php echo __('Renew Support', 'himara') ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('Child Theme', 'himara') ?></td>
|
||||
<td>
|
||||
<span class="yes">
|
||||
<?php echo is_child_theme() ? "Active" : "Not Active" ?>
|
||||
</span>
|
||||
</td>
|
||||
<td><a href="<?php echo esc_url('https://developer.wordpress.org/themes/advanced-topics/child-themes/') ?>" target="_blank"><?php echo __('What is a Child Theme?', 'himara') ?></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
function LicenseForm() {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
|
||||
<input type="hidden" name="action" value="Himara_el_activate_license"/>
|
||||
<div class="eth-license el-license-container">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php echo __('Theme License', 'himara');?> </h3>
|
||||
</div>
|
||||
<div class="eth-theme-panel-inner">
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-lock"></i>
|
||||
<p><?php echo __('Activate the theme using your Envato Purchase Code. One standard license is valid for one website. Running multiple projects on a single license is a copyright violation.', 'himara') ?></p>
|
||||
</div>
|
||||
<?php
|
||||
if( !empty($this->showMessage) && !empty($this->licenseMessage) ){
|
||||
?>
|
||||
<div class="eth-notice eth-notice-error">
|
||||
<i class="dashicons dashicons-no"></i><p><?php echo $this->licenseMessage; ?></p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<div class="eth-license-form">
|
||||
|
||||
<div class="el-license-field">
|
||||
<label for="el_license_key"><?php echo __('Purchase Code', 'himara');?> <a href="https://docs.eagle-themes.com/kb/general/where-is-my-purchase-code/" target="_blank"><?php echo __("How to get Purchase Code", 'himara') ?> </a></label>
|
||||
<input type="text" class="regular-text code" name="el_license_key" size="50" placeholder="xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx" required="required">
|
||||
</div>
|
||||
|
||||
<?php $purchaseEmail = get_option( "himara_license_email", get_bloginfo( 'admin_email' )); ?>
|
||||
<input type="hidden" class="regular-text code btn" name="el_license_email" size="50" value="<?php echo $purchaseEmail; ?>" placeholder="" required="required">
|
||||
|
||||
<div class="el-license-active-btn">
|
||||
<?php wp_nonce_field( 'el-license' ); ?>
|
||||
<?php submit_button( __( 'Activate License', 'himara' ), 'eth-activate-btn' ); ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Server Environment
|
||||
*
|
||||
* @since 1.3.5
|
||||
*/
|
||||
|
||||
public function ServerRequirementsValues() {
|
||||
|
||||
if (!isset($value)) $value = new stdClass();
|
||||
|
||||
// values
|
||||
$value->php_version = PHP_VERSION;
|
||||
$value->max_execution_time = ini_get('max_execution_time');
|
||||
$value->memory_limit = ini_get('memory_limit');
|
||||
$value->upload_max_filesize = ini_get('upload_max_filesize');
|
||||
|
||||
// classes
|
||||
$value->php_version >= '7.4.0' ? $value->php_version_class = 'yes' : $value->php_version_class = 'no';
|
||||
$value->max_execution_time >= '600' ? $value->max_execution_time_class = 'yes' : $value->max_execution_time_class = 'no';
|
||||
str_replace('M', '', $value->memory_limit) >= '128' ? $value->memory_limit_class = 'yes' : $value->memory_limit_class = 'no';
|
||||
str_replace('M', '', $value->upload_max_filesize) >= '32' ? $value->upload_max_filesize_class = 'yes' : $value->upload_max_filesize_class = 'no';
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
function ServerRequirements() {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
<div class="eth-license el-license-container">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php echo __('Server Environment', 'himara');?> </h3>
|
||||
<a href="https://docs.eagle-themes.com/kb/general/recommended-php-configuration-limits/" target="_blank" class="btn"><?php echo __('Requirements', 'himara') ?></a>
|
||||
</div>
|
||||
<div class="eth-theme-panel-inner">
|
||||
<table class="requirements">
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="40%"><?php echo __('Directive','himara') ?></th>
|
||||
<th width="20%"><?php echo __('Priority','himara') ?></th>
|
||||
<th><?php echo __('Required Value','himara') ?></th>
|
||||
<th><?php echo __('Current Value','himara') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><?php echo __('PHP version', 'himara') ?></td>
|
||||
<td><?php echo __('High', 'himara') ?></td>
|
||||
<td>7.4.0</td>
|
||||
<td class="value <?php echo $this->ServerRequirementsValues()->php_version_class ?>"><?php echo $this->ServerRequirementsValues()->php_version ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('PHP time limit', 'himara') ?> <span>(max_execution_time)</span>:</td>
|
||||
<td><?php echo __('Medium', 'himara') ?></td>
|
||||
<td>600</td>
|
||||
<td class="value <?php echo $this->ServerRequirementsValues()->max_execution_time_class ?>"><?php echo $this->ServerRequirementsValues()->max_execution_time ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('PHP memory limit', 'himara') ?> <span>(memory_limit)</span>:</td>
|
||||
<td><?php echo __('High', 'himara') ?></td>
|
||||
<td>128M</td>
|
||||
<td class="value <?php echo $this->ServerRequirementsValues()->memory_limit_class ?>"><?php echo $this->ServerRequirementsValues()->memory_limit ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php echo __('Max upload size', 'himara') ?> <span>(upload_max_filesize)</span>:</td>
|
||||
<td><?php echo __('High', 'himara') ?></td>
|
||||
<td>32M</td>
|
||||
<td class="value <?php echo $this->ServerRequirementsValues()->upload_max_filesize_class ?>"><?php echo $this->ServerRequirementsValues()->upload_max_filesize ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
function Help() {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
<div class="eth-license el-license-container">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php echo __('Help', 'himara');?> </h3>
|
||||
<a href="https://docs.eagle-themes.com/" target="_blank" class="btn"><?php echo __('Documentation', 'himara') ?></a>
|
||||
</div>
|
||||
<div class="eth-theme-panel-inner">
|
||||
<div class="eth-theme-pannel-help">
|
||||
<div>
|
||||
<h4><?php echo __('Theme Documentation', 'himara') ?></h4>
|
||||
<ul>
|
||||
<li><a href="https://docs.eagle-themes.com/kb/himara/himara-theme-installation/ " target="_blank"><?php echo __('Theme Installation', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-themes.com/kb/himara/himara-content-import/" target="_blnak"><?php echo __('Demo Content Import', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-themes.com/kb/general/theme-translation/" target="_blnak"><?php echo __('Theme Translation', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-themes.com/kb/general/activating-premium-plugins/" target="_blnak"><?php echo __('Activating Premium Plugins', 'himara') ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4><?php echo __('Eagle Booking Documentation', 'himara') ?></h4>
|
||||
<ul>
|
||||
<li><a href="https://docs.eagle-booking.com/kb/add-new-room/" target="_blank"><?php echo __('Add New Room', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-booking.com/kb/new-booking" target="_blank"><?php echo __('Add New Booking', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-booking.com/kb/new-service/" target="_blank"><?php echo __('Add New Service', 'himara') ?></a></li>
|
||||
<li><a href="https://docs.eagle-booking.com/kb/booking-settings/" target="_blank"><?php echo __('Booking System', 'himara') ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h4><?php echo __('Useful Links', 'himara') ?></h4>
|
||||
<ul>
|
||||
<li><a href="https://support.eagle-themes.com/" target="_blank" ><?php echo __('Get Support', 'himara') ?></a></li>
|
||||
<li><a href="https://eagle-booking.com/" target="_blank" ><?php echo __('Get Eagle Booking', 'himara') ?></a></li>
|
||||
<li><a href="https://www.cloudways.com/en/wordpress-cloud-hosting.php?id=792156&a_bid=19515e01" target="_blank" ><?php echo __('Recommended Hosting', 'himara') ?></a></li>
|
||||
<li><a href="https://wpml.org/?aid=225435&affiliate_key=xqc1kSQTtLzj" target="_blank" ><?php echo __('Recommended Multilingual Plugin', 'himara') ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* License activation required admin notice
|
||||
*
|
||||
* @since 1.3.5
|
||||
*/
|
||||
public function license_activation_notice() {
|
||||
if ( $this->status == true ) {
|
||||
return;
|
||||
} ?>
|
||||
|
||||
<div class="himara-license notice notice-info notactivated <?php echo wp_generate_password(5, false, false) ?>">
|
||||
<p><?php echo __( 'Himara has not been activated! Make sure to activate your license to be able to use all core functionalities.', 'himara' ); ?></p>
|
||||
<p><a href="<?php echo esc_url( admin_url( 'admin.php?page=himara_dashboard') ); ?>" class="wp-core-ui button"><?php echo __( 'Activate Himara License', 'himara' ); ?></a></p>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Support has expired admin notice
|
||||
*
|
||||
* @since 1.3.5
|
||||
*/
|
||||
|
||||
public function support_expired_notice() {
|
||||
|
||||
$today = date("Y-m-d H:i:s");
|
||||
|
||||
// Return if license is active and support is still valid
|
||||
if ( $this->status == true && $this->responseObj->support_end > $today ) {
|
||||
return;
|
||||
} ?>
|
||||
|
||||
<div data-dismissible="theme-support-expired" class="eth-support-notice notice notice-error is-dismissible">
|
||||
<p><?php echo __( 'Your support for Himara has expired. Please renew support if you wish to get help from our team.', 'himara' ); ?></p>
|
||||
<p><a href="<?php echo esc_url('https://themeforest.net/checkout/from_item/22325268?license=regular&size=source&support=renew_6month') ?>" target="_blank" class="wp-core-ui button"><?php echo __( 'Renew Support', 'himara' ); ?></a></p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Support Notice Option
|
||||
*
|
||||
* @since 1.3.6
|
||||
*/
|
||||
|
||||
public function support_notice() {
|
||||
update_option( 'himara_support_notice', true );
|
||||
}
|
||||
|
||||
/*
|
||||
* Enque Support Notice Script
|
||||
*
|
||||
* @since 1.3.6
|
||||
*/
|
||||
|
||||
public function support_notice_script() {
|
||||
|
||||
wp_enqueue_script( 'notice-update', get_template_directory_uri(). '/assets/js/admin/global.js','', HIMARA_THEME_VERSION );
|
||||
|
||||
wp_localize_script( 'notice-update', 'notice_params', array(
|
||||
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
||||
|
||||
));
|
||||
|
||||
wp_enqueue_script( 'notice-update' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get license status of the theme
|
||||
*
|
||||
* @since 1.5.1
|
||||
*/
|
||||
|
||||
public function status() {
|
||||
|
||||
if ( $this->status == true ) {
|
||||
|
||||
return $this->status;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$license = new Himara_Theme_License;
|
||||
|
||||
$status = $license->status;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ( !function_exists( 'theme_license_status' ) ) {
|
||||
|
||||
function theme_license_status() {
|
||||
|
||||
global $status;
|
||||
|
||||
if ( $status == true ) {
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
add_action('plugins_loaded ','theme_license_status', 1);
|
||||
|
||||
}
|
||||
562
wp-content/themes/himara/core/admin/demo-importer.php
Normal file
@@ -0,0 +1,562 @@
|
||||
<?php
|
||||
|
||||
/* Include Demo Importer */
|
||||
include_once get_template_directory() . '/core/admin/inc/importer/importer.php';
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Demo Importer Dashboard Menu
|
||||
#-----------------------------------------------------------------#
|
||||
function ocdi_plugin_page_setup( $default_settings ) {
|
||||
$default_settings['parent_slug'] = 'admin.php';
|
||||
$default_settings['page_title'] = esc_html__( 'Himara One Click Demo Import' , 'himara' );
|
||||
$default_settings['menu_title'] = esc_html__( 'Import Demo Data' , 'himara' );
|
||||
$default_settings['capability'] = 'import';
|
||||
$default_settings['menu_slug'] = 'himara_demo_importer';
|
||||
|
||||
return $default_settings;
|
||||
}
|
||||
|
||||
add_filter( 'ocdi/plugin_page_setup', 'ocdi_plugin_page_setup' );
|
||||
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Demo Content
|
||||
#-----------------------------------------------------------------#
|
||||
function ocdi_import_files() {
|
||||
|
||||
return [
|
||||
|
||||
// Modern
|
||||
[
|
||||
'import_file_name' => __('Modern', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/modern.zip',
|
||||
'slider_name' => 'modern',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/modern/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// City
|
||||
[
|
||||
'import_file_name' => __('City', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/city.zip',
|
||||
'slider_name' => 'city',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/city/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/city/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Island
|
||||
[
|
||||
'import_file_name' => __('Island', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/island.zip',
|
||||
'slider_name' => 'island',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/island/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/island/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Bed & Breakfast
|
||||
[
|
||||
'import_file_name' => __('Bed & Breakfast', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/bedbreakfast.zip',
|
||||
'slider_name' => 'bedbreakfast',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/bedbreakfast/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/bedbreakfast/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Summer
|
||||
[
|
||||
'import_file_name' => __('Summer', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/summer.zip',
|
||||
'slider_name' => 'summer',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/summer/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/summer/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Classic
|
||||
[
|
||||
'import_file_name' => __('Classic', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/classic.zip',
|
||||
'slider_name' => 'classic',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/classic/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/classic/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Boutique
|
||||
[
|
||||
'import_file_name' => __('Boutique', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/boutique.zip',
|
||||
'slider_name' => 'boutique',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/boutique/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/boutique/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
// Lodge
|
||||
[
|
||||
'import_file_name' => __('Lodge', 'himara'),
|
||||
'import_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/content.xml',
|
||||
'import_widget_file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/widgets.json',
|
||||
'import_redux' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/theme-options.json',
|
||||
'option_name' => 'himara_settings',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/eb-options.json',
|
||||
'option_name' => 'eagle_booking_settings',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_rev' => [
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/lodge.zip',
|
||||
'slider_name' => 'lodge',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/restaurant.zip',
|
||||
'slider_name' => 'restaurant',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/spa.zip',
|
||||
'slider_name' => 'spa',
|
||||
],
|
||||
|
||||
[
|
||||
'file_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/gallery.zip',
|
||||
'slider_name' => 'gallery',
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
'import_preview_image_url' => 'https://api.eagle-themes.com/download/himara/h13anjo16/content/lodge/screenshot.jpg',
|
||||
'preview_url' => 'https://demo.himaratheme.com/lodge/?ref=demo-importer',
|
||||
],
|
||||
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
add_filter( 'ocdi/import_files', 'ocdi_import_files' );
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Required Plugins
|
||||
#-----------------------------------------------------------------#
|
||||
function ocdi_register_plugins( $plugins ) {
|
||||
|
||||
$theme_plugins = [
|
||||
|
||||
[
|
||||
'name' => 'Eagle Core',
|
||||
'slug' => 'eagle-core',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/eagle-core.zip',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
[
|
||||
'name' => 'Eagle Booking',
|
||||
'slug' => 'eagle-booking',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/eagle-booking.zip',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
[
|
||||
'name' => 'Elementor',
|
||||
'slug' => 'elementor',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
[
|
||||
'name' => 'Revolution Slider',
|
||||
'slug' => 'revslider',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/revslider.zip',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
[
|
||||
'name' => 'Envato Market',
|
||||
'slug' => 'envato-market',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/envato-market.zip',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
[
|
||||
'name' => 'Contact Form 7',
|
||||
'slug' => 'contact-form-7',
|
||||
'preselected' => true,
|
||||
'required' => true,
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
return array_merge( $plugins, $theme_plugins );
|
||||
}
|
||||
|
||||
add_filter( 'ocdi/register_plugins', 'ocdi_register_plugins' );
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# Before Demo Content Import
|
||||
#-----------------------------------------------------------------#
|
||||
function ocdi_before_content_import( $selected_import ) {
|
||||
|
||||
$sidebars_widgets = get_option('sidebars_widgets');
|
||||
|
||||
if ( !empty( $sidebars_widgets ) ) foreach ($sidebars_widgets as $key => $value) {
|
||||
if ( is_array($value) ) foreach ($value as $widget_id) {
|
||||
$pieces = explode('-', $widget_id);
|
||||
$multi_number = array_pop($pieces);
|
||||
$id_base = implode('-', $pieces);
|
||||
$widget = get_option('widget_' . $id_base);
|
||||
|
||||
unset($widget[$multi_number]);
|
||||
|
||||
update_option('widget_' . $id_base, $widget);
|
||||
}
|
||||
|
||||
$sidebars_widgets[$key] = array();
|
||||
}
|
||||
|
||||
update_option('sidebars_widgets', $sidebars_widgets);
|
||||
|
||||
// Enable SVG upload only during/before the import process
|
||||
function enable_svg_upload( $upload_mimes ) {
|
||||
$upload_mimes['svg'] = 'image/svg+xml';
|
||||
return $upload_mimes;
|
||||
}
|
||||
|
||||
add_filter( 'upload_mimes', 'enable_svg_upload', 10, 1 );
|
||||
|
||||
}
|
||||
|
||||
add_action( 'ocdi/before_content_import', 'ocdi_before_content_import' );
|
||||
|
||||
#-----------------------------------------------------------------#
|
||||
# After Import Set Home Page & Permalinks Settings
|
||||
#-----------------------------------------------------------------#
|
||||
function ocdi_after_import_setup( $selected_import ) {
|
||||
|
||||
// Set Menus
|
||||
$main_menu_name = get_term_by( 'name', 'Main Menu', 'nav_menu' );
|
||||
$sub_footer_menu_name = get_term_by( 'name', 'Sub Footer Menu', 'nav_menu' );
|
||||
$main_menu_id = $main_menu_name->term_id;
|
||||
$sub_footer_menu_id = $sub_footer_menu_name->term_id;
|
||||
|
||||
set_theme_mod( 'nav_menu_locations', [
|
||||
'himara_main_menu' => $main_menu_id,
|
||||
'himara_subfooter_menu' => $sub_footer_menu_id
|
||||
]
|
||||
);
|
||||
|
||||
$front_page_id = get_page_by_title( 'Home Page' );
|
||||
$blog_page_id = get_page_by_title( 'Blog' );
|
||||
|
||||
update_option( 'show_on_front', 'page' );
|
||||
update_option( 'page_on_front', $front_page_id->ID );
|
||||
update_option( 'page_for_posts', $blog_page_id->ID );
|
||||
|
||||
// Set EB button on Menu after import
|
||||
$data = get_option( 'eagle_booking_settings' );
|
||||
$data['button_menu'] = $main_menu_id;
|
||||
update_option( 'eagle_booking_settings', $data );
|
||||
|
||||
// Set Permalinks to postname
|
||||
global $wp_rewrite;
|
||||
$wp_rewrite->set_permalink_structure('/%postname%/');
|
||||
update_option( "rewrite_rules", FALSE );
|
||||
$wp_rewrite->flush_rules( true );
|
||||
|
||||
|
||||
// Update Elementor Options
|
||||
update_option( 'elementor_disable_color_schemes', 'yes' );
|
||||
update_option( 'elementor_disable_typography_schemes', 'yes' );
|
||||
|
||||
$active_kit = get_option( 'elementor_active_kit' );
|
||||
if ( empty( $active_kit ) && class_exists( '\Elementor\Plugin' ) ) {
|
||||
$active_kit = \Elementor\Plugin::$instance->kits_manager->get_active_id();
|
||||
}
|
||||
|
||||
if ( !empty( $active_kit ) ) {
|
||||
$settings = get_post_meta( $active_kit, '_elementor_page_settings' );
|
||||
if ( empty( $settings ) ) {
|
||||
$settings = [];
|
||||
}
|
||||
|
||||
$settings['container_width'] = [ 'unti' => 'px', 'size' => '1300' ];
|
||||
$settings['space_between_widgets'] = [ 'unti' => 'px', 'size' => '0' ];
|
||||
|
||||
update_post_meta( $active_kit, '_elementor_page_settings', $settings );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
add_action( 'ocdi/after_import', 'ocdi_after_import_setup' );
|
||||
|
||||
// Delete transient & prevent redirection after plugin activation
|
||||
delete_transient('_revslider_welcome_screen_activation_redirect', true, 90);
|
||||
delete_transient( 'elementor_activation_redirect' );
|
||||
39
wp-content/themes/himara/core/admin/enqueue.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
add_action( 'admin_enqueue_scripts', 'himara_load_admin_scripts' );
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Load CSS & JS in admin
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
function himara_load_admin_scripts() {
|
||||
himara_load_admin_css();
|
||||
himara_load_admin_js();
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Load CSS in admin
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
function himara_load_admin_css() {
|
||||
|
||||
global $pagenow, $typenow;
|
||||
|
||||
wp_enqueue_style( 'himara-global', get_template_directory_uri() . '/assets/css/admin/global.css', false, HIMARA_THEME_VERSION, 'screen, print' );
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Load JS in admin
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
function himara_load_admin_js() {
|
||||
|
||||
global $pagenow, $typenow;
|
||||
|
||||
wp_enqueue_script( 'himara-global', get_template_directory_uri().'/assets/js/admin/global.js', array( 'jquery' ), HIMARA_THEME_VERSION );
|
||||
|
||||
if( $pagenow == 'widgets.php' ){
|
||||
wp_enqueue_media();
|
||||
wp_enqueue_script( 'himara-admin-js', get_template_directory_uri() . '/assets/js/admin/widgets.js', '', '', true );
|
||||
}
|
||||
}
|
||||
1453
wp-content/themes/himara/core/admin/inc/importer/assets/css/main.css
Normal file
1
wp-content/themes/himara/core/admin/inc/importer/assets/css/main.min.css
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[About Us]]></title>
|
||||
<link>https://ocdi.com/about-us/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 09:03:37 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:paragraph -->
|
||||
<p>Here's the most important thing you need to know: <strong>we're more than just a marketing agency</strong>. We help small businesses to realize their full growth potential, and we're invested in their success.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:columns {"backgroundColor":"gray"} -->
|
||||
<div class="wp-block-columns has-gray-background-color has-background"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":4} -->
|
||||
<h4>Since 2017</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Acme Marketing was founded by Leah Robinson in New York City.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":4} -->
|
||||
<h4>14 Experts</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>We're super proud of our diverse and talented team.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":4} -->
|
||||
<h4>3 Countries</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>We work with hundreds of businesses <strong>just like yours</strong>.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:quote {"className":"is-style-large"} -->
|
||||
<blockquote class="wp-block-quote is-style-large" id="output"><p>Our team is driven by your success. Every single day, we'll support your business and help you to succeed.</p></blockquote>
|
||||
<!-- /wp:quote -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center"} -->
|
||||
<h2 class="has-text-align-center">Our History</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center"} -->
|
||||
<h2 class="has-text-align-center">Our Promise</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </p>
|
||||
<!-- /wp:paragraph -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-09 09:03:37]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 09:03:37]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-23 13:41:53]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-23 13:41:53]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[about-us]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_page_template]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[default]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wxr_import_parent]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2070]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,568 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Book Now]]></title>
|
||||
<link>https://ocdi.com/book-now/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:35:00 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:cover {"url":"https://ocdi.com/wp-content/uploads/2021/03/pexels-rodnae-final-1.jpg","id":2378,"dimRatio":15,"focalPoint":{"x":"1.00","y":"0.44"},"minHeight":495,"minHeightUnit":"px","contentPosition":"center center","align":"wide","className":"is-position-center-center"} -->
|
||||
<div class="wp-block-cover alignwide has-background-dim-20 has-background-dim is-position-center-center" style="min-height:495px"><img class="wp-block-cover__image-background wp-image-2378" alt="" src="https://ocdi.com/wp-content/uploads/2021/03/pexels-rodnae-final-1.jpg" style="object-position:100% 44%" data-object-fit="cover" data-object-position="100% 44%"/><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"placeholder":"Write title…","style":{"typography":{"fontSize":74,"lineHeight":"1.1"}},"textColor":"dark-gray"} -->
|
||||
<p class="has-dark-gray-color has-text-color" style="font-size:74px;line-height:1.1"><strong>Because you deserve an experience <em>just </em>for you.</strong></p>
|
||||
<!-- /wp:paragraph --></div></div>
|
||||
<!-- /wp:cover -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>All of our staff are certified and receive annual training - so you can rest assured we're up to speed on the latest trends. <em>Our goal is to help you feel better by looking your best. </em>Book an appointment today!</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button {"borderRadius":2,"backgroundColor":"yellow","textColor":"dark-gray"} -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link has-dark-gray-color has-yellow-background-color has-text-color has-background" style="border-radius:2px">VIEW SERVICE MENU</a></div>
|
||||
<!-- /wp:button -->
|
||||
|
||||
<!-- wp:button {"borderRadius":2,"backgroundColor":"yellow","textColor":"dark-gray","className":"is-style-outline"} -->
|
||||
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link has-dark-gray-color has-yellow-background-color has-text-color has-background" href="#scheduleyourappointmentnow" style="border-radius:2px">BOOK APPOINTMENT</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons -->
|
||||
|
||||
<!-- wp:image {"align":"center","id":2381,"width":282,"height":282,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/book-now-arrow.gif" alt="" class="wp-image-2381" width="282" height="282"/></figure></div>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:heading -->
|
||||
<h2>What are the benefits of our services? </h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:embed {"url":"https://www.youtube.com/watch?v=eiQ3viAGung","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"} -->
|
||||
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
|
||||
https://www.youtube.com/watch?v=eiQ3viAGung
|
||||
</div></figure>
|
||||
<!-- /wp:embed -->
|
||||
|
||||
<!-- wp:heading {"level":4} -->
|
||||
<h4>Book before this weekend and take 20% off!*</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:separator -->
|
||||
<hr class="wp-block-separator"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:heading {"level":3} -->
|
||||
<h3 id="scheduleyourappointmentnow">SCHEDULE YOUR APPOINTMENT NOW</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:separator -->
|
||||
<hr class="wp-block-separator"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2478,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-resized is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-683x1024.jpg" alt="" class="wp-image-2478" width="245" height="367"/><figcaption>Kelsey - Owner</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2479,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-683x1024.jpg" alt="" class="wp-image-2479" width="245" height="367"/><figcaption>Steve - Senior Stylist</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2480,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-683x1024.jpg" alt="" class="wp-image-2480" width="245" height="367"/><figcaption>Mary Kate - Eyelash Specialist</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2481,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-755x1024.jpg" alt="" class="wp-image-2481" width="245" height="367"/><figcaption>Tina - Brow Master</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2483,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-683x1024.jpg" alt="" class="wp-image-2483" width="245" height="367"/><figcaption>Becky - Stylist</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2484,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-683x1024.jpg" alt="" class="wp-image-2484" width="245" height="367"/><figcaption>Rosa - Junior Stylist</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"id":2487,"width":245,"height":367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/03/ian-dooley-d1UPkiFd04A-unsplash-scaled-1-683x1024.jpg" alt="" class="wp-image-2487" width="245" height="367"/><figcaption>Ross - Apprentice Stylist</figcaption></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center","align":"full"} -->
|
||||
<div class="wp-block-buttons alignfull is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Book Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator -->
|
||||
<hr class="wp-block-separator"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1"><strong>Our Business</strong></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"0"}}} -->
|
||||
<p style="line-height:0">56203 Maribel Peaks Road</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"0"}}} -->
|
||||
<p style="line-height:0">Suite 180</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"0"}}} -->
|
||||
<p style="line-height:0">Big Bear Lake, CA 92333</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:social-links {"align":"center","className":"is-style-pill-shape"} -->
|
||||
<ul class="wp-block-social-links aligncenter is-style-pill-shape"><!-- wp:social-link {"url":"#facebook","service":"facebook"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#instagram","service":"instagram"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#yelp","service":"yelp"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#pinterest","service":"pinterest"} /--></ul>
|
||||
<!-- /wp:social-links --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>904-555-3092</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p><strong>Our Hours</strong></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Monday: 10:00am – 7:00pm<br>Tuesday: 9:00am – 8:00pm<br>Wednesday: 9:00am – 8:00pm<br>Thursday: 9:00am – 8:00pm<br>Friday: 9:00am – 8:00pm<br>Saturday: 9:00am – 6:00pm<br>Sunday: 10:00am – 5:00pm</p>
|
||||
<!-- /wp:paragraph -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2372</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:35:00]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:35:00]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-30 06:03:37]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-30 06:03:37]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[book-now]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_oembed_cbe95e5def08e45a2bff0a5c99680589]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[<iframe title="WPForms Overview - Best WordPress Contact Form Plugin" width="800" height="450" src="https://www.youtube.com/embed/eiQ3viAGung?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_oembed_time_cbe95e5def08e45a2bff0a5c99680589]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[1617084218]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_oembed_e343e43e0a434afc750c45b498566b05]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[<iframe title="WPForms Overview - Best WordPress Contact Form Plugin" width="750" height="422" src="https://www.youtube.com/embed/eiQ3viAGung?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_oembed_time_e343e43e0a434afc750c45b498566b05]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[1614990008]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[pexels-rodnae-final (1)]]></title>
|
||||
<link>https://ocdi.com/book-now/pexels-rodnae-final-1/</link>
|
||||
<pubDate>Sat, 06 Mar 2021 00:10:45 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/pexels-rodnae-final-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2378</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 19:10:45]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-06 00:10:45]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:59]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:59]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[pexels-rodnae-final-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/pexels-rodnae-final-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/pexels-rodnae-final-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2390;s:6:"height";i:1518;s:4:"file";s:33:"2021/03/pexels-rodnae-final-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:33:"pexels-rodnae-final-1-300x191.jpg";s:5:"width";i:300;s:6:"height";i:191;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:34:"pexels-rodnae-final-1-1024x650.jpg";s:5:"width";i:1024;s:6:"height";i:650;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:33:"pexels-rodnae-final-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:33:"pexels-rodnae-final-1-768x488.jpg";s:5:"width";i:768;s:6:"height";i:488;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:34:"pexels-rodnae-final-1-1536x976.jpg";s:5:"width";i:1536;s:6:"height";i:976;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:35:"pexels-rodnae-final-1-2048x1301.jpg";s:5:"width";i:2048;s:6:"height";i:1301;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_image_alt]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[pexels-rodnae-final (1)]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[book-now-arrow]]></title>
|
||||
<link>https://ocdi.com/book-now/book-now-arrow/</link>
|
||||
<pubDate>Sat, 06 Mar 2021 00:43:14 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/book-now-arrow.gif</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2381</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 19:43:14]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-06 00:43:14]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:59]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:59]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[book-now-arrow]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/book-now-arrow.gif]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/book-now-arrow.gif]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:600;s:6:"height";i:600;s:4:"file";s:26:"2021/03/book-now-arrow.gif";s:5:"sizes";a:2:{s:6:"medium";a:4:{s:4:"file";s:26:"book-now-arrow-300x300.gif";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/gif";}s:9:"thumbnail";a:4:{s:4:"file";s:26:"book-now-arrow-150x150.gif";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/gif";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[michael-dam-mEZ3PoFGs_k-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/michael-dam-mez3pofgs_k-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:24:10 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/michael-dam-mEZ3PoFGs_k-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2478</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:24:10]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:24:10]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[michael-dam-mez3pofgs_k-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/michael-dam-mEZ3PoFGs_k-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/michael-dam-mEZ3PoFGs_k-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:53:"2021/03/michael-dam-mEZ3PoFGs_k-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:53:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:54:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:53:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:54:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:55:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:55:"michael-dam-mEZ3PoFGs_k-unsplash-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[joseph-gonzalez-iFgRcqHznqg-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/joseph-gonzalez-ifgrcqhznqg-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:27:18 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/joseph-gonzalez-iFgRcqHznqg-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2479</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:27:18]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:27:18]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[joseph-gonzalez-ifgrcqhznqg-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:57:"2021/03/joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:57:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:58:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:57:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:58:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:59:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:59:"joseph-gonzalez-iFgRcqHznqg-unsplash-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[brooke-cagle-oTweoxMKdkA-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/brooke-cagle-otweoxmkdka-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:27:56 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/brooke-cagle-oTweoxMKdkA-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2480</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:27:56]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:27:56]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[brooke-cagle-otweoxmkdka-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/brooke-cagle-oTweoxMKdkA-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/brooke-cagle-oTweoxMKdkA-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:54:"2021/03/brooke-cagle-oTweoxMKdkA-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:54:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:55:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:54:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:55:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:56:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:56:"brooke-cagle-oTweoxMKdkA-unsplash-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[carrita-tanner-E7B9RWMTMLI-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/carrita-tanner-e7b9rwmtmli-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:29:17 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/carrita-tanner-E7B9RWMTMLI-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2481</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:29:17]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:29:17]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[carrita-tanner-e7b9rwmtmli-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1888;s:6:"height";i:2560;s:4:"file";s:56:"2021/03/carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:56:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-221x300.jpg";s:5:"width";i:221;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:57:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-755x1024.jpg";s:5:"width";i:755;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:56:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:57:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-768x1041.jpg";s:5:"width";i:768;s:6:"height";i:1041;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:58:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-1133x1536.jpg";s:5:"width";i:1133;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:58:"carrita-tanner-E7B9RWMTMLI-unsplash-scaled-1-1510x2048.jpg";s:5:"width";i:1510;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[courtney-cook-qFVPPU1mrMM-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/book-now/courtney-cook-qfvppu1mrmm-unsplash-1/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:30:00 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/courtney-cook-qFVPPU1mrMM-unsplash-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2483</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:30:00]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:30:00]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[courtney-cook-qfvppu1mrmm-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:57:"2021/03/courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:57:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:58:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:57:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:58:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:59:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:59:"courtney-cook-qFVPPU1mrMM-unsplash-1-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[jorge-cesar-Atgu8TywltQ-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/jorge-cesar-atgu8tywltq-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:30:25 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/jorge-cesar-Atgu8TywltQ-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2484</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:30:25]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:30:25]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[jorge-cesar-atgu8tywltq-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/jorge-cesar-Atgu8TywltQ-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/jorge-cesar-Atgu8TywltQ-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:53:"2021/03/jorge-cesar-Atgu8TywltQ-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:53:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:54:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:53:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:54:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:55:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:55:"jorge-cesar-Atgu8TywltQ-unsplash-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[ian-dooley-d1UPkiFd04A-unsplash]]></title>
|
||||
<link>https://ocdi.com/book-now/ian-dooley-d1upkifd04a-unsplash/</link>
|
||||
<pubDate>Wed, 10 Mar 2021 22:32:00 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/ian-dooley-d1UPkiFd04A-unsplash.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2487</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-10 17:32:00]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-10 22:32:00]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[ian-dooley-d1upkifd04a-unsplash]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2372</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/ian-dooley-d1UPkiFd04A-unsplash-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/ian-dooley-d1UPkiFd04A-unsplash-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1707;s:6:"height";i:2560;s:4:"file";s:52:"2021/03/ian-dooley-d1UPkiFd04A-unsplash-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:52:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-200x300.jpg";s:5:"width";i:200;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:53:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-683x1024.jpg";s:5:"width";i:683;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:52:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:53:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-768x1152.jpg";s:5:"width";i:768;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:54:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-1024x1536.jpg";s:5:"width";i:1024;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:54:"ian-dooley-d1UPkiFd04A-unsplash-scaled-1-1366x2048.jpg";s:5:"width";i:1366;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,167 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Contact Us]]></title>
|
||||
<link>https://ocdi.com/contact-us/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 17:38:57 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:cover {"url":"https://ocdi.com/wp-content/uploads/2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg","id":2318,"dimRatio":15,"focalPoint":{"x":"0.40","y":"0.26"},"minHeight":375,"minHeightUnit":"px","contentPosition":"center center","align":"wide","className":"is-position-center-center"} -->
|
||||
<div class="wp-block-cover alignwide has-background-dim-20 has-background-dim is-position-center-center" style="min-height:375px"><img class="wp-block-cover__image-background wp-image-2318" alt="" src="https://ocdi.com/wp-content/uploads/2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg" style="object-position:40% 26%" data-object-fit="cover" data-object-position="40% 26%"/><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center","placeholder":"Write title…","style":{"typography":{"fontSize":74,"lineHeight":"1.1"},"color":{"text":"#fffffa"}}} -->
|
||||
<p class="has-text-align-center has-text-color" style="color:#fffffa;font-size:74px;line-height:1.1"></p>
|
||||
<!-- /wp:paragraph --></div></div>
|
||||
<!-- /wp:cover -->
|
||||
|
||||
<!-- wp:columns {"verticalAlignment":"center","align":"full"} -->
|
||||
<div class="wp-block-columns alignfull are-vertically-aligned-center"><!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button {"backgroundColor":"yellow","textColor":"white"} -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link has-white-color has-yellow-background-color has-text-color has-background" href="#">Learn More About Our Features</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"verticalAlignment":"center"} -->
|
||||
<div class="wp-block-column is-vertically-aligned-center"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button {"backgroundColor":"yellow","textColor":"white"} -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link has-white-color has-yellow-background-color has-text-color has-background" href="#">View Our Support Documentation</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center","level":1,"align":"full"} -->
|
||||
<h1 class="alignfull has-text-align-center" id="h-talk-to-a-human">Talk to a Human</h1>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center","fontSize":"medium"} -->
|
||||
<p class="has-text-align-center has-medium-font-size">We promise, your message won't disappear into the abyss. We're standing by and ready to help with any questions, comments, or thoughts you may have. </p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:heading {"textAlign":"center","align":"full"} -->
|
||||
<h2 class="alignfull has-text-align-center" id="h-let-s-chat">Let's Chat!</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:image {"id":2367,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://ocdi.com/wp-content/uploads/2021/03/animated-arrow-form.gif" alt="" class="wp-image-2367"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:wpforms/form-selector {"formId":"9999"} /--></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2307</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 12:38:57]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 17:38:57]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-24 12:24:08]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-24 12:24:08]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[contact-us]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[ocdi_precreated_demo]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[contact-page]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[ocdi_precreated_demo_updated]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[no]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[animated-arrow-form]]></title>
|
||||
<link>https://ocdi.com/contact-us/animated-arrow-form/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 23:11:12 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/animated-arrow-form.gif</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2367</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 18:11:12]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 23:11:12]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[animated-arrow-form]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2307</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/animated-arrow-form.gif]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/animated-arrow-form.gif]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:600;s:6:"height";i:600;s:4:"file";s:31:"2021/03/animated-arrow-form.gif";s:5:"sizes";a:2:{s:6:"medium";a:4:{s:4:"file";s:31:"animated-arrow-form-300x300.gif";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/gif";}s:9:"thumbnail";a:4:{s:4:"file";s:31:"animated-arrow-form-150x150.gif";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/gif";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[adam-solomon-WHUDOzd5IYU-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/contact-us/adam-solomon-whudozd5iyu-unsplash-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 17:25:32 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2318</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 12:25:32]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 17:25:32]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:57]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:57]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[adam-solomon-whudozd5iyu-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2307</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1105;s:4:"file";s:56:"2021/03/adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:56:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-300x129.jpg";s:5:"width";i:300;s:6:"height";i:129;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:57:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-1024x442.jpg";s:5:"width";i:1024;s:6:"height";i:442;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:56:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:56:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-768x332.jpg";s:5:"width";i:768;s:6:"height";i:332;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:57:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-1536x663.jpg";s:5:"width";i:1536;s:6:"height";i:663;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:57:"adam-solomon-WHUDOzd5IYU-unsplash-1-scaled-1-2048x884.jpg";s:5:"width";i:2048;s:6:"height";i:884;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,157 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[FAQ]]></title>
|
||||
<link>https://ocdi.com/faq/</link>
|
||||
<pubDate>Fri, 26 Feb 2021 20:33:06 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:media-text {"mediaPosition":"right","mediaId":2203,"mediaLink":"https://ocdi.com/faq/pexels-dids-1616472-1/","mediaType":"image","mediaSizeSlug":"full","imageFill":true,"className":"is-style-default"} -->
|
||||
<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile is-image-fill is-style-default"><figure class="wp-block-media-text__media" style="background-image:url(https://ocdi.com/wp-content/uploads/2021/02/pexels-dids-1616472-1-scaled-1.jpg);background-position:50% 50%"><img src="https://ocdi.com/wp-content/uploads/2021/02/pexels-dids-1616472-1-scaled-1.jpg" alt="" class="wp-image-2203 size-full"/></figure><div class="wp-block-media-text__content"><!-- wp:heading -->
|
||||
<h2 id="h-got-questions-we-re-here-to-help-get-you-started-with-our-product"><strong>Got Questions? We’re Here to Help Get You Started With Our Product.</strong></h2>
|
||||
<!-- /wp:heading --></div></div>
|
||||
<!-- /wp:media-text -->
|
||||
|
||||
<!-- wp:search {"label":"What Do You Need Help With?","buttonText":"Search"} /-->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"100%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:100%"><!-- wp:heading {"textAlign":"center"} -->
|
||||
<h2 class="has-text-align-center" id="h-frequently-asked-questions">Frequently Asked Questions</h2>
|
||||
<!-- /wp:heading --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"left","level":3,"align":"wide"} -->
|
||||
<h3 class="alignwide has-text-align-left" id="h-what-if-i-change-my-mind">What if I change my mind?</h3>
|
||||
<!-- /wp:heading --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>No problem! We're confident you'll love our product. We offer a 14-day money-back guarantee, no questions asked. </p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":3,"align":"full"} -->
|
||||
<h3 class="alignfull" id="h-is-your-product-eco-friendly">Is your product eco-friendly?</h3>
|
||||
<!-- /wp:heading --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>It sure is. We're 100% biodegradable and sustainable. Plus, we're Leaping Bunny certified.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"level":3,"align":"full"} -->
|
||||
<h3 class="alignfull" id="h-do-you-offer-any-discounts">Do you offer any discounts?</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p></p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>Although we don't currently have any active coupon codes, we occasionally run seasonal sales - <a href="http://newsletterlandingpageexample.com">join our newsletter</a> to stay updated!</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center"} -->
|
||||
<h2 class="has-text-align-center" id="h-still-need-help-we-re-here">Still Need Help? We're Here!</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Contact Us Now</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p></p>
|
||||
<!-- /wp:paragraph -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-02-26 15:33:06]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-26 20:33:06]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:36:50]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:36:50]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[faq]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[pexels-dids-1616472-1]]></title>
|
||||
<link>https://ocdi.com/faq/pexels-dids-1616472-1/</link>
|
||||
<pubDate>Fri, 26 Feb 2021 20:26:40 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/pexels-dids-1616472-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2203</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-26 15:26:40]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-26 20:26:40]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:55]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:55]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[pexels-dids-1616472-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2201</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/pexels-dids-1616472-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/pexels-dids-1616472-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1707;s:4:"file";s:42:"2021/02/pexels-dids-1616472-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:42:"pexels-dids-1616472-1-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:43:"pexels-dids-1616472-1-scaled-1-1024x683.jpg";s:5:"width";i:1024;s:6:"height";i:683;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:42:"pexels-dids-1616472-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:42:"pexels-dids-1616472-1-scaled-1-768x512.jpg";s:5:"width";i:768;s:6:"height";i:512;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:44:"pexels-dids-1616472-1-scaled-1-1536x1024.jpg";s:5:"width";i:1536;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:44:"pexels-dids-1616472-1-scaled-1-2048x1366.jpg";s:5:"width";i:2048;s:6:"height";i:1366;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,287 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Meet the Team]]></title>
|
||||
<link>https://ocdi.com/meet-the-team/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:43:12 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">Meet the awesome team behind Acme Marketing.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:columns {"className":"is-style-default"} -->
|
||||
<div class="wp-block-columns is-style-default"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center">Leah Robinson</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:image {"align":"center","id":2098,"width":200,"height":200,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-woman.png" alt="" class="wp-image-2098" width="200" height="200"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center">Dan D. Connor</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:image {"align":"center","id":2100,"width":200,"height":200,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man-2.png" alt="" class="wp-image-2100" width="200" height="200"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center">Thomas J. Turner</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:image {"align":"center","id":2099,"width":200,"height":200,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-large is-resized"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man.png" alt="" class="wp-image-2099" width="200" height="200"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2098,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-woman.png" alt="" class="wp-image-2098"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:social-links {"className":"is-style-logos-only"} -->
|
||||
<ul class="wp-block-social-links is-style-logos-only"><!-- wp:social-link {"url":"#url","service":"linkedin"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"twitch"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"youtube"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"facebook"} /--></ul>
|
||||
<!-- /wp:social-links --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>Leah is the CEO and founder of Acme Marketing. She spent several years working as a freelance marketing consultant before moving into full-time management positions. Before founding Acme Marketing, Leah handled several million-dollar accounts for some of the biggest names in tech.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:spacer -->
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2099,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man.png" alt="" class="wp-image-2099"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:social-links {"className":"is-style-logos-only"} -->
|
||||
<ul class="wp-block-social-links is-style-logos-only"><!-- wp:social-link {"url":"#url","service":"linkedin"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"twitch"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"youtube"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"facebook"} /--></ul>
|
||||
<!-- /wp:social-links --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>Thomas started out as a freelance content writer and quickly moved into full-time content production for one of America's biggest homeware brands. As Acme's first full-time employee, he's developed and perfected the content strategy from the ground up. </p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:spacer -->
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2100,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man-2.png" alt="" class="wp-image-2100"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:social-links {"className":"is-style-logos-only"} -->
|
||||
<ul class="wp-block-social-links is-style-logos-only"><!-- wp:social-link {"url":"#url","service":"linkedin"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"twitch"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"youtube"} /-->
|
||||
|
||||
<!-- wp:social-link {"url":"#url","service":"facebook"} /--></ul>
|
||||
<!-- /wp:social-links --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>Dan is an experienced social media manager, and his skills span everything from video production to creating PPC campaigns. Dan has deep understanding of the tools and strategies needed to get your content in front of the right people on social networks.</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Contact the Team</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:wpforms/form-selector {"formId":"9999"} /-->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:43:12]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:43:12]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:37:00]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:37:00]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[meet-the-team]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[ocdi_precreated_demo]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[contact-page]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[ocdi_precreated_demo_updated]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[no]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-woman]]></title>
|
||||
<link>https://ocdi.com/meet-the-team/demo-woman/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 10:21:11 +0000</pubDate>
|
||||
<dc:creator><![CDATA[gcapuder@awesomemotive.com]]></dc:creator>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-woman.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2098</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 05:21:11]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 10:21:11]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-woman]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2097</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-woman.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-woman.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:22:"2021/02/demo-woman.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:22:"demo-woman-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:22:"demo-woman-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:22:"demo-woman-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_image_alt]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[demo-woman]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-man]]></title>
|
||||
<link>https://ocdi.com/meet-the-team/demo-man/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 10:21:16 +0000</pubDate>
|
||||
<dc:creator><![CDATA[gcapuder@awesomemotive.com]]></dc:creator>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-man.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2099</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 05:21:16]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 10:21:16]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-man]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2097</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-man.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-man.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:20:"2021/02/demo-man.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:20:"demo-man-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:20:"demo-man-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:20:"demo-man-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-man-2]]></title>
|
||||
<link>https://ocdi.com/meet-the-team/demo-man-2/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 10:27:58 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-man-2.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2100</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 05:27:58]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 10:27:58]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-man-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2097</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-man-2.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-man-2.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:22:"2021/02/demo-man-2.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:22:"demo-man-2-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:22:"demo-man-2-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:22:"demo-man-2-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,684 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Menu]]></title>
|
||||
<link>https://ocdi.com/menu/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 14:34:09 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:image {"align":"full","id":2407,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image alignfull size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-menu-header-scaled-1-1024x683.jpg" alt="" class="wp-image-2407"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link" rel="#lunch">Lunch</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link" rel="#dinner">Dinner</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link" rel="#dessert">Dessert</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center","fontSize":"huge"} -->
|
||||
<h2 class="has-text-align-center has-huge-font-size" id="lunch">Lunch</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2411,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-gyoza-scaled-1-1024x768.jpg" alt="" class="wp-image-2411"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Chicken Gyoza</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Japanese dumplings served with soy sauce.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2420,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-vegan-edited-scaled-1-1024x768.jpg" alt="" class="wp-image-2420"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Maki Plate</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Carrot and avocado sushi plate. Suitable for vegans.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em> </p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2418,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-avocado-edited-scaled-1-1024x766.jpg" alt="" class="wp-image-2418"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Salmon & Avocado Lunch Platter</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Sushi plate. Available for take-out.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2419,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-lunch-edited-scaled-1-1024x764.jpg" alt="" class="wp-image-2419"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Lunch Sharing Platter</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Salmon, avocado, and tuna for 3-4 diners. <br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center","fontSize":"huge"} -->
|
||||
<h2 class="has-text-align-center has-huge-font-size" id="dinner">Dinner</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2421,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-edited-scaled-1-1024x769.jpg" alt="" class="wp-image-2421"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Salmon Maki Special</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Salmon in toasted nori.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2423,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-tofu-katsu-edited-scaled-1-1024x766.jpg" alt="" class="wp-image-2423"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Tofu Katsu Curry</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Served with steamed rice. Suitable for vegans.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}}} -->
|
||||
<p style="line-height:1">$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2422,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-sashimi-deluxe-edited-scaled-1-1024x769.jpg" alt="" class="wp-image-2422"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Sashimi Special</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Served with miso.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2424,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-eel-bento-edited-scaled-1-1024x769.jpg" alt="" class="wp-image-2424"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Eel Bento</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"1"}},"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size" style="line-height:1">Grilled unagi with sweet soy sauce.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center","fontSize":"huge"} -->
|
||||
<h2 class="has-text-align-center has-huge-font-size" id="dessert">Dessert</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2425,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-chocolate-edited-scaled-1-1024x768.jpg" alt="" class="wp-image-2425"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Moist Chocolate Cake</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size">Served with fruit.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2426,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default"><img src="https://ocdi.com/wp-content/uploads/2021/03/demo-cream-puff-edited-scaled-1-1024x766.jpg" alt="" class="wp-image-2426"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:heading {"level":4} -->
|
||||
<h4>Japanese Cream Puff</h4>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"fontSize":"extra-small"} -->
|
||||
<p class="has-extra-small-font-size">Served with green tea.<br><em>Ingredients: Lorem, ipsum, dolor, sit, amet.</em></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>$1</p>
|
||||
<!-- /wp:paragraph --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p></p>
|
||||
<!-- /wp:paragraph -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-09 09:34:09]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 14:34:09]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:43:07]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:43:07]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[menu]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-menu-header]]></title>
|
||||
<link>https://ocdi.com/menu/demo-menu-header/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 10:57:58 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-menu-header.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2407</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 05:57:58]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 10:57:58]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:59]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:59]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-menu-header]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2405</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-menu-header-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-menu-header-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1707;s:4:"file";s:37:"2021/03/demo-menu-header-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:37:"demo-menu-header-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:38:"demo-menu-header-scaled-1-1024x683.jpg";s:5:"width";i:1024;s:6:"height";i:683;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:37:"demo-menu-header-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:37:"demo-menu-header-scaled-1-768x512.jpg";s:5:"width";i:768;s:6:"height";i:512;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:39:"demo-menu-header-scaled-1-1536x1024.jpg";s:5:"width";i:1536;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:39:"demo-menu-header-scaled-1-2048x1366.jpg";s:5:"width";i:2048;s:6:"height";i:1366;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-gyoza]]></title>
|
||||
<link>https://ocdi.com/menu/demo-gyoza/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:17:04 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-gyoza.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2411</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:17:04]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:17:04]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:59]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:59]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-gyoza]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2405</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-gyoza-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-gyoza-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1920;s:4:"file";s:31:"2021/03/demo-gyoza-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:31:"demo-gyoza-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:32:"demo-gyoza-scaled-1-1024x768.jpg";s:5:"width";i:1024;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:31:"demo-gyoza-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:31:"demo-gyoza-scaled-1-768x576.jpg";s:5:"width";i:768;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:33:"demo-gyoza-scaled-1-1536x1152.jpg";s:5:"width";i:1536;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:33:"demo-gyoza-scaled-1-2048x1536.jpg";s:5:"width";i:2048;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-vegan]]></title>
|
||||
<link>https://ocdi.com/demo-vegan-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:23:10 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-vegan-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2420</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:23:10]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:23:10]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:23:10]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:23:10]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-vegan-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-vegan-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-vegan-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1920;s:4:"file";s:38:"2021/03/demo-vegan-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:38:"demo-vegan-edited-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:39:"demo-vegan-edited-scaled-1-1024x768.jpg";s:5:"width";i:1024;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:38:"demo-vegan-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:38:"demo-vegan-edited-scaled-1-768x576.jpg";s:5:"width";i:768;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:40:"demo-vegan-edited-scaled-1-1536x1152.jpg";s:5:"width";i:1536;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:40:"demo-vegan-edited-scaled-1-2048x1536.jpg";s:5:"width";i:2048;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-salmon-avocado]]></title>
|
||||
<link>https://ocdi.com/demo-salmon-avocado-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:22:31 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-avocado-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2418</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:22:31]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:22:31]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:22:31]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:22:31]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-salmon-avocado-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-avocado-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-salmon-avocado-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1915;s:4:"file";s:47:"2021/03/demo-salmon-avocado-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:47:"demo-salmon-avocado-edited-scaled-1-300x224.jpg";s:5:"width";i:300;s:6:"height";i:224;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:48:"demo-salmon-avocado-edited-scaled-1-1024x766.jpg";s:5:"width";i:1024;s:6:"height";i:766;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:47:"demo-salmon-avocado-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:47:"demo-salmon-avocado-edited-scaled-1-768x575.jpg";s:5:"width";i:768;s:6:"height";i:575;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:49:"demo-salmon-avocado-edited-scaled-1-1536x1149.jpg";s:5:"width";i:1536;s:6:"height";i:1149;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:49:"demo-salmon-avocado-edited-scaled-1-2048x1532.jpg";s:5:"width";i:2048;s:6:"height";i:1532;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-lunch]]></title>
|
||||
<link>https://ocdi.com/demo-lunch-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:22:50 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-lunch-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2419</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:22:50]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:22:50]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:22:50]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:22:50]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-lunch-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-lunch-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-lunch-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1911;s:4:"file";s:38:"2021/03/demo-lunch-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:38:"demo-lunch-edited-scaled-1-300x224.jpg";s:5:"width";i:300;s:6:"height";i:224;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:39:"demo-lunch-edited-scaled-1-1024x764.jpg";s:5:"width";i:1024;s:6:"height";i:764;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:38:"demo-lunch-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:38:"demo-lunch-edited-scaled-1-768x573.jpg";s:5:"width";i:768;s:6:"height";i:573;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:40:"demo-lunch-edited-scaled-1-1536x1147.jpg";s:5:"width";i:1536;s:6:"height";i:1147;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:40:"demo-lunch-edited-scaled-1-2048x1529.jpg";s:5:"width";i:2048;s:6:"height";i:1529;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-salmon]]></title>
|
||||
<link>https://ocdi.com/demo-salmon-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:23:40 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2421</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:23:40]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:23:40]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:23:40]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:23:40]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-salmon-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-salmon-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-salmon-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1922;s:4:"file";s:39:"2021/03/demo-salmon-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:39:"demo-salmon-edited-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:40:"demo-salmon-edited-scaled-1-1024x769.jpg";s:5:"width";i:1024;s:6:"height";i:769;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:39:"demo-salmon-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:39:"demo-salmon-edited-scaled-1-768x577.jpg";s:5:"width";i:768;s:6:"height";i:577;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:41:"demo-salmon-edited-scaled-1-1536x1153.jpg";s:5:"width";i:1536;s:6:"height";i:1153;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:41:"demo-salmon-edited-scaled-1-2048x1538.jpg";s:5:"width";i:2048;s:6:"height";i:1538;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-tofu-katsu]]></title>
|
||||
<link>https://ocdi.com/demo-tofu-katsu-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:24:21 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-tofu-katsu-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2423</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:24:21]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:24:21]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:24:21]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:24:21]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-tofu-katsu-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-tofu-katsu-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-tofu-katsu-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1915;s:4:"file";s:43:"2021/03/demo-tofu-katsu-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:43:"demo-tofu-katsu-edited-scaled-1-300x224.jpg";s:5:"width";i:300;s:6:"height";i:224;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:44:"demo-tofu-katsu-edited-scaled-1-1024x766.jpg";s:5:"width";i:1024;s:6:"height";i:766;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:43:"demo-tofu-katsu-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:43:"demo-tofu-katsu-edited-scaled-1-768x575.jpg";s:5:"width";i:768;s:6:"height";i:575;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:45:"demo-tofu-katsu-edited-scaled-1-1536x1149.jpg";s:5:"width";i:1536;s:6:"height";i:1149;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:45:"demo-tofu-katsu-edited-scaled-1-2048x1532.jpg";s:5:"width";i:2048;s:6:"height";i:1532;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-sashimi-deluxe]]></title>
|
||||
<link>https://ocdi.com/demo-sashimi-deluxe-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:24:06 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-sashimi-deluxe-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2422</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:24:06]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:24:06]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:24:06]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:24:06]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-sashimi-deluxe-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-sashimi-deluxe-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-sashimi-deluxe-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1922;s:4:"file";s:47:"2021/03/demo-sashimi-deluxe-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:47:"demo-sashimi-deluxe-edited-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:48:"demo-sashimi-deluxe-edited-scaled-1-1024x769.jpg";s:5:"width";i:1024;s:6:"height";i:769;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:47:"demo-sashimi-deluxe-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:47:"demo-sashimi-deluxe-edited-scaled-1-768x577.jpg";s:5:"width";i:768;s:6:"height";i:577;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:49:"demo-sashimi-deluxe-edited-scaled-1-1536x1153.jpg";s:5:"width";i:1536;s:6:"height";i:1153;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:49:"demo-sashimi-deluxe-edited-scaled-1-2048x1538.jpg";s:5:"width";i:2048;s:6:"height";i:1538;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-eel-bento]]></title>
|
||||
<link>https://ocdi.com/demo-eel-bento-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:24:40 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-eel-bento-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2424</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:24:40]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:24:40]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:24:40]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:24:40]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-eel-bento-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-eel-bento-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-eel-bento-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1923;s:4:"file";s:42:"2021/03/demo-eel-bento-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:42:"demo-eel-bento-edited-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:43:"demo-eel-bento-edited-scaled-1-1024x769.jpg";s:5:"width";i:1024;s:6:"height";i:769;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:42:"demo-eel-bento-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:42:"demo-eel-bento-edited-scaled-1-768x577.jpg";s:5:"width";i:768;s:6:"height";i:577;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:44:"demo-eel-bento-edited-scaled-1-1536x1154.jpg";s:5:"width";i:1536;s:6:"height";i:1154;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:44:"demo-eel-bento-edited-scaled-1-2048x1538.jpg";s:5:"width";i:2048;s:6:"height";i:1538;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-chocolate]]></title>
|
||||
<link>https://ocdi.com/demo-chocolate-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:25:03 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-chocolate-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2425</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:25:03]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:25:03]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:25:03]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:25:03]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-chocolate-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-chocolate-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-chocolate-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1921;s:4:"file";s:42:"2021/03/demo-chocolate-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:42:"demo-chocolate-edited-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:43:"demo-chocolate-edited-scaled-1-1024x768.jpg";s:5:"width";i:1024;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:42:"demo-chocolate-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:42:"demo-chocolate-edited-scaled-1-768x576.jpg";s:5:"width";i:768;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:44:"demo-chocolate-edited-scaled-1-1536x1153.jpg";s:5:"width";i:1536;s:6:"height";i:1153;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:44:"demo-chocolate-edited-scaled-1-2048x1537.jpg";s:5:"width";i:2048;s:6:"height";i:1537;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[demo-cream-puff]]></title>
|
||||
<link>https://ocdi.com/demo-cream-puff-2/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 11:25:20 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/demo-cream-puff-edited.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2426</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-09 06:25:20]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 11:25:20]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-09 06:25:20]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-09 11:25:20]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-cream-puff-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/demo-cream-puff-edited-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/demo-cream-puff-edited-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1915;s:4:"file";s:43:"2021/03/demo-cream-puff-edited-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:43:"demo-cream-puff-edited-scaled-1-300x224.jpg";s:5:"width";i:300;s:6:"height";i:224;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:44:"demo-cream-puff-edited-scaled-1-1024x766.jpg";s:5:"width";i:1024;s:6:"height";i:766;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:43:"demo-cream-puff-edited-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:43:"demo-cream-puff-edited-scaled-1-768x575.jpg";s:5:"width";i:768;s:6:"height";i:575;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:45:"demo-cream-puff-edited-scaled-1-1536x1149.jpg";s:5:"width";i:1536;s:6:"height";i:1149;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:45:"demo-cream-puff-edited-scaled-1-2048x1532.jpg";s:5:"width";i:2048;s:6:"height";i:1532;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,254 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Portfolio]]></title>
|
||||
<link>https://ocdi.com/portfolio/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 14:19:21 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:paragraph -->
|
||||
<p>We've helped thousands of businesses to thrive and grow. Read about our awesome customers to find out exactly how we helped them.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link" rel="#gusto">Gusto Burgers</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link" rel="#aurora">Aurora Flowers</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:image {"align":"center","id":2109,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure id="gusto" class="wp-block-image aligncenter size-large"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-photo-2-1024x714.png" alt="" class="wp-image-2109"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"25%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:25%"><!-- wp:image {"id":2106,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-logo-2.png" alt="" class="wp-image-2106"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":""} -->
|
||||
<div class="wp-block-column"><!-- wp:paragraph -->
|
||||
<p>Acme helped Gusto Burgers to pivot rapidly to online ordering and take-away during 2020. Our team worked with the brand to add interactive menus to its website covering its entire menu. We also developed a branded app to support speedy ordering, collection and delivery. </p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:buttons -->
|
||||
<div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"className":"is-style-outline"} -->
|
||||
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link no-border-radius" rel="#">Read the case study</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:separator {"className":"is-style-dots"} -->
|
||||
<hr class="wp-block-separator is-style-dots"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:image {"id":2110,"sizeSlug":"large","linkDestination":"none","className":"is-style-default"} -->
|
||||
<figure class="wp-block-image size-large is-style-default" id="aurora"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-photo-3-1024x757.png" alt="" class="wp-image-2110"/></figure>
|
||||
<!-- /wp:image -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33.33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33.33%"><!-- wp:image {"id":2107,"sizeSlug":"large","linkDestination":"none"} -->
|
||||
<figure class="wp-block-image size-large"><img src="https://ocdi.com/wp-content/uploads/2021/02/logo-demo-3.png" alt="" class="wp-image-2107"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"66.66%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:66.66%"><!-- wp:paragraph -->
|
||||
<p>Our marketing team helped Aurora Flowers to develop a coherent social media strategy, focusing on visual channels like Instagram and Pinterest. We improved post engagement and integrated its online store, resulting in a 10% increase in sales over the Christmas season.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:buttons -->
|
||||
<div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"className":"is-style-outline"} -->
|
||||
<div class="wp-block-button is-style-outline"><a class="wp-block-button__link no-border-radius" rel="#">Read the case study</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-09 09:19:21]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 14:19:21]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:48:29]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:48:29]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[portfolio]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-photo-2]]></title>
|
||||
<link>https://ocdi.com/portfolio/demo-photo-2/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 13:13:50 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-photo-2.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2109</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 08:13:50]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 13:13:50]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-photo-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2103</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-photo-2.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-photo-2.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1310;s:6:"height";i:914;s:4:"file";s:24:"2021/02/demo-photo-2.png";s:5:"sizes";a:4:{s:6:"medium";a:4:{s:4:"file";s:24:"demo-photo-2-300x209.png";s:5:"width";i:300;s:6:"height";i:209;s:9:"mime-type";s:9:"image/png";}s:5:"large";a:4:{s:4:"file";s:25:"demo-photo-2-1024x714.png";s:5:"width";i:1024;s:6:"height";i:714;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:24:"demo-photo-2-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:24:"demo-photo-2-768x536.png";s:5:"width";i:768;s:6:"height";i:536;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-photo-3]]></title>
|
||||
<link>https://ocdi.com/portfolio/demo-photo-3/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 13:21:32 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-photo-3.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2110</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 08:21:32]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 13:21:32]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-photo-3]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2103</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-photo-3.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-photo-3.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1432;s:6:"height";i:1058;s:4:"file";s:24:"2021/02/demo-photo-3.png";s:5:"sizes";a:4:{s:6:"medium";a:4:{s:4:"file";s:24:"demo-photo-3-300x222.png";s:5:"width";i:300;s:6:"height";i:222;s:9:"mime-type";s:9:"image/png";}s:5:"large";a:4:{s:4:"file";s:25:"demo-photo-3-1024x757.png";s:5:"width";i:1024;s:6:"height";i:757;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:24:"demo-photo-3-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:24:"demo-photo-3-768x567.png";s:5:"width";i:768;s:6:"height";i:567;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-logo-2]]></title>
|
||||
<link>https://ocdi.com/portfolio/demo-logo-2/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 12:11:17 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-logo-2.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2106</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 07:11:17]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 12:11:17]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-logo-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2103</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-logo-2.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-logo-2.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1000;s:6:"height";i:1000;s:4:"file";s:23:"2021/02/demo-logo-2.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:23:"demo-logo-2-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:23:"demo-logo-2-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:23:"demo-logo-2-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[logo-demo-3]]></title>
|
||||
<link>https://ocdi.com/portfolio/logo-demo-3/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 12:17:24 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/logo-demo-3.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2107</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 07:17:24]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 12:17:24]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:54]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:54]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[logo-demo-3]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2103</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/logo-demo-3.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/logo-demo-3.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1000;s:6:"height";i:1000;s:4:"file";s:23:"2021/02/logo-demo-3.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:23:"logo-demo-3-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:23:"logo-demo-3-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:23:"logo-demo-3-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Services]]></title>
|
||||
<link>https://ocdi.com/services/</link>
|
||||
<pubDate>Tue, 09 Mar 2021 14:11:37 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:paragraph -->
|
||||
<p>Choose between three monthly plans. </p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:columns {"backgroundColor":"gray"} -->
|
||||
<div class="wp-block-columns has-gray-background-color has-background"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-basic">Basic</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">$20/mo</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>This service is awesome if you're just starting out!</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:list -->
|
||||
<ul><li>Service</li><li>Service</li><li>Service</li></ul>
|
||||
<!-- /wp:list --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-agency">Agency</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">$50/mo</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>This is the best choice for small businesses who want to see rapid results.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:list -->
|
||||
<ul><li>Service</li><li>Service</li><li>Service</li><li>Service</li><li>Service</li></ul>
|
||||
<!-- /wp:list --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-pro">Pro</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">$30/mo</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>Want the whole package? We got it covered.</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:list -->
|
||||
<ul><li>Service</li><li>Service</li><li>Service</li><li>Service</li></ul>
|
||||
<!-- /wp:list --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Learn More</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Learn More</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:buttons {"contentJustification":"center"} -->
|
||||
<div class="wp-block-buttons is-content-justification-center"><!-- wp:button -->
|
||||
<div class="wp-block-button"><a class="wp-block-button__link">Learn More</a></div>
|
||||
<!-- /wp:button --></div>
|
||||
<!-- /wp:buttons --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:heading -->
|
||||
<h2 id="h-our-guarantee">Our Guarantee</h2>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:paragraph -->
|
||||
<p>We offer a full money-back guarantee on all plans if you cancel within the first 30-days. Not happy with your plan? Switch it any time!</p>
|
||||
<!-- /wp:paragraph -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-09 09:11:37]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-09 14:11:37]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-23 08:46:09]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-23 08:46:09]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[services]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,450 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Shop]]></title>
|
||||
<link>https://ocdi.com/shop/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 23:02:56 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:cover {"url":"https://ocdi.com/wp-content/uploads/2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1.jpg","id":2332,"dimRatio":15,"focalPoint":{"x":"0.40","y":"0.26"},"minHeight":375,"minHeightUnit":"px","contentPosition":"center center","align":"wide","className":"is-position-center-center"} -->
|
||||
<div class="wp-block-cover alignwide has-background-dim-20 has-background-dim is-position-center-center" style="min-height:375px"><img class="wp-block-cover__image-background wp-image-2332" alt="" src="https://ocdi.com/wp-content/uploads/2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1.jpg" style="object-position:40% 26%" data-object-fit="cover" data-object-position="40% 26%"/><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">RESOURCES THAT WILL HELP YOU</p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center","placeholder":"Write title…","style":{"typography":{"fontSize":74,"lineHeight":"1.1"},"color":{"text":"#fffffa"}}} -->
|
||||
<p class="has-text-align-center has-text-color" style="color:#fffffa;font-size:74px;line-height:1.1"><strong>Make Your Life Easier</strong></p>
|
||||
<!-- /wp:paragraph -->
|
||||
|
||||
<!-- wp:paragraph {"align":"center"} -->
|
||||
<p class="has-text-align-center">Check out our latest tools, products, and services to help you do the things you need to do.</p>
|
||||
<!-- /wp:paragraph --></div></div>
|
||||
<!-- /wp:cover -->
|
||||
|
||||
<!-- wp:spacer -->
|
||||
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->
|
||||
|
||||
<!-- wp:separator -->
|
||||
<hr class="wp-block-separator"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:categories {"displayAsDropdown":true,"showHierarchy":true} /-->
|
||||
|
||||
<!-- wp:gallery {"ids":[2352],"linkTo":"none"} -->
|
||||
<figure class="wp-block-gallery columns-1 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img src="https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-1024x684.jpg" alt="" data-id="2352" data-full-url="https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg" data-link="https://ocdi.com/shop/bench-accounting-c3v88boorom-unsplash-1/" class="wp-image-2352"/><figcaption class="blocks-gallery-item__caption">FREEBIES</figcaption></figure></li></ul></figure>
|
||||
<!-- /wp:gallery -->
|
||||
|
||||
<!-- wp:gallery {"ids":[2347,2346,2344],"linkTo":"none"} -->
|
||||
<figure class="wp-block-gallery columns-3 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img src="https://ocdi.com/wp-content/uploads/2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-1024x683.jpg" alt="" data-id="2347" data-full-url="https://ocdi.com/wp-content/uploads/2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1.jpg" data-link="https://ocdi.com/shop/alexandra-tran-vflzpwbuwee-unsplash-1/" class="wp-image-2347"/><figcaption class="blocks-gallery-item__caption">PRODUCTS</figcaption></figure></li><li class="blocks-gallery-item"><figure><img src="https://ocdi.com/wp-content/uploads/2021/03/spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-1024x768.jpg" alt="" data-id="2346" data-full-url="https://ocdi.com/wp-content/uploads/2021/03/spencer-DXobXpIa9_4-unsplash-2-1-scaled-1.jpg" data-link="https://ocdi.com/shop/spencer-dxobxpia9_4-unsplash-2-1/" class="wp-image-2346"/><figcaption class="blocks-gallery-item__caption">COURSES</figcaption></figure></li><li class="blocks-gallery-item"><figure><img src="https://ocdi.com/wp-content/uploads/2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-1024x686.jpg" alt="" data-id="2344" data-full-url="https://ocdi.com/wp-content/uploads/2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1.jpg" data-link="https://ocdi.com/shop/alejandro-escamilla-bbqlhcpvuqa-unsplash-2/" class="wp-image-2344"/><figcaption class="blocks-gallery-item__caption">CONSULTING</figcaption></figure></li></ul></figure>
|
||||
<!-- /wp:gallery -->
|
||||
|
||||
<!-- wp:spacer {"height":27} -->
|
||||
<div style="height:27px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->
|
||||
|
||||
<!-- wp:separator -->
|
||||
<hr class="wp-block-separator"/>
|
||||
<!-- /wp:separator -->
|
||||
|
||||
<!-- wp:cover {"url":"https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg","id":2352,"isRepeated":true,"dimRatio":15,"focalPoint":{"x":"0.05","y":"0.71"},"minHeight":375,"minHeightUnit":"px","contentPosition":"center center","align":"wide","className":"is-position-center-center"} -->
|
||||
<div class="wp-block-cover alignwide has-background-dim-20 has-background-dim is-repeated is-position-center-center" style="background-image:url(https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg);min-height:375px"><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"center","placeholder":"Write title…","style":{"typography":{"fontSize":74,"lineHeight":"1.1"},"color":{"text":"#fffffa"}}} -->
|
||||
<p class="has-text-align-center has-text-color" style="color:#fffffa;font-size:74px;line-height:1.1"><strong>The Reviews Are In</strong></p>
|
||||
<!-- /wp:paragraph --></div></div>
|
||||
<!-- /wp:cover -->
|
||||
|
||||
<!-- wp:spacer {"height":46} -->
|
||||
<div style="height:46px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->
|
||||
|
||||
<!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-real-customers-real-results">Real Customers. Real Results.</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"align":"center","id":2354,"sizeSlug":"thumbnail","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-thumbnail"><img src="https://ocdi.com/wp-content/uploads/2021/03/aryo-lahap-ZVc4Zg4TY8s-unsplash-1-150x150.jpg" alt="" class="wp-image-2354"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"align":"center","id":2355,"sizeSlug":"thumbnail","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-thumbnail"><img src="https://ocdi.com/wp-content/uploads/2021/03/the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-150x150.jpg" alt="" class="wp-image-2355"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:image {"align":"center","id":2356,"sizeSlug":"thumbnail","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-thumbnail"><img src="https://ocdi.com/wp-content/uploads/2021/03/meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-150x150.jpg" alt="" class="wp-image-2356"/></figure></div>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-seriously-magic">"Seriously magic."</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:quote -->
|
||||
<blockquote class="wp-block-quote"><p><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."</strong></p><cite><em>-Marcus Tran</em></cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-my-favorite-tool">"My favorite tool!</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:quote -->
|
||||
<blockquote class="wp-block-quote"><p><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."</strong></p><cite><em>-Sarah Jackson</em></cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:heading {"textAlign":"center","level":3} -->
|
||||
<h3 class="has-text-align-center" id="h-game-changer">"Game-changer."</h3>
|
||||
<!-- /wp:heading -->
|
||||
|
||||
<!-- wp:quote -->
|
||||
<blockquote class="wp-block-quote"><p><strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."</strong></p><cite><em>-Susan Hartley</em></cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:heading -->
|
||||
<h2 id="h-"></h2>
|
||||
<!-- /wp:heading -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-03-05 18:02:56]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 23:02:56]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:55:50]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:55:50]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[shop]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[domenico-loia-hGV2TfOh0ns-unsplash-1-1]]></title>
|
||||
<link>https://ocdi.com/shop/domenico-loia-hgv2tfoh0ns-unsplash-1-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 18:30:02 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2332</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 13:30:02]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 18:30:02]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:57]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:57]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[domenico-loia-hgv2tfoh0ns-unsplash-1-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1707;s:4:"file";s:59:"2021/03/domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:59:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:60:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-1024x683.jpg";s:5:"width";i:1024;s:6:"height";i:683;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:59:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:59:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-768x512.jpg";s:5:"width";i:768;s:6:"height";i:512;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:61:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-1536x1024.jpg";s:5:"width";i:1536;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:61:"domenico-loia-hGV2TfOh0ns-unsplash-1-1-scaled-1-2048x1366.jpg";s:5:"width";i:2048;s:6:"height";i:1366;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[bench-accounting-C3V88BOoRoM-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/shop/bench-accounting-c3v88boorom-unsplash-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 19:00:32 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2352</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 14:00:32]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 19:00:32]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[bench-accounting-c3v88boorom-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1710;s:4:"file";s:60:"2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:61:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-1024x684.jpg";s:5:"width";i:1024;s:6:"height";i:684;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-768x513.jpg";s:5:"width";i:768;s:6:"height";i:513;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:62:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-1536x1026.jpg";s:5:"width";i:1536;s:6:"height";i:1026;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:62:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-2048x1368.jpg";s:5:"width";i:2048;s:6:"height";i:1368;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[alexandra-tran-vfLzpWbuweE-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/shop/alexandra-tran-vflzpwbuwee-unsplash-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 18:50:58 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[PRODUCTS]]></excerpt:encoded>
|
||||
<wp:post_id>2347</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 13:50:58]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 18:50:58]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:53:47]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:53:47]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[alexandra-tran-vflzpwbuwee-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1707;s:4:"file";s:58:"2021/03/alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:58:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:59:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-1024x683.jpg";s:5:"width";i:1024;s:6:"height";i:683;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:58:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:58:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-768x512.jpg";s:5:"width";i:768;s:6:"height";i:512;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:60:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-1536x1024.jpg";s:5:"width";i:1536;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:60:"alexandra-tran-vfLzpWbuweE-unsplash-1-scaled-1-2048x1366.jpg";s:5:"width";i:2048;s:6:"height";i:1366;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[spencer-DXobXpIa9_4-unsplash-2-1]]></title>
|
||||
<link>https://ocdi.com/shop/spencer-dxobxpia9_4-unsplash-2-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 18:49:26 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/spencer-DXobXpIa9_4-unsplash-2-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[COURSES]]></excerpt:encoded>
|
||||
<wp:post_id>2346</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 13:49:26]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 18:49:26]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:53:52]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:53:52]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[spencer-dxobxpia9_4-unsplash-2-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/spencer-DXobXpIa9_4-unsplash-2-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/spencer-DXobXpIa9_4-unsplash-2-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1920;s:4:"file";s:53:"2021/03/spencer-DXobXpIa9_4-unsplash-2-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:53:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-300x225.jpg";s:5:"width";i:300;s:6:"height";i:225;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:54:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-1024x768.jpg";s:5:"width";i:1024;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:53:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:53:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-768x576.jpg";s:5:"width";i:768;s:6:"height";i:576;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:55:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-1536x1152.jpg";s:5:"width";i:1536;s:6:"height";i:1152;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:55:"spencer-DXobXpIa9_4-unsplash-2-1-scaled-1-2048x1536.jpg";s:5:"width";i:2048;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[alejandro-escamilla-BbQLHCpVUqA-unsplash-2]]></title>
|
||||
<link>https://ocdi.com/shop/alejandro-escamilla-bbqlhcpvuqa-unsplash-2/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 18:48:12 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[CONSULTING]]></excerpt:encoded>
|
||||
<wp:post_id>2344</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 13:48:12]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 18:48:12]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-29 14:53:57]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-29 14:53:57]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[alejandro-escamilla-bbqlhcpvuqa-unsplash-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1715;s:4:"file";s:63:"2021/03/alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:63:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-300x201.jpg";s:5:"width";i:300;s:6:"height";i:201;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:64:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-1024x686.jpg";s:5:"width";i:1024;s:6:"height";i:686;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:63:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:63:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-768x515.jpg";s:5:"width";i:768;s:6:"height";i:515;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:65:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-1536x1029.jpg";s:5:"width";i:1536;s:6:"height";i:1029;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:65:"alejandro-escamilla-BbQLHCpVUqA-unsplash-2-scaled-1-2048x1372.jpg";s:5:"width";i:2048;s:6:"height";i:1372;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[bench-accounting-C3V88BOoRoM-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/shop/bench-accounting-c3v88boorom-unsplash-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 19:00:32 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2352</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 14:00:32]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 19:00:32]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[bench-accounting-c3v88boorom-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:1710;s:4:"file";s:60:"2021/03/bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-300x200.jpg";s:5:"width";i:300;s:6:"height";i:200;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:61:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-1024x684.jpg";s:5:"width";i:1024;s:6:"height";i:684;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:60:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-768x513.jpg";s:5:"width";i:768;s:6:"height";i:513;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:62:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-1536x1026.jpg";s:5:"width";i:1536;s:6:"height";i:1026;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:62:"bench-accounting-C3V88BOoRoM-unsplash-1-scaled-1-2048x1368.jpg";s:5:"width";i:2048;s:6:"height";i:1368;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[aryo-lahap-ZVc4Zg4TY8s-unsplash-1]]></title>
|
||||
<link>https://ocdi.com/shop/aryo-lahap-zvc4zg4ty8s-unsplash-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 19:15:55 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/aryo-lahap-ZVc4Zg4TY8s-unsplash-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2354</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 14:15:55]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 19:15:55]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[aryo-lahap-zvc4zg4ty8s-unsplash-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/aryo-lahap-ZVc4Zg4TY8s-unsplash-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/aryo-lahap-ZVc4Zg4TY8s-unsplash-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:1798;s:6:"height";i:1798;s:4:"file";s:45:"2021/03/aryo-lahap-ZVc4Zg4TY8s-unsplash-1.jpg";s:5:"sizes";a:5:{s:6:"medium";a:4:{s:4:"file";s:45:"aryo-lahap-ZVc4Zg4TY8s-unsplash-1-300x300.jpg";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:47:"aryo-lahap-ZVc4Zg4TY8s-unsplash-1-1024x1024.jpg";s:5:"width";i:1024;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:45:"aryo-lahap-ZVc4Zg4TY8s-unsplash-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:45:"aryo-lahap-ZVc4Zg4TY8s-unsplash-1-768x768.jpg";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:47:"aryo-lahap-ZVc4Zg4TY8s-unsplash-1-1536x1536.jpg";s:5:"width";i:1536;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"1";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[the-creative-exchange-UhpAf0ySwuk-unsplash-1-1]]></title>
|
||||
<link>https://ocdi.com/shop/the-creative-exchange-uhpaf0yswuk-unsplash-1-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 19:17:42 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/the-creative-exchange-UhpAf0ySwuk-unsplash-1-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2355</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 14:17:42]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 19:17:42]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[the-creative-exchange-uhpaf0yswuk-unsplash-1-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:2560;s:4:"file";s:67:"2021/03/the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:67:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-300x300.jpg";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:69:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-1024x1024.jpg";s:5:"width";i:1024;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:67:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:67:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-768x768.jpg";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:69:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-1536x1536.jpg";s:5:"width";i:1536;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:69:"the-creative-exchange-UhpAf0ySwuk-unsplash-1-1-scaled-1-2048x2048.jpg";s:5:"width";i:2048;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[meritt-thomas-aoQ4DYZLE_E-unsplash-1-1]]></title>
|
||||
<link>https://ocdi.com/shop/meritt-thomas-aoq4dyzle_e-unsplash-1-1/</link>
|
||||
<pubDate>Fri, 05 Mar 2021 19:17:54 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/03/meritt-thomas-aoQ4DYZLE_E-unsplash-1-1.jpg</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2356</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-03-05 14:17:54]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-03-05 19:17:54]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:58]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:58]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[meritt-thomas-aoq4dyzle_e-unsplash-1-1]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2330</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/03/meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1.jpg]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/03/meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1.jpg]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:2560;s:6:"height";i:2560;s:4:"file";s:59:"2021/03/meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1.jpg";s:5:"sizes";a:6:{s:6:"medium";a:4:{s:4:"file";s:59:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-300x300.jpg";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:10:"image/jpeg";}s:5:"large";a:4:{s:4:"file";s:61:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-1024x1024.jpg";s:5:"width";i:1024;s:6:"height";i:1024;s:9:"mime-type";s:10:"image/jpeg";}s:9:"thumbnail";a:4:{s:4:"file";s:59:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-150x150.jpg";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:10:"image/jpeg";}s:12:"medium_large";a:4:{s:4:"file";s:59:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-768x768.jpg";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:10:"image/jpeg";}s:9:"1536x1536";a:4:{s:4:"file";s:61:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-1536x1536.jpg";s:5:"width";i:1536;s:6:"height";i:1536;s:9:"mime-type";s:10:"image/jpeg";}s:9:"2048x2048";a:4:{s:4:"file";s:61:"meritt-thomas-aoQ4DYZLE_E-unsplash-1-1-scaled-1-2048x2048.jpg";s:5:"width";i:2048;s:6:"height";i:2048;s:9:"mime-type";s:10:"image/jpeg";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,229 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- generator="WordPress/5.7" created="2021-03-25 06:41" -->
|
||||
<rss version="2.0"
|
||||
xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:wp="http://wordpress.org/export/1.2/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>ocdi</title>
|
||||
<link>https://ocdi.com</link>
|
||||
<description>Just another WordPress site</description>
|
||||
<pubDate>Thu, 25 Mar 2021 06:41:21 +0000</pubDate>
|
||||
<language>en-US</language>
|
||||
<wp:wxr_version>1.2</wp:wxr_version>
|
||||
<wp:base_site_url>https://ocdi.com</wp:base_site_url>
|
||||
<wp:base_blog_url>https://ocdi.com</wp:base_blog_url>
|
||||
|
||||
<generator>https://wordpress.org/?v=5.7</generator>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[Testimonials]]></title>
|
||||
<link>https://ocdi.com/testimonials/</link>
|
||||
<pubDate>Fri, 26 Feb 2021 11:05:31 +0000</pubDate>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:quote {"className":"is-style-large"} -->
|
||||
<blockquote class="wp-block-quote is-style-large"><p>Acme Marketing provided the tools and strategies we needed to build PPC campaigns with great ROI.</p><cite>John Doe, ABC Corp</cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2120,"width":200,"height":200,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-resized is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man-3.png" alt="" class="wp-image-2120" width="200" height="200"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2126,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-woman-3.png" alt="" class="wp-image-2126"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:quote -->
|
||||
<blockquote class="wp-block-quote"><p>I wouldn't hesitate to recommend Acme for marketing support. Their team of experts have assisted us with everything from keyword research to getting our social media strategy on the right track.</p><cite>Jane Doe, XYZ Interiors</cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:quote {"className":"is-style-large"} -->
|
||||
<blockquote class="wp-block-quote is-style-large"><p>Our team is free to work on the tasks they do best.</p><cite>Vasu Sameer, AK Consulting</cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2127,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-man-4.png" alt="" class="wp-image-2127"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column {"width":"33%"} -->
|
||||
<div class="wp-block-column" style="flex-basis:33%"><!-- wp:image {"id":2128,"sizeSlug":"large","linkDestination":"none","className":"is-style-rounded"} -->
|
||||
<figure class="wp-block-image size-large is-style-rounded"><img src="https://ocdi.com/wp-content/uploads/2021/02/demo-woman-2.png" alt="" class="wp-image-2128"/></figure>
|
||||
<!-- /wp:image --></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column"><!-- wp:quote -->
|
||||
<blockquote class="wp-block-quote"><p>From day one, the team at Acme become partners and friends. They immediately got to know the business are driven to help small businesses succeed.</p><cite>Amanda Smith, Awesome Software</cite></blockquote>
|
||||
<!-- /wp:quote --></div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_date><![CDATA[2021-02-26 06:05:31]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-26 11:05:31]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-23 08:56:22]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-23 08:56:22]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[closed]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[testimonials]]></wp:post_name>
|
||||
<wp:status><![CDATA[publish]]></wp:status>
|
||||
<wp:post_parent>0</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[page]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title><![CDATA[demo-man-3]]></title>
|
||||
<link>https://ocdi.com/testimonials/demo-man-3/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 14:36:42 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-man-3.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2120</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 09:36:42]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 14:36:42]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:55]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:55]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-man-3]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2119</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-man-3.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-man-3.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:22:"2021/02/demo-man-3.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:22:"demo-man-3-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:22:"demo-man-3-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:22:"demo-man-3-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[demo-woman-3]]></title>
|
||||
<link>https://ocdi.com/testimonials/demo-woman-3/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 15:12:59 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-woman-3.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2126</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 10:12:59]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 15:12:59]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:55]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:55]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-woman-3]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2119</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-woman-3.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-woman-3.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:24:"2021/02/demo-woman-3.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:24:"demo-woman-3-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:24:"demo-woman-3-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:24:"demo-woman-3-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[demo-man-4]]></title>
|
||||
<link>https://ocdi.com/testimonials/demo-man-4/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 15:15:38 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-man-4.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2127</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 10:15:38]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 15:15:38]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:55]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:55]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-man-4]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2119</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-man-4.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-man-4.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:22:"2021/02/demo-man-4.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:22:"demo-man-4-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:22:"demo-man-4-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:22:"demo-man-4-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
<item>
|
||||
<title><![CDATA[demo-woman-2]]></title>
|
||||
<link>https://ocdi.com/testimonials/demo-woman-2/</link>
|
||||
<pubDate>Tue, 23 Feb 2021 15:20:28 +0000</pubDate>
|
||||
<guid isPermaLink="false">https://ocdi.com/wp-content/uploads/2021/02/demo-woman-2.png</guid>
|
||||
<description></description>
|
||||
<content:encoded><![CDATA[]]></content:encoded>
|
||||
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
|
||||
<wp:post_id>2128</wp:post_id>
|
||||
<wp:post_date><![CDATA[2021-02-23 10:20:28]]></wp:post_date>
|
||||
<wp:post_date_gmt><![CDATA[2021-02-23 15:20:28]]></wp:post_date_gmt>
|
||||
<wp:post_modified><![CDATA[2021-03-22 15:36:55]]></wp:post_modified>
|
||||
<wp:post_modified_gmt><![CDATA[2021-03-22 15:36:55]]></wp:post_modified_gmt>
|
||||
<wp:comment_status><![CDATA[open]]></wp:comment_status>
|
||||
<wp:ping_status><![CDATA[closed]]></wp:ping_status>
|
||||
<wp:post_name><![CDATA[demo-woman-2]]></wp:post_name>
|
||||
<wp:status><![CDATA[inherit]]></wp:status>
|
||||
<wp:post_parent>2119</wp:post_parent>
|
||||
<wp:menu_order>0</wp:menu_order>
|
||||
<wp:post_type><![CDATA[attachment]]></wp:post_type>
|
||||
<wp:post_password><![CDATA[]]></wp:post_password>
|
||||
<wp:is_sticky>0</wp:is_sticky>
|
||||
<wp:attachment_url><![CDATA[https://ocdi.com/wp-content/uploads/2021/02/demo-woman-2.png]]></wp:attachment_url>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attached_file]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[2021/02/demo-woman-2.png]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
<wp:postmeta>
|
||||
<wp:meta_key><![CDATA[_wp_attachment_metadata]]></wp:meta_key>
|
||||
<wp:meta_value><![CDATA[a:5:{s:5:"width";i:800;s:6:"height";i:800;s:4:"file";s:24:"2021/02/demo-woman-2.png";s:5:"sizes";a:3:{s:6:"medium";a:4:{s:4:"file";s:24:"demo-woman-2-300x300.png";s:5:"width";i:300;s:6:"height";i:300;s:9:"mime-type";s:9:"image/png";}s:9:"thumbnail";a:4:{s:4:"file";s:24:"demo-woman-2-150x150.png";s:5:"width";i:150;s:6:"height";i:150;s:9:"mime-type";s:9:"image/png";}s:12:"medium_large";a:4:{s:4:"file";s:24:"demo-woman-2-768x768.png";s:5:"width";i:768;s:6:"height";i:768;s:9:"mime-type";s:9:"image/png";}}s:10:"image_meta";a:12:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";s:11:"orientation";s:1:"0";s:8:"keywords";a:0:{}}}]]></wp:meta_value>
|
||||
</wp:postmeta>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg width="124" height="124" viewBox="0 0 124 124" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M62 0C27.75 0 0 27.75 0 62C0 96.25 27.75 124 62 124C96.25 124 124 96.25 124 62C124 27.75 96.25 0 62 0ZM116 62C116 91.75 91.75 116 62 116C32.25 116 8 92 8 62C8 32.5 32 8 62 8C91.5 8 116 32.25 116 62Z" fill="#DB3232"/>
|
||||
<path d="M73.7413 61.9128L92.5639 43.2645L92.5705 43.258C94.4765 41.3519 94.4765 38.0231 92.5705 36.117L87.883 31.4295C85.9769 29.5235 82.6481 29.5235 80.742 31.4295L80.742 31.4295L80.7355 31.4361L62.0872 50.2587L43.258 31.4295C41.3519 29.5235 38.0231 29.5235 36.117 31.4295L31.4295 36.117C29.5235 38.0231 29.5235 41.3519 31.4295 43.258L31.4295 43.258L31.4361 43.2645L50.2587 61.9128L31.4295 80.742C29.5235 82.6481 29.5235 85.9769 31.4295 87.883L36.117 92.5705C38.0231 94.4765 41.3519 94.4765 43.258 92.5705L62.0872 73.7413L80.7355 92.5639L80.742 92.5705C82.6481 94.4765 85.9769 94.4765 87.883 92.5705L92.5705 87.883C94.4765 85.9769 94.4765 82.6481 92.5705 80.742L73.7413 61.9128Z" fill="#DB3232" stroke="white" stroke-width="4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="55" height="52" viewBox="0 0 55 52" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M54.125 5.375C54.2083 5.125 54.25 4.91667 54.25 4.75C54.3333 4.08333 54.3333 3.5 54.25 3C54.0833 2.25 53.7083 1.625 53.125 1.125C52.4583 0.375 51.625 0.0416667 50.625 0.125C50.0417 0.125 49.5833 0.166667 49.25 0.25C48.3333 0.75 46.375 1.95833 43.375 3.875C39.7083 6.20833 36.375 8.5 33.375 10.75C29.4583 13.6667 26.5833 16.125 24.75 18.125C23.75 19.2083 22.7917 20.75 21.875 22.75C20.9583 24.9167 20.375 26.9167 20.125 28.75C19.875 30.9167 20.2083 32.5 21.125 33.5C22.125 34.5 23.7083 34.9167 25.875 34.75C27.7917 34.5833 29.7917 34.0417 31.875 33.125C34.0417 32.2083 35.5833 31.2917 36.5 30.375C38.5 28.375 40.9583 25.375 43.875 21.375C46.125 18.2917 48.375 14.9167 50.625 11.25C52.5417 8.25 53.7083 6.29167 54.125 5.375ZM0 50.5C1.83333 49.3333 3.25 47.9167 4.25 46.25C4.83333 45.3333 5.45833 43.9167 6.125 42C6.625 40.5 7.08333 39.375 7.5 38.625C8.25 37.4583 9.20833 36.4583 10.375 35.625C11.875 34.5417 13.5417 34.0833 15.375 34.25C17.2083 34.3333 18.7917 35.0833 20.125 36.5C20.875 37.25 21.375 38.3333 21.625 39.75C21.875 41.1667 21.8333 42.625 21.5 44.125C21.25 45.5417 20.625 46.7083 19.625 47.625C17.2917 49.875 14.25 51.2083 10.5 51.625C7.16667 51.9583 3.66667 51.5833 0 50.5Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1 @@
|
||||
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="check" class="svg-inline--fa fa-check fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#ffffff" d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg>
|
||||
|
After Width: | Height: | Size: 499 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="53" height="53" viewBox="0 0 53 53" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.75 11H0.375V52.625H32.375V46.25H6.75V11ZM51.25 5.875L47.125 1.75C46.4583 1.08333 45.625 0.708333 44.625 0.625C43.625 0.541667 42.75 0.791667 42 1.375L38.75 4.625H10V43H38.75V23.75L51.625 11C52.2083 10.25 52.4583 9.375 52.375 8.375C52.2917 7.375 51.9167 6.54167 51.25 5.875ZM33 25.125L25 28L27.875 20L42 5.875L47.125 11L33 25.125Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 463 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="42" height="52" viewBox="0 0 42 52" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.75 42V0.375H41.75V42H9.75ZM6.5 45.25H32.125V51.625H0.125V10H6.5V45.25Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 204 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 1.25C11.6875 1.25 14.75 4.28125 14.75 8C14.75 11.75 11.7188 14.75 8 14.75C4.25 14.75 1.25 11.75 1.25 8C1.25 4.28125 4.25 1.25 8 1.25ZM8 0.25C3.71875 0.25 0.25 3.75 0.25 8C0.25 12.2812 3.71875 15.75 8 15.75C12.25 15.75 15.75 12.2812 15.75 8C15.75 3.75 12.25 0.25 8 0.25ZM6.875 11C6.65625 11 6.5 11.1875 6.5 11.375V11.625C6.5 11.8438 6.65625 12 6.875 12H9.125C9.3125 12 9.5 11.8438 9.5 11.625V11.375C9.5 11.1875 9.3125 11 9.125 11H8.75V6.625C8.75 6.4375 8.5625 6.25 8.375 6.25H6.875C6.65625 6.25 6.5 6.4375 6.5 6.625V6.875C6.5 7.09375 6.65625 7.25 6.875 7.25H7.25V11H6.875ZM8 3.5C7.4375 3.5 7 3.96875 7 4.5C7 5.0625 7.4375 5.5 8 5.5C8.53125 5.5 9 5.0625 9 4.5C9 3.96875 8.53125 3.5 8 3.5Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 820 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="53" height="52" viewBox="0 0 53 52" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0.875 0.375H16.875V35.625H0.875V0.375ZM20.125 0.375H36.125V16.375H20.125V0.375ZM39.25 0.375H52.125V51.625H39.25V0.375ZM20.125 19.625H36.125V35.625H20.125V19.625ZM0.875 38.75H36.125V51.625H0.875V38.75Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 332 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="14" height="17" viewBox="0 0 14 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.9375 7.375H11.7812V5.90625C11.7812 3.36058 9.67067 1.25 7.125 1.25C4.54985 1.25 2.46875 3.36272 2.46875 5.90625V7.375H2.3125C1.29132 7.375 0.5 8.20723 0.5 9.1875V14.4375C0.5 15.4519 1.29808 16.25 2.3125 16.25H11.9375C12.9178 16.25 13.75 15.4587 13.75 14.4375V9.1875C13.75 8.20042 12.9246 7.375 11.9375 7.375ZM5.65625 7.375V5.90625C5.65625 5.11146 6.31189 4.4375 7.125 4.4375C7.91526 4.4375 8.59375 5.11599 8.59375 5.90625V7.375H5.65625Z" fill="#23282D" stroke="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 586 B |
@@ -0,0 +1 @@
|
||||
<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="long-arrow-alt-left" class="svg-inline--fa fa-long-arrow-alt-left fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="#0071A1" d="M107.515 150.971L8.485 250c-4.686 4.686-4.686 12.284 0 16.971L107.515 366c7.56 7.56 20.485 2.206 20.485-8.485v-71.03h308c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12H128v-71.03c0-10.69-12.926-16.044-20.485-8.484z"></path></svg>
|
||||
|
After Width: | Height: | Size: 470 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="65" height="64" viewBox="0 0 65 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M44 16.375L34.125 26.25L39.875 32L49.75 22.125C50.25 21.625 50.4167 20.9167 50.25 20C50.0833 19 49.5833 18.125 48.75 17.375C48 16.5417 47.1667 16.0417 46.25 15.875C45.4167 15.7083 44.6667 15.875 44 16.375ZM45 1C44.0833 0.416667 38.5833 4.125 28.5 12.125C23.4167 16.125 18.4583 20.2083 13.625 24.375L10.625 22.625C8.375 21.375 6.45833 20.4167 4.875 19.75C2.625 18.75 1.29167 18.4583 0.875 18.875C0.208333 19.375 2.125 22.2083 6.625 27.375C8.875 29.9583 11.2083 32.4583 13.625 34.875L22.25 26.25C28.75 19.75 33.9583 14.375 37.875 10.125C43.2917 4.29167 45.6667 1.25 45 1ZM62.625 30.75C61.7917 29.9167 60.875 29.4167 59.875 29.25C58.9583 29.0833 58.25 29.25 57.75 29.75L47.875 39.625L53.625 45.5L63.5 35.25C64 34.9167 64.1667 34.2917 64 33.375C63.8333 32.375 63.375 31.5 62.625 30.75ZM25.125 27.5C24.125 28.5833 23.25 30.4583 22.5 33.125C21.9167 35.4583 21.625 37.625 21.625 39.625V51.875L17.75 55.625C16.8333 56.625 16.375 57.7917 16.375 59.125C16.375 60.375 16.8333 61.5 17.75 62.5C18.75 63.4167 19.875 63.875 21.125 63.875C22.375 63.875 23.5 63.375 24.5 62.375L28.375 58.5H40.5C42.5833 58.5 44.75 58.2083 47 57.625C49.5 56.9583 51.2917 56.0833 52.375 55L56.125 52.5L27.75 24L25.125 27.5Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M10 12.9688C9.375 12.9688 8.90625 13.4766 8.90625 14.0625C8.90625 14.6875 9.375 15.1562 10 15.1562C10.5859 15.1562 11.0938 14.6875 11.0938 14.0625C11.0938 13.4766 10.5859 12.9688 10 12.9688ZM10.2734 12.0312C10.5469 12.0312 10.7422 11.8359 10.7422 11.5625C10.7422 9.88281 13.7891 10 13.7891 7.38281C13.7891 5.39062 11.9922 4.21875 9.96094 4.21875C8.20312 4.21875 7.22656 4.92188 6.40625 5.97656C6.25 6.21094 6.28906 6.48438 6.52344 6.64062L7.03125 7.03125C7.22656 7.14844 7.5 7.10938 7.65625 6.91406C8.24219 6.17188 8.82812 5.78125 9.96094 5.78125C11.5234 5.78125 12.2266 6.60156 12.2266 7.38281C12.2266 9.0625 9.17969 8.82812 9.17969 11.5625C9.17969 11.8359 9.41406 12.0312 9.64844 12.0312H10.2734ZM10 1.25C14.6094 1.25 18.4375 5.03906 18.4375 9.6875C18.4375 14.375 14.6484 18.125 10 18.125C5.3125 18.125 1.5625 14.375 1.5625 9.6875C1.5625 5.03906 5.3125 1.25 10 1.25ZM10 0C4.64844 0 0.3125 4.375 0.3125 9.6875C0.3125 15.0391 4.64844 19.375 10 19.375C15.3125 19.375 19.6875 15.0391 19.6875 9.6875C19.6875 4.375 15.3125 0 10 0Z" fill="#666666"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg width="82" height="70" viewBox="0 0 82 70" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M44.5075 59H34.2891L31.6521 54.5103L37.8241 47.6337L44.5075 59ZM29.1743 54.2489L24.9119 59H13L24.3891 46.1106L29.1743 54.2489Z" fill="#999999"/>
|
||||
<path d="M30.584 52.6803L13.9551 24.4123H24.162L31.9139 37.5858L55.4194 11H68.0133L30.584 52.6803Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 374 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="11" height="10" viewBox="0 0 11 10" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.23262 0.344145L4.017 2.9408L1.26782 3.3508C0.781568 3.4289 0.594549 4.05366 0.949886 4.42461L2.91359 6.43556L2.44604 9.2665C2.37123 9.77412 2.89488 10.1646 3.32503 9.93031L5.77498 8.58317L8.20622 9.93031C8.63637 10.1646 9.16002 9.77412 9.08521 9.2665L8.61766 6.43556L10.5814 4.42461C10.9367 4.05366 10.7497 3.4289 10.2634 3.3508L7.53295 2.9408L6.29863 0.344145C6.09291 -0.104901 5.45704 -0.124425 5.23262 0.344145Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 546 B |
@@ -0,0 +1,3 @@
|
||||
<svg width="56" height="49" viewBox="0 0 56 49" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M55.25 45.25V3.625C55.25 2.70833 54.9167 1.95833 54.25 1.375C53.6667 0.708333 52.9583 0.375 52.125 0.375H4.125C3.20833 0.375 2.41667 0.708333 1.75 1.375C1.16667 1.95833 0.875 2.70833 0.875 3.625V45.25C0.875 46.0833 1.16667 46.8333 1.75 47.5C2.41667 48.0833 3.20833 48.375 4.125 48.375H52.125C52.9583 48.375 53.6667 48.0833 54.25 47.5C54.9167 46.8333 55.25 46.0833 55.25 45.25ZM7.25 6.75H48.875V19.625H7.25V6.75ZM10.5 10V16.375H20.125V10H10.5ZM23.25 10V16.375H32.875V10H23.25ZM36.125 10V16.375H45.75V10H36.125ZM8.875 26C9.375 26 9.75 26.1667 10 26.5C10.3333 26.75 10.5 27.125 10.5 27.625C10.5 28.0417 10.3333 28.4167 10 28.75C9.75 29.0833 9.375 29.25 8.875 29.25C8.45833 29.25 8.08333 29.0833 7.75 28.75C7.41667 28.4167 7.25 28.0417 7.25 27.625C7.25 27.125 7.41667 26.75 7.75 26.5C8.08333 26.1667 8.45833 26 8.875 26ZM13.75 26H26.5V29.25H13.75V26ZM32.875 26H48.875V42H32.875V26ZM8.875 32.375C9.375 32.375 9.75 32.5417 10 32.875C10.3333 33.2083 10.5 33.5833 10.5 34C10.5 34.4167 10.3333 34.7917 10 35.125C9.75 35.4583 9.375 35.625 8.875 35.625C8.45833 35.625 8.08333 35.4583 7.75 35.125C7.41667 34.7917 7.25 34.4167 7.25 34C7.25 33.5833 7.41667 33.2083 7.75 32.875C8.08333 32.5417 8.45833 32.375 8.875 32.375ZM13.75 32.375H26.5V35.625H13.75V32.375ZM36.125 32.375V38.75H45.75V32.375H36.125ZM8.875 38.75C9.375 38.75 9.75 38.9167 10 39.25C10.3333 39.5833 10.5 40 10.5 40.5C10.5 40.9167 10.3333 41.2917 10 41.625C9.75 41.875 9.375 42 8.875 42C8.45833 42 8.08333 41.875 7.75 41.625C7.41667 41.2917 7.25 40.9167 7.25 40.5C7.25 40 7.41667 39.5833 7.75 39.25C8.08333 38.9167 8.45833 38.75 8.875 38.75ZM13.75 38.75H26.5V42H13.75V38.75Z" fill="#999999"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,74 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="415" height="228" viewBox="0 0 415 228">
|
||||
<defs>
|
||||
<radialGradient id="radial-gradient" cx="0.5" cy="0.5" r="0.5" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#ddd"/>
|
||||
<stop offset="1" stop-color="#fff"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g id="process" transform="translate(-492 -434)">
|
||||
<g id="circles">
|
||||
<g id="Ellipse_9" data-name="Ellipse 9" transform="translate(574 527)" fill="#fff" stroke="#777" stroke-width="3" opacity="0.15">
|
||||
<circle cx="8" cy="8" r="8" stroke="none"/>
|
||||
<circle cx="8" cy="8" r="6.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.25;0" dur="1s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_13" data-name="Ellipse 13" transform="translate(895 567)" fill="#fff" stroke="#777" stroke-width="2" opacity="0.3">
|
||||
<circle cx="6" cy="6" r="6" stroke="none"/>
|
||||
<circle cx="6" cy="6" r="5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.6;0" dur="1.3s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_14" data-name="Ellipse 14" transform="translate(592 440)" fill="#fff" stroke="#777" stroke-width="2" opacity="0.15">
|
||||
<circle cx="6" cy="6" r="6" stroke="none"/>
|
||||
<circle cx="6" cy="6" r="5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.25;0" dur="1.6s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_10" data-name="Ellipse 10" transform="translate(845 460)" fill="#fff" stroke="#777" stroke-width="3" opacity="0.3">
|
||||
<circle cx="8" cy="8" r="8" stroke="none"/>
|
||||
<circle cx="8" cy="8" r="6.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.6;0" dur="1.9s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_11" data-name="Ellipse 11" transform="translate(824 618)" fill="#fff" stroke="#777" stroke-width="1" opacity="0.15">
|
||||
<circle cx="4" cy="4" r="4" stroke="none"/>
|
||||
<circle cx="4" cy="4" r="3.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.25;0" dur="2.2s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_16" data-name="Ellipse 16" transform="translate(492 517)" fill="#fff" stroke="#777" stroke-width="1" opacity="0.3">
|
||||
<circle cx="4" cy="4" r="4" stroke="none"/>
|
||||
<circle cx="4" cy="4" r="3.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.6;0" dur="2.5s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_15" data-name="Ellipse 15" transform="translate(719 434)" fill="#fff" stroke="#777" stroke-width="1" opacity="0.15">
|
||||
<circle cx="4" cy="4" r="4" stroke="none"/>
|
||||
<circle cx="4" cy="4" r="3.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.25;0" dur="2.8s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
<g id="Ellipse_12" data-name="Ellipse 12" transform="translate(521 452)" fill="#fff" stroke="#777" stroke-width="1" opacity="0.3">
|
||||
<circle cx="4" cy="4" r="4" stroke="none"/>
|
||||
<circle cx="4" cy="4" r="3.5" fill="none"/>
|
||||
<animate attributeName="opacity" values="0;0.6;0" dur="3.1s" repeatCount="indefinite"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="stars">
|
||||
<path id="Path_510" data-name="Path 510" d="M7.5-8.641,2.937-9.306.9-13.444a1,1,0,0,0-1.794,0L-2.938-9.306-7.5-8.641a1,1,0,0,0-.553,1.706l3.3,3.219L-5.534.831a1,1,0,0,0,1.45,1.053L0-.263,4.084,1.884A1,1,0,0,0,5.534.831L4.753-3.716l3.3-3.219A1,1,0,0,0,7.5-8.641Zm-4.359,4.4L3.884.084,0-1.956-3.884.084l.741-4.325L-6.288-7.3l4.344-.631L0-11.872,1.944-7.934,6.287-7.3Z" transform="matrix(0.966, 0.259, -0.259, 0.966, 826.447, 540.796)" fill="#777" opacity="0.3"><animate attributeName="opacity" values="0;0.6;0" dur="1.5s" repeatCount="indefinite"/></path>
|
||||
<path id="Path_509" data-name="Path 509" d="M7.5-8.641,2.937-9.306.9-13.444a1,1,0,0,0-1.794,0L-2.938-9.306-7.5-8.641a1,1,0,0,0-.553,1.706l3.3,3.219L-5.534.831a1,1,0,0,0,1.45,1.053L0-.263,4.084,1.884A1,1,0,0,0,5.534.831L4.753-3.716l3.3-3.219A1,1,0,0,0,7.5-8.641Zm-4.359,4.4L3.884.084,0-1.956-3.884.084l.741-4.325L-6.288-7.3l4.344-.631L0-11.872,1.944-7.934,6.287-7.3Z" transform="matrix(0.966, -0.259, 0.259, 0.966, 672.553, 471.795)" fill="#777" opacity="0.5"><animate attributeName="opacity" values="0;0.4;0" dur="1.7s" repeatCount="indefinite"/></path>
|
||||
<path id="Path_508" data-name="Path 508" d="M7.5-8.641,2.937-9.306.9-13.444a1,1,0,0,0-1.794,0L-2.938-9.306-7.5-8.641a1,1,0,0,0-.553,1.706l3.3,3.219L-5.534.831a1,1,0,0,0,1.45,1.053L0-.263,4.084,1.884A1,1,0,0,0,5.534.831L4.753-3.716l3.3-3.219A1,1,0,0,0,7.5-8.641Zm-4.359,4.4L3.884.084,0-1.956-3.884.084l.741-4.325L-6.288-7.3l4.344-.631L0-11.872,1.944-7.934,6.287-7.3Z" transform="matrix(0.966, -0.259, 0.259, 0.966, 557.553, 495.795)" fill="#777" opacity="0.1"><animate attributeName="opacity" values="0;0.25;0" dur="1.9s" repeatCount="indefinite"/></path>
|
||||
<path id="Path_507" data-name="Path 507" d="M4.689-5.4,1.836-5.816.561-8.4a.626.626,0,0,0-1.121,0L-1.836-5.816-4.689-5.4a.625.625,0,0,0-.346,1.066l2.064,2.012L-3.459.52a.625.625,0,0,0,.906.658L0-.164,2.553,1.178A.625.625,0,0,0,3.459.52L2.971-2.322,5.035-4.334A.625.625,0,0,0,4.689-5.4ZM1.965-2.65l.463,2.7L0-1.223-2.428.053l.463-2.7L-3.93-4.564l2.715-.395L0-7.42,1.215-4.959l2.715.395Z" transform="matrix(0.966, -0.259, 0.259, 0.966, 519.553, 584.795)" fill="#777" opacity="0.5"><animate attributeName="opacity" values="0;0.4;0" dur="2.1s" repeatCount="indefinite"/></path>
|
||||
<path id="Path_506" data-name="Path 506" d="M4.689-5.4,1.836-5.816.561-8.4a.626.626,0,0,0-1.121,0L-1.836-5.816-4.689-5.4a.625.625,0,0,0-.346,1.066l2.064,2.012L-3.459.52a.625.625,0,0,0,.906.658L0-.164,2.553,1.178A.625.625,0,0,0,3.459.52L2.971-2.322,5.035-4.334A.625.625,0,0,0,4.689-5.4ZM1.965-2.65l.463,2.7L0-1.223-2.428.053l.463-2.7L-3.93-4.564l2.715-.395L0-7.42,1.215-4.959l2.715.395Z" transform="matrix(0.966, 0.259, -0.259, 0.966, 778.482, 455.795)" fill="#777" opacity="0.3"><animate attributeName="opacity" values="0;0.6;0" dur="2.3s" repeatCount="indefinite"/></path>
|
||||
</g>
|
||||
<g id="shadow">
|
||||
<ellipse id="shadow-2" data-name="shadow" cx="80" cy="6" rx="100" ry="6" transform="translate(620 650)" fill="url(#radial-gradient)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="cog-bottom">
|
||||
<path id="cog-bottom" d="M269.481 194.85L268.778 193.753C267.625 193.837 266.5 193.837 265.347 193.753L264.644 194.878C263.013 197.466 259.834 198.647 256.909 197.719C253.028 196.509 250.441 195.244 247.263 192.628C244.731 190.547 244.113 186.919 245.744 184.078L246.447 182.869C245.8 181.912 245.238 180.928 244.731 179.887H242.172C238.909 179.887 236.153 177.581 235.534 174.375C234.803 170.522 234.775 167.569 235.563 163.547C236.153 160.369 238.966 158.062 242.2 158.062H244.731C245.238 157.022 245.8 156.037 246.447 155.081L245.716 153.816C244.084 151.003 244.703 147.431 247.178 145.294C250.159 142.734 252.719 141.272 256.6 139.95C259.638 138.909 262.984 140.147 264.616 142.931L265.347 144.169C266.5 144.084 267.625 144.084 268.778 144.169L269.509 142.931C271.141 140.147 274.488 138.909 277.553 139.978C281.294 141.244 283.825 142.678 286.975 145.35C289.45 147.459 290.041 151.031 288.409 153.844L287.678 155.081C288.325 156.037 288.888 157.022 289.394 158.062H290.828C294.091 158.062 296.847 160.369 297.466 163.575C298.197 167.428 298.225 170.381 297.438 174.403C296.847 177.581 294.034 179.887 290.8 179.887H289.394C288.888 180.928 288.325 181.912 287.678 182.869L288.381 184.078C290.041 186.947 289.366 190.575 286.834 192.656C283.825 195.131 281.238 196.425 277.272 197.691C274.319 198.591 271.113 197.437 269.481 194.85ZM272.913 185.119L275.894 190.266C277.778 189.478 279.522 188.466 281.153 187.228L278.172 182.081L279.972 179.972C281.322 178.369 282.391 176.569 283.066 174.6L283.994 171.984H289.928C290.181 169.987 290.181 167.934 289.928 165.937H283.994L283.066 163.322C282.363 161.353 281.322 159.553 279.972 157.95L278.172 155.841L281.153 150.694C279.55 149.456 277.778 148.444 275.894 147.656L272.913 152.803L270.184 152.297C268.131 151.903 266.022 151.903 263.969 152.297L261.241 152.803L258.259 147.656C256.375 148.444 254.631 149.456 253 150.694L255.981 155.841L254.181 157.95C252.831 159.553 251.763 161.353 251.088 163.322L250.159 165.937H244.225C243.972 167.934 243.972 169.987 244.225 171.984H250.159L251.088 174.6C251.791 176.569 252.831 178.369 254.181 179.972L255.981 182.081L253 187.228C254.603 188.466 256.375 189.478 258.259 190.266L261.241 185.119L263.969 185.625C266.022 186.019 268.131 186.019 270.184 185.625L272.913 185.119ZM275.5 168.75C275.5 163.772 271.478 159.75 266.5 159.75C261.522 159.75 257.5 163.772 257.5 168.75C257.5 173.728 261.522 177.75 266.5 177.75C271.478 177.75 275.5 173.728 275.5 168.75Z" fill="#A0A5AA"/>
|
||||
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="360 266.5 169" to="0 266.5 169" dur="2s" additive="sum" repeatCount="indefinite" />
|
||||
</g>
|
||||
<g id="cog-top">
|
||||
<path d="M269.481 109.237L268.778 108.141C267.625 108.225 266.5 108.225 265.347 108.141L264.644 109.266C263.013 111.853 259.834 113.034 256.909 112.106C253.028 110.897 250.441 109.631 247.263 107.016C244.731 104.934 244.113 101.306 245.744 98.4656L246.447 97.2562C245.8 96.3 245.238 95.3156 244.731 94.275H242.172C238.909 94.275 236.153 91.9687 235.534 88.7625C234.803 84.9094 234.775 81.9562 235.563 77.9344C236.153 74.7562 238.966 72.45 242.2 72.45H244.731C245.238 71.4094 245.8 70.425 246.447 69.4687L245.716 68.2031C244.084 65.3906 244.703 61.8187 247.178 59.6812C250.159 57.1219 252.719 55.6594 256.6 54.3375C259.638 53.2969 262.984 54.5344 264.616 57.3187L265.347 58.5562C266.5 58.4719 267.625 58.4719 268.778 58.5562L269.509 57.3187C271.141 54.5344 274.488 53.2969 277.553 54.3656C281.294 55.6312 283.825 57.0656 286.975 59.7375C289.45 61.8469 290.041 65.4187 288.409 68.2312L287.678 69.4687C288.325 70.425 288.888 71.4094 289.394 72.45H290.828C294.091 72.45 296.847 74.7562 297.466 77.9625C298.197 81.8156 298.225 84.7687 297.438 88.7906C296.847 91.9687 294.034 94.275 290.8 94.275H289.394C288.888 95.3156 288.325 96.3 287.678 97.2562L288.381 98.4656C290.041 101.334 289.366 104.962 286.834 107.044C283.825 109.519 281.238 110.812 277.272 112.078C274.319 113.006 271.113 111.853 269.481 109.237ZM272.913 99.5344L275.894 104.681C277.778 103.894 279.522 102.881 281.153 101.644L278.172 96.4969L279.972 94.3875C281.322 92.7844 282.391 90.9844 283.066 89.0156L283.994 86.4H289.928C290.181 84.4031 290.181 82.35 289.928 80.3531H283.994L283.066 77.7375C282.363 75.7687 281.322 73.9687 279.972 72.3656L278.172 70.2562L281.125 65.0812C279.522 63.8437 277.75 62.8312 275.866 62.0437L272.884 67.1906L270.156 66.6844C268.103 66.2906 265.994 66.2906 263.941 66.6844L261.213 67.1906L258.231 62.0437C256.375 62.8031 254.603 63.8437 253 65.0812L255.981 70.2281L254.181 72.3375C252.831 73.9406 251.763 75.7406 251.088 77.7094L250.159 80.325H244.225C243.972 82.3219 243.972 84.375 244.225 86.3719H250.159L251.088 88.9875C251.791 90.9562 252.831 92.7562 254.181 94.3594L255.981 96.4687L253 101.644C254.603 102.881 256.375 103.894 258.259 104.681L261.241 99.5344L263.969 100.041C266.022 100.434 268.131 100.434 270.184 100.041L272.913 99.5344ZM275.5 83.1656C275.5 78.1875 271.478 74.1656 266.5 74.1656C261.522 74.1656 257.5 78.1875 257.5 83.1656C257.5 88.1437 261.522 92.1656 266.5 92.1656C271.478 92.1656 275.5 88.1156 275.5 83.1656Z" fill="#00A0D2"/>
|
||||
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="360 266.5 83.5" to="0 266.5 83.5" dur="2s" additive="sum" repeatCount="indefinite" />
|
||||
</g>
|
||||
<g id="cog-left">
|
||||
<path d="M159.458 179.912V171.167C155.778 169.645 152.297 167.68 149.072 165.328L141.226 169.728C138.43 171.277 134.92 170.752 132.752 168.455C125.847 161.177 121.766 154.756 118.314 144.074C117.344 141.113 118.628 137.903 121.395 136.326L129.185 131.925C128.7 128.051 128.7 124.149 129.185 120.275L121.395 115.902C118.628 114.353 117.344 111.115 118.314 108.154C121.766 97.5271 125.79 91.1068 132.752 83.7733C134.92 81.4764 138.458 80.9506 141.226 82.5003L149.044 86.9004C152.268 84.5482 155.749 82.611 159.43 81.0613V72.3164C159.43 69.1893 161.655 66.5049 164.794 65.8408C174.695 63.6822 182.484 63.4332 193.812 65.8408C196.95 66.5049 199.204 69.217 199.204 72.3164V81.0613C202.885 82.5833 206.366 84.5482 209.59 86.8727L217.408 82.5003C220.205 80.9506 223.743 81.4764 225.911 83.7733C233.586 91.9647 237.752 99.2429 240.777 108.264C241.747 111.17 240.548 114.325 237.866 115.93L230.733 120.303C231.218 124.177 231.218 128.079 230.733 131.953L238.751 136.796C241.205 138.29 242.46 141.113 241.832 143.853C239.864 152.515 232.417 161.73 225.883 168.538C223.714 170.807 220.205 171.305 217.437 169.755L209.59 165.355C206.366 167.707 202.885 169.645 199.204 171.194V179.939C199.204 183.039 196.979 185.751 193.84 186.415C183.14 188.712 175.322 188.684 164.765 186.415C161.684 185.723 159.458 183.011 159.458 179.912ZM168.589 178.196C175.665 179.579 182.998 179.579 190.074 178.196V164.995L193.127 163.944C197.92 162.311 202.343 159.821 206.223 156.61L208.677 154.563L220.49 161.177C225.283 155.891 230.191 149.747 232.502 143.133L220.69 136.519L221.289 133.448C222.202 128.577 222.202 123.623 221.289 118.753L220.69 115.681L232.502 109.067C230.191 102.453 225.283 96.2818 220.49 91.0238L208.677 97.6378L206.223 95.59C202.343 92.3521 197.949 89.8892 193.127 88.2564L190.074 87.2048V74.0322C182.998 72.6485 175.665 72.6485 168.589 74.0322V87.2325L165.536 88.2841C160.742 89.9169 156.32 92.4075 152.439 95.6176L149.985 97.6655L138.173 91.0515C133.395 96.3189 129.74 102.451 127.416 109.095L139.228 115.709L138.629 118.78C137.716 123.651 137.716 128.605 138.629 133.475L139.228 136.547L127.416 143.161C129.727 149.775 133.379 155.946 138.173 161.204L149.985 154.59L152.439 156.638C156.32 159.876 160.714 162.339 165.536 163.972L168.589 165.023V178.196ZM179.545 149.055C166.506 149.055 155.892 138.761 155.892 126.114C155.892 113.467 166.506 103.173 179.545 103.173C192.585 103.173 203.199 113.467 203.199 126.114C203.199 138.761 192.585 149.055 179.545 149.055ZM179.545 112.028C171.556 112.028 165.022 118.338 165.022 126.114C165.022 133.89 171.528 140.2 179.545 140.2C187.535 140.2 194.069 133.89 194.069 126.114C194.069 118.338 187.563 112.028 179.545 112.028Z" fill="#0073AA"/>
|
||||
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 180 126" to="360 180 126" dur="3s" additive="sum" repeatCount="indefinite" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="16" cy="16" r="16" fill="#F1F1F1"/>
|
||||
<path d="M15.9999 0.00012207C7.15995 0.00012207 0 7.16007 0 16C0 24.8399 7.15995 31.9999 15.9999 31.9999C24.8398 31.9999 31.9998 24.8399 31.9998 16C31.9998 7.16007 24.8398 0.00012207 15.9999 0.00012207ZM15.9999 28.7999C8.91993 28.7999 3.19998 23.08 3.19998 16C3.19998 8.92006 8.91993 3.2001 15.9999 3.2001C23.0798 3.2001 28.7998 8.92006 28.7998 16C28.7998 23.08 23.0798 28.7999 15.9999 28.7999Z" fill="#DDDDDD"/>
|
||||
<path d="M30.3203 18.96C30.2803 18.96 30.2003 18.96 30.1603 18.96C29.2803 18.88 28.6403 18.08 28.7203 17.2C28.7603 16.8 28.7603 16.4 28.7603 16C28.8003 8.96006 23.0403 3.2001 16.0004 3.2001C15.1204 3.2001 14.4004 2.4801 14.4004 1.60011C14.4004 0.720117 15.1204 0.00012207 16.0004 0.00012207C24.8403 0.00012207 32.0003 7.16007 32.0003 16C32.0003 16.52 31.9603 17 31.9203 17.52C31.8403 18.36 31.1603 18.96 30.3203 18.96Z" fill="#007CBA"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1001 B |
@@ -0,0 +1,4 @@
|
||||
<svg width="160" height="124" viewBox="0 0 160 124" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M78 0C43.75 0 16 27.75 16 62C16 96.25 43.75 124 78 124C112.25 124 140 96.25 140 62C140 27.75 112.25 0 78 0ZM132 62C132 91.75 107.75 116 78 116C48.25 116 24 92 24 62C24 32.5 48 8 78 8C107.5 8 132 32.25 132 62Z" fill="#64B450"/>
|
||||
<path d="M78.0073 67.9142L55.4215 45.0931L55.3399 45.0107L55.2494 44.9383C54.2296 44.1224 52.9623 43.75 51.7812 43.75C50.6146 43.75 49.3023 44.1193 48.3358 45.0858L41.0858 52.3358C40.1193 53.3023 39.75 54.6146 39.75 55.7812C39.75 56.9623 40.1224 58.2296 40.9383 59.2494L41.0098 59.3388L41.0911 59.4195L74.5858 92.6642C74.5868 92.6652 74.5878 92.6663 74.5888 92.6673C75.5522 93.6292 76.7967 94.1875 78.125 94.1875C79.4547 94.1875 80.7005 93.628 81.6642 92.6642L156.664 17.6642C157.631 16.6977 158 15.3854 158 14.2188C158 13.0377 157.628 11.7704 156.812 10.7506L156.732 10.6504L156.639 10.5612L149.469 3.63831C147.572 1.41002 144.237 1.68448 142.336 3.58579L78.0073 67.9142Z" fill="#64B450" stroke="white" stroke-width="4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg width="124" height="124" viewBox="0 0 124 124" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M62 0C27.75 0 0 27.75 0 62C0 96.25 27.75 124 62 124C96.25 124 124 96.25 124 62C124 27.75 96.25 0 62 0ZM116 62C116 91.75 91.75 116 62 116C32.25 116 8 92 8 62C8 32.5 32 8 62 8C91.5 8 116 32.25 116 62Z" fill="#FFB900"/>
|
||||
<path d="M71.75 82.625C71.75 77.4688 67.5312 73.25 62.375 73.25C57.1016 73.25 53 77.4688 53 82.625C53 87.8984 57.1016 92 62.375 92C67.5312 92 71.75 87.8984 71.75 82.625ZM54.0547 35.0469L55.5781 66.9219C55.6953 68.3281 56.9844 69.5 58.3906 69.5H66.2422C67.6484 69.5 68.9375 68.3281 69.0547 66.9219L70.5781 35.0469C70.6953 33.4062 69.4062 32 67.7656 32H56.8672C55.2266 32 53.9375 33.4062 54.0547 35.0469Z" fill="#FFB900"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 754 B |
@@ -0,0 +1,693 @@
|
||||
jQuery( function ( $ ) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* ---------------------------------------
|
||||
* ------------- DOM Ready ---------------
|
||||
* ---------------------------------------
|
||||
*/
|
||||
|
||||
// Move the admin notices inside the appropriate div.
|
||||
$( '.js-ocdi-notice-wrapper' ).appendTo( '.js-ocdi-admin-notices-container' );
|
||||
|
||||
// Auto start the manual import if on the import page and the 'js-ocdi-auto-start-manual-import' element is present.
|
||||
if ( $( '.js-ocdi-auto-start-manual-import' ).length ) {
|
||||
startImport( false );
|
||||
}
|
||||
|
||||
/**
|
||||
* ---------------------------------------
|
||||
* ------------- Events ------------------
|
||||
* ---------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* No predefined demo import button click (manual import).
|
||||
*/
|
||||
$( '.js-ocdi-start-manual-import' ).on( 'click', function ( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var $button = $( this );
|
||||
|
||||
if ( $button.hasClass( 'ocdi-button-disabled' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prepare data for the AJAX call
|
||||
var data = new FormData();
|
||||
data.append( 'action', 'ocdi_upload_manual_import_files' );
|
||||
data.append( 'security', ocdi.ajax_nonce );
|
||||
|
||||
if ( $('#ocdi__content-file-upload').length && $('#ocdi__content-file-upload').get(0).files.length ) {
|
||||
var contentFile = $('#ocdi__content-file-upload')[0].files[0];
|
||||
var contentFileExt = contentFile.name.split('.').pop();
|
||||
|
||||
if ( -1 === [ 'xml' ].indexOf( contentFileExt.toLowerCase() ) ) {
|
||||
alert( ocdi.texts.content_filetype_warn );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
data.append( 'content_file', contentFile );
|
||||
}
|
||||
if ( $('#ocdi__widget-file-upload').length && $('#ocdi__widget-file-upload').get(0).files.length ) {
|
||||
var widgetsFile = $('#ocdi__widget-file-upload')[0].files[0];
|
||||
var widgetsFileExt = widgetsFile.name.split('.').pop();
|
||||
|
||||
if ( -1 === [ 'json', 'wie' ].indexOf( widgetsFileExt.toLowerCase() ) ) {
|
||||
alert( ocdi.texts.widgets_filetype_warn );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
data.append( 'widget_file', widgetsFile );
|
||||
}
|
||||
if ( $('#ocdi__customizer-file-upload').length && $('#ocdi__customizer-file-upload').get(0).files.length ) {
|
||||
var customizerFile = $('#ocdi__customizer-file-upload')[0].files[0];
|
||||
var customizerFileExt = customizerFile.name.split('.').pop();
|
||||
|
||||
if ( -1 === [ 'dat' ].indexOf( customizerFileExt.toLowerCase() ) ) {
|
||||
alert( ocdi.texts.customizer_filetype_warn );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
data.append( 'customizer_file', customizerFile );
|
||||
}
|
||||
if ( $('#ocdi__redux-file-upload').length && $('#ocdi__redux-file-upload').get(0).files.length ) {
|
||||
var reduxFile = $('#ocdi__redux-file-upload')[0].files[0];
|
||||
var reduxFileExt = reduxFile.name.split('.').pop();
|
||||
|
||||
if ( -1 === [ 'json' ].indexOf( reduxFileExt.toLowerCase() ) ) {
|
||||
alert( ocdi.texts.redux_filetype_warn );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
data.append( 'redux_file', reduxFile );
|
||||
data.append( 'redux_option_name', $('#ocdi__redux-option-name').val() );
|
||||
}
|
||||
|
||||
$button.addClass( 'ocdi-button-disabled' );
|
||||
|
||||
// AJAX call to upload all selected import files (content, widgets, customizer and redux).
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: ocdi.ajax_url,
|
||||
data: data,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
})
|
||||
.done( function( response ) {
|
||||
if ( response.success ) {
|
||||
window.location.href = ocdi.import_url;
|
||||
} else {
|
||||
alert( response.data );
|
||||
$button.removeClass( 'ocdi-button-disabled' );
|
||||
}
|
||||
})
|
||||
.fail( function( error ) {
|
||||
alert( error.statusText + ' (' + error.status + ')' );
|
||||
$button.removeClass( 'ocdi-button-disabled' );
|
||||
})
|
||||
} );
|
||||
|
||||
/**
|
||||
* Remove the files from the manual import upload controls (when clicked on the "cancel" button).
|
||||
*/
|
||||
$( '.js-ocdi-cancel-manual-import').on( 'click', function() {
|
||||
$( '.ocdi__file-upload-container-items input[type=file]' ).each( function() {
|
||||
$( this ).val( '' ).trigger( 'change' );
|
||||
} );
|
||||
} );
|
||||
|
||||
/**
|
||||
* Show and hide the file upload label and input on file input change event.
|
||||
*/
|
||||
$( document ).on( 'change', '.ocdi__file-upload-container-items input[type=file]', function() {
|
||||
var $input = $( this ),
|
||||
$label = $input.siblings( 'label' ),
|
||||
fileIsSet = false;
|
||||
|
||||
if( this.files && this.files.length > 0 ) {
|
||||
$input.removeClass( 'ocdi-hide-input' ).blur();
|
||||
$label.hide();
|
||||
} else {
|
||||
$input.addClass( 'ocdi-hide-input' );
|
||||
$label.show();
|
||||
}
|
||||
|
||||
// Enable or disable the main manual import/cancel buttons.
|
||||
$( '.ocdi__file-upload-container-items input[type=file]' ).each( function() {
|
||||
if ( this.files && this.files.length > 0 ) {
|
||||
fileIsSet = true;
|
||||
}
|
||||
} );
|
||||
|
||||
$( '.js-ocdi-start-manual-import' ).prop( 'disabled', ! fileIsSet );
|
||||
$( '.js-ocdi-cancel-manual-import' ).prop( 'disabled', ! fileIsSet );
|
||||
|
||||
} );
|
||||
|
||||
/**
|
||||
* Prevent a required plugin checkbox from changeing state.
|
||||
*/
|
||||
$( '.ocdi-install-plugins-content-content .plugin-item.plugin-item--required input[type=checkbox]' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
return false;
|
||||
} );
|
||||
|
||||
/**
|
||||
* Install plugins event.
|
||||
*/
|
||||
$( '.js-ocdi-install-plugins' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var $button = $( this );
|
||||
|
||||
if ( $button.hasClass( 'ocdi-button-disabled' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var pluginsToInstall = $( '.ocdi-install-plugins-content-content .plugin-item input[type=checkbox]' ).serializeArray();
|
||||
|
||||
if ( pluginsToInstall.length === 0 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$button.addClass( 'ocdi-button-disabled' );
|
||||
|
||||
installPluginsAjaxCall( pluginsToInstall, 0, $button, false, false );
|
||||
} );
|
||||
|
||||
/**
|
||||
* Install plugins before importing event.
|
||||
*/
|
||||
$( '.js-ocdi-install-plugins-before-import' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var $button = $( this );
|
||||
|
||||
if ( $button.hasClass( 'ocdi-button-disabled' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var pluginsToInstall = $( '.ocdi-install-plugins-content-content .plugin-item:not(.plugin-item--disabled) input[type=checkbox]' ).serializeArray();
|
||||
|
||||
if ( pluginsToInstall.length === 0 ) {
|
||||
startImport( getUrlParameter( 'import' ) );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$button.addClass( 'ocdi-button-disabled' );
|
||||
|
||||
installPluginsAjaxCall( pluginsToInstall, 0, $button, true, false );
|
||||
} );
|
||||
|
||||
|
||||
/**
|
||||
* Import the created content.
|
||||
*/
|
||||
$( '.js-ocdi-create-content' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var $button = $( this );
|
||||
|
||||
if ( $button.hasClass( 'ocdi-button-disabled' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var itemsToImport = $( '.ocdi-create-content-content .content-item input[type=checkbox]' ).serializeArray();
|
||||
|
||||
if ( itemsToImport.length === 0 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$button.addClass( 'ocdi-button-disabled' );
|
||||
|
||||
createDemoContentAjaxCall( itemsToImport, 0, $button );
|
||||
} );
|
||||
|
||||
|
||||
/**
|
||||
* Install the SeedProd plugin.
|
||||
*/
|
||||
$( '.js-ocdi-install-coming-soon-plugin' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
var $button = $( this ),
|
||||
slug = 'coming-soon';
|
||||
|
||||
if ( $button.hasClass( 'button-disabled' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$button.addClass( 'button-disabled' );
|
||||
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: ocdi.ajax_url,
|
||||
data: {
|
||||
action: 'ocdi_install_plugin',
|
||||
security: ocdi.ajax_nonce,
|
||||
slug: slug,
|
||||
},
|
||||
beforeSend: function() {
|
||||
$button.text( ocdi.texts.installing );
|
||||
}
|
||||
})
|
||||
.done( function( response ) {
|
||||
if ( response.success ) {
|
||||
$button.text( ocdi.texts.installed );
|
||||
} else {
|
||||
alert( response.data );
|
||||
$button.text( ocdi.texts.install_plugin );
|
||||
$button.removeClass( 'button-disabled' );
|
||||
}
|
||||
})
|
||||
.fail( function( error ) {
|
||||
alert( error.statusText + ' (' + error.status + ')' );
|
||||
$button.removeClass( 'button-disabled' );
|
||||
})
|
||||
} );
|
||||
|
||||
/**
|
||||
* Update "plugins to be installed" notice on Create Demo Content page.
|
||||
*/
|
||||
$( document ).on( 'change', '.ocdi--create-content .content-item input[type=checkbox]', function( event ) {
|
||||
var $checkboxes = $( '.ocdi--create-content .content-item input[type=checkbox]' ),
|
||||
$missingPluginNotice = $( '.js-ocdi-create-content-install-plugins-notice' ),
|
||||
missingPlugins = [];
|
||||
|
||||
$checkboxes.each( function() {
|
||||
var $checkbox = $( this );
|
||||
if ( $checkbox.is( ':checked' ) ) {
|
||||
missingPlugins = missingPlugins.concat( getMissingPluginNamesFromImportContentPageItem( $checkbox.data( 'plugins' ) ) );
|
||||
}
|
||||
} );
|
||||
|
||||
missingPlugins = missingPlugins.filter( onlyUnique ).join( ', ' );
|
||||
|
||||
if ( missingPlugins.length > 0 ) {
|
||||
$missingPluginNotice.find( '.js-ocdi-create-content-install-plugins-list' ).text( missingPlugins );
|
||||
$missingPluginNotice.show();
|
||||
} else {
|
||||
$missingPluginNotice.find( '.js-ocdi-create-content-install-plugins-list' ).text( '' );
|
||||
$missingPluginNotice.hide();
|
||||
}
|
||||
} );
|
||||
|
||||
|
||||
/**
|
||||
* Grid Layout categories navigation.
|
||||
*/
|
||||
(function () {
|
||||
// Cache selector to all items
|
||||
var $items = $( '.js-ocdi-gl-item-container' ).find( '.js-ocdi-gl-item' ),
|
||||
fadeoutClass = 'ocdi-is-fadeout',
|
||||
fadeinClass = 'ocdi-is-fadein',
|
||||
animationDuration = 200;
|
||||
|
||||
// Hide all items.
|
||||
var fadeOut = function () {
|
||||
var dfd = jQuery.Deferred();
|
||||
|
||||
$items
|
||||
.addClass( fadeoutClass );
|
||||
|
||||
setTimeout( function() {
|
||||
$items
|
||||
.removeClass( fadeoutClass )
|
||||
.hide();
|
||||
|
||||
dfd.resolve();
|
||||
}, animationDuration );
|
||||
|
||||
return dfd.promise();
|
||||
};
|
||||
|
||||
var fadeIn = function ( category, dfd ) {
|
||||
var filter = category ? '[data-categories*="' + category + '"]' : 'div';
|
||||
|
||||
if ( 'all' === category ) {
|
||||
filter = 'div';
|
||||
}
|
||||
|
||||
$items
|
||||
.filter( filter )
|
||||
.show()
|
||||
.addClass( 'ocdi-is-fadein' );
|
||||
|
||||
setTimeout( function() {
|
||||
$items
|
||||
.removeClass( fadeinClass );
|
||||
|
||||
dfd.resolve();
|
||||
}, animationDuration );
|
||||
};
|
||||
|
||||
var animate = function ( category ) {
|
||||
var dfd = jQuery.Deferred();
|
||||
|
||||
var promise = fadeOut();
|
||||
|
||||
promise.done( function () {
|
||||
fadeIn( category, dfd );
|
||||
} );
|
||||
|
||||
return dfd;
|
||||
};
|
||||
|
||||
$( '.js-ocdi-nav-link' ).on( 'click', function( event ) {
|
||||
event.preventDefault();
|
||||
|
||||
// Remove 'active' class from the previous nav list items.
|
||||
$( this ).parent().siblings().removeClass( 'active' );
|
||||
|
||||
// Add the 'active' class to this nav list item.
|
||||
$( this ).parent().addClass( 'active' );
|
||||
|
||||
var category = this.hash.slice(1);
|
||||
|
||||
// show/hide the right items, based on category selected
|
||||
var $container = $( '.js-ocdi-gl-item-container' );
|
||||
$container.css( 'min-width', $container.outerHeight() );
|
||||
|
||||
var promise = animate( category );
|
||||
|
||||
promise.done( function () {
|
||||
$container.removeAttr( 'style' );
|
||||
} );
|
||||
} );
|
||||
}());
|
||||
|
||||
|
||||
/**
|
||||
* Grid Layout search functionality.
|
||||
*/
|
||||
$( '.js-ocdi-gl-search' ).on( 'keyup', function( event ) {
|
||||
if ( 0 < $(this).val().length ) {
|
||||
// Hide all items.
|
||||
$( '.js-ocdi-gl-item-container' ).find( '.js-ocdi-gl-item' ).hide();
|
||||
|
||||
// Show just the ones that have a match on the import name.
|
||||
$( '.js-ocdi-gl-item-container' ).find( '.js-ocdi-gl-item[data-name*="' + $(this).val().toLowerCase() + '"]' ).show();
|
||||
}
|
||||
else {
|
||||
$( '.js-ocdi-gl-item-container' ).find( '.js-ocdi-gl-item' ).show();
|
||||
}
|
||||
} );
|
||||
|
||||
/**
|
||||
* ---------------------------------------
|
||||
* --------Helper functions --------------
|
||||
* ---------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The main AJAX call, which executes the import process.
|
||||
*
|
||||
* @param FormData data The data to be passed to the AJAX call.
|
||||
*/
|
||||
function ajaxCall( data ) {
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: ocdi.ajax_url,
|
||||
data: data,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
beforeSend: function() {
|
||||
$( '.js-ocdi-install-plugins-content' ).hide();
|
||||
$( '.js-ocdi-importing' ).show();
|
||||
}
|
||||
})
|
||||
.done( function( response ) {
|
||||
if ( 'undefined' !== typeof response.status && 'newAJAX' === response.status ) {
|
||||
ajaxCall( data );
|
||||
}
|
||||
else if ( 'undefined' !== typeof response.status && 'customizerAJAX' === response.status ) {
|
||||
// Fix for data.set and data.delete, which they are not supported in some browsers.
|
||||
var newData = new FormData();
|
||||
newData.append( 'action', 'ocdi_import_customizer_data' );
|
||||
newData.append( 'security', ocdi.ajax_nonce );
|
||||
|
||||
// Set the wp_customize=on only if the plugin filter is set to true.
|
||||
if ( true === ocdi.wp_customize_on ) {
|
||||
newData.append( 'wp_customize', 'on' );
|
||||
}
|
||||
|
||||
ajaxCall( newData );
|
||||
}
|
||||
else if ( 'undefined' !== typeof response.status && 'afterAllImportAJAX' === response.status ) {
|
||||
// Fix for data.set and data.delete, which they are not supported in some browsers.
|
||||
var newData = new FormData();
|
||||
newData.append( 'action', 'ocdi_after_import_data' );
|
||||
newData.append( 'security', ocdi.ajax_nonce );
|
||||
ajaxCall( newData );
|
||||
}
|
||||
else if ( 'undefined' !== typeof response.message ) {
|
||||
$( '.js-ocdi-ajax-response' ).append( response.message );
|
||||
|
||||
if ( 'undefined' !== typeof response.title ) {
|
||||
$( '.js-ocdi-ajax-response-title' ).html( response.title );
|
||||
}
|
||||
|
||||
if ( 'undefined' !== typeof response.subtitle ) {
|
||||
$( '.js-ocdi-ajax-response-subtitle' ).html( response.subtitle );
|
||||
}
|
||||
|
||||
$( '.js-ocdi-importing' ).hide();
|
||||
$( '.js-ocdi-imported' ).show();
|
||||
|
||||
// Trigger custom event, when OCDI import is complete.
|
||||
$( document ).trigger( 'ocdiImportComplete' );
|
||||
}
|
||||
else {
|
||||
$( '.js-ocdi-ajax-response' ).append( '<img class="ocdi-imported-content-imported ocdi-imported-content-imported--error" src="' + ocdi.plugin_url + 'assets/images/error.svg" alt="' + ocdi.texts.import_failed + '"><p>' + response + '</p>' );
|
||||
$( '.js-ocdi-ajax-response-title' ).html( ocdi.texts.import_failed );
|
||||
$( '.js-ocdi-ajax-response-subtitle' ).html( '<p>' + ocdi.texts.import_failed_subtitle + '</p>' );
|
||||
$( '.js-ocdi-importing' ).hide();
|
||||
$( '.js-ocdi-imported' ).show();
|
||||
}
|
||||
})
|
||||
.fail( function( error ) {
|
||||
$( '.js-ocdi-ajax-response' ).append( '<img class="ocdi-imported-content-imported ocdi-imported-content-imported--error" src="' + ocdi.plugin_url + 'assets/images/error.svg" alt="' + ocdi.texts.import_failed + '"><p>Error: ' + error.statusText + ' (' + error.status + ')' + '</p>' );
|
||||
$( '.js-ocdi-ajax-response-title' ).html( ocdi.texts.import_failed );
|
||||
$( '.js-ocdi-ajax-response-subtitle' ).html( '<p>' + ocdi.texts.import_failed_subtitle + '</p>' );
|
||||
$( '.js-ocdi-importing' ).hide();
|
||||
$( '.js-ocdi-imported' ).show();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the missing required plugin names for the Create Demo Content "plugins to install" notice.
|
||||
*
|
||||
* @param requiredPluginSlugs
|
||||
*
|
||||
* @returns {[]}
|
||||
*/
|
||||
function getMissingPluginNamesFromImportContentPageItem( requiredPluginSlugs ) {
|
||||
var requiredPluginSlugs = requiredPluginSlugs.split( ',' ),
|
||||
pluginList = [];
|
||||
|
||||
ocdi.missing_plugins.forEach( function( plugin ) {
|
||||
if ( requiredPluginSlugs.indexOf( plugin.slug ) !== -1 ) {
|
||||
pluginList.push( plugin.name )
|
||||
}
|
||||
} );
|
||||
|
||||
return pluginList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unique array helper function.
|
||||
*
|
||||
* @param value
|
||||
* @param index
|
||||
* @param self
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function onlyUnique( value, index, self ) {
|
||||
return self.indexOf( value ) === index;
|
||||
}
|
||||
|
||||
/**
|
||||
* The AJAX call for installing selected plugins.
|
||||
*
|
||||
* @param {Object[]} plugins The array of plugin objects with name and value pairs.
|
||||
* @param {int} counter The index of the plugin to import from the list above.
|
||||
* @param {Object} $button jQuery object of the submit button.
|
||||
* @param {bool} runImport If the import should be run after plugin installation.
|
||||
* @param {bool} pluginInstallFailed If there were any failed plugin installs.
|
||||
*/
|
||||
function installPluginsAjaxCall( plugins, counter, $button , runImport, pluginInstallFailed ) {
|
||||
var plugin = plugins[ counter ],
|
||||
slug = plugin.name;
|
||||
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: ocdi.ajax_url,
|
||||
data: {
|
||||
action: 'ocdi_install_plugin',
|
||||
security: ocdi.ajax_nonce,
|
||||
slug: slug,
|
||||
},
|
||||
beforeSend: function() {
|
||||
var $currentPluginItem = $( '.plugin-item-' + slug );
|
||||
$currentPluginItem.find( '.js-ocdi-plugin-item-info' ).empty();
|
||||
$currentPluginItem.find( '.js-ocdi-plugin-item-error' ).empty();
|
||||
$currentPluginItem.addClass( 'plugin-item--loading' );
|
||||
}
|
||||
})
|
||||
.done( function( response ) {
|
||||
var $currentPluginItem = $( '.plugin-item-' + slug );
|
||||
|
||||
$currentPluginItem.removeClass( 'plugin-item--loading' );
|
||||
|
||||
if ( response.success ) {
|
||||
$currentPluginItem.addClass( 'plugin-item--active' );
|
||||
$currentPluginItem.find( 'input[type=checkbox]' ).prop( 'disabled', true );
|
||||
} else {
|
||||
|
||||
if ( -1 === response.data.indexOf( '<p>' ) ) {
|
||||
response.data = '<p>' + response.data + '</p>';
|
||||
}
|
||||
|
||||
$currentPluginItem.find( '.js-ocdi-plugin-item-error' ).append( response.data );
|
||||
$currentPluginItem.find( 'input[type=checkbox]' ).prop( 'checked', false );
|
||||
pluginInstallFailed = true;
|
||||
}
|
||||
})
|
||||
.fail( function( error ) {
|
||||
var $currentPluginItem = $( '.plugin-item-' + slug );
|
||||
$currentPluginItem.removeClass( 'plugin-item--loading' );
|
||||
$currentPluginItem.find( '.js-ocdi-plugin-item-error' ).append( '<p>' + error.statusText + ' (' + error.status + ')</p>' );
|
||||
pluginInstallFailed = true;
|
||||
})
|
||||
.always( function() {
|
||||
counter++;
|
||||
|
||||
if ( counter === plugins.length ) {
|
||||
if ( runImport ) {
|
||||
if ( ! pluginInstallFailed ) {
|
||||
startImport( getUrlParameter( 'import' ) );
|
||||
} else {
|
||||
alert( ocdi.texts.plugin_install_failed );
|
||||
}
|
||||
}
|
||||
|
||||
$button.removeClass( 'ocdi-button-disabled' );
|
||||
} else {
|
||||
installPluginsAjaxCall( plugins, counter, $button, runImport, pluginInstallFailed );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
/**
|
||||
* The AJAX call for importing content on the create demo content page.
|
||||
*
|
||||
* @param {Object[]} items The array of content item objects with name and value pairs.
|
||||
* @param {int} counter The index of the plugin to import from the list above.
|
||||
* @param {Object} $button jQuery object of the submit button.
|
||||
*/
|
||||
function createDemoContentAjaxCall( items, counter, $button ) {
|
||||
var item = items[ counter ],
|
||||
slug = item.name;
|
||||
|
||||
$.ajax({
|
||||
method: 'POST',
|
||||
url: ocdi.ajax_url,
|
||||
data: {
|
||||
action: 'ocdi_import_created_content',
|
||||
security: ocdi.ajax_nonce,
|
||||
slug: slug,
|
||||
},
|
||||
beforeSend: function() {
|
||||
var $currentItem = $( '.content-item-' + slug );
|
||||
$currentItem.find( '.js-ocdi-content-item-info' ).empty();
|
||||
$currentItem.find( '.js-ocdi-content-item-error' ).empty();
|
||||
$currentItem.addClass( 'content-item--loading' );
|
||||
}
|
||||
})
|
||||
.done( function( response ) {
|
||||
if ( response.data && response.data.refresh ) {
|
||||
createDemoContentAjaxCall( items, counter, $button );
|
||||
return;
|
||||
}
|
||||
|
||||
var $currentItem = $( '.content-item-' + slug );
|
||||
|
||||
$currentItem.removeClass( 'content-item--loading' );
|
||||
|
||||
if ( response.success ) {
|
||||
$currentItem.find( '.js-ocdi-content-item-info' ).append( '<p>' + ocdi.texts.successful_import + '</p>' );
|
||||
} else {
|
||||
$currentItem.find( '.js-ocdi-content-item-error' ).append( '<p>' + response.data + '</p>' );
|
||||
}
|
||||
})
|
||||
.fail( function( error ) {
|
||||
var $currentItem = $( '.content-item-' + slug );
|
||||
$currentItem.removeClass( 'content-item--loading' );
|
||||
$currentItem.find( '.js-ocdi-content-item-error' ).append( '<p>' + error.statusText + ' (' + error.status + ')</p>' );
|
||||
})
|
||||
.always( function( response ) {
|
||||
if ( response.data && response.data.refresh ) {
|
||||
return;
|
||||
}
|
||||
|
||||
counter++;
|
||||
|
||||
if ( counter === items.length ) {
|
||||
$button.removeClass( 'ocdi-button-disabled' );
|
||||
} else {
|
||||
createDemoContentAjaxCall( items, counter, $button );
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the parameter value from the URL.
|
||||
*
|
||||
* @param param
|
||||
* @returns {boolean|string}
|
||||
*/
|
||||
function getUrlParameter( param ) {
|
||||
var sPageURL = window.location.search.substring( 1 ),
|
||||
sURLVariables = sPageURL.split( '&' ),
|
||||
sParameterName,
|
||||
i;
|
||||
|
||||
for ( i = 0; i < sURLVariables.length; i++ ) {
|
||||
sParameterName = sURLVariables[ i ].split( '=' );
|
||||
|
||||
if ( sParameterName[0] === param ) {
|
||||
return typeof sParameterName[1] === undefined ? true : decodeURIComponent( sParameterName[1] );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the main import with a selected predefined demo or with manual files (selected = false).
|
||||
*
|
||||
* Files for the manual import have already been uploaded in the '.js-ocdi-start-manual-import' event above.
|
||||
*/
|
||||
function startImport( selected ) {
|
||||
// Prepare data for the AJAX call
|
||||
var data = new FormData();
|
||||
data.append( 'action', 'ocdi_import_demo_data' );
|
||||
data.append( 'security', ocdi.ajax_nonce );
|
||||
|
||||
if ( selected ) {
|
||||
data.append( 'selected', selected );
|
||||
}
|
||||
|
||||
// AJAX call to import everything (content, widgets, before/after setup)
|
||||
ajaxCall( data );
|
||||
}
|
||||
} );
|
||||
1
wp-content/themes/himara/core/admin/inc/importer/assets/js/main.min.js
vendored
Normal file
101
wp-content/themes/himara/core/admin/inc/importer/importer.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
// Block direct access to the main plugin file.
|
||||
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
|
||||
|
||||
/**
|
||||
* Main plugin class with initialization tasks.
|
||||
*/
|
||||
if( !class_exists("OCDI_Plugin")) {
|
||||
|
||||
class ETH_OCDI_Plugin {
|
||||
/**
|
||||
* Constructor for this class.
|
||||
*/
|
||||
public function __construct() {
|
||||
/**
|
||||
* Display admin error message if PHP version is older than 5.6.
|
||||
* Otherwise execute the main plugin class.
|
||||
*/
|
||||
if ( version_compare( phpversion(), '5.6', '<' ) ) {
|
||||
add_action( 'admin_notices', array( $this, 'old_php_admin_error_notice' ) );
|
||||
}
|
||||
else {
|
||||
// Set plugin constants.
|
||||
$this->set_plugin_constants();
|
||||
|
||||
// Composer autoloader.
|
||||
require_once OCDI_PATH . 'vendor/autoload.php';
|
||||
|
||||
// Instantiate the main plugin class *Singleton*.
|
||||
$one_click_demo_import = OCDI\OneClickDemoImport::get_instance();
|
||||
|
||||
// Register WP CLI commands
|
||||
if ( defined( 'WP_CLI' ) && WP_CLI ) {
|
||||
WP_CLI::add_command( 'ocdi list', array( 'OCDI\WPCLICommands', 'list_predefined' ) );
|
||||
WP_CLI::add_command( 'ocdi import', array( 'OCDI\WPCLICommands', 'import' ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display an admin error notice when PHP is older the version 5.6.
|
||||
* Hook it to the 'admin_notices' action.
|
||||
*/
|
||||
public function old_php_admin_error_notice() { /* translators: %1$s - the PHP version, %2$s and %3$s - strong HTML tags, %4$s - br HTMl tag. */
|
||||
$message = sprintf( esc_html__( 'The %2$sOne Click Demo Import%3$s plugin requires %2$sPHP 5.6+%3$s to run properly. Please contact your hosting company and ask them to update the PHP version of your site to at least PHP 7.4%4$s Your current version of PHP: %2$s%1$s%3$s', 'himara' ), phpversion(), '<strong>', '</strong>', '<br>' );
|
||||
|
||||
printf( '<div class="notice notice-error"><p>%1$s</p></div>', wp_kses_post( $message ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set plugin constants.
|
||||
*
|
||||
* Path/URL to root of this plugin, with trailing slash and plugin version.
|
||||
*/
|
||||
private function set_plugin_constants() {
|
||||
// Path/URL to root of this plugin, with trailing slash.
|
||||
if ( ! defined( 'OCDI_PATH' ) ) {
|
||||
define( 'OCDI_PATH', plugin_dir_path( __FILE__ ) );
|
||||
}
|
||||
if ( ! defined( 'OCDI_URL' ) ) {
|
||||
define( 'OCDI_URL', get_template_directory_uri().'/core/admin/inc/importer/' );
|
||||
}
|
||||
|
||||
// Used for backward compatibility.
|
||||
if ( ! defined( 'PT_OCDI_PATH' ) ) {
|
||||
define( 'PT_OCDI_PATH', plugin_dir_path( __FILE__ ) );
|
||||
}
|
||||
if ( ! defined( 'PT_OCDI_URL' ) ) {
|
||||
define( 'PT_OCDI_URL', plugin_dir_url( __FILE__ ) );
|
||||
}
|
||||
|
||||
// Action hook to set the plugin version constant.
|
||||
add_action( 'admin_init', array( $this, 'set_plugin_version_constant' ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set plugin version constant -> OCDI_VERSION.
|
||||
*/
|
||||
public function set_plugin_version_constant() {
|
||||
$plugin_data = get_plugin_data( __FILE__ );
|
||||
|
||||
if ( ! defined( 'OCDI_VERSION' ) ) {
|
||||
define( 'OCDI_VERSION', $plugin_data['Version'] );
|
||||
}
|
||||
|
||||
// Used for backward compatibility.
|
||||
if ( ! defined( 'PT_OCDI_VERSION' ) ) {
|
||||
define( 'PT_OCDI_VERSION', $plugin_data['Version'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Instantiate the plugin class.
|
||||
$ocdi_plugin = new ETH_OCDI_Plugin();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,436 @@
|
||||
<?php
|
||||
/**
|
||||
* Create Demo Content - responsible for importing pre-created demo content.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI\CreateDemoContent;
|
||||
|
||||
use OCDI\Helpers;
|
||||
use OCDI\Importer;
|
||||
use OCDI\Logger;
|
||||
use OCDI\OneClickDemoImport;
|
||||
use OCDI\PluginInstaller;
|
||||
|
||||
class DemoContentCreator {
|
||||
|
||||
/**
|
||||
* Holds all pre-created content.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* Initialize everything needed for the demo content creator class to function properly.
|
||||
*/
|
||||
public function init() {
|
||||
$this->set_content();
|
||||
|
||||
add_action( 'ocdi/demo_content_creator_after_import', array( $this, 'after_import_wpforms_setup' ) );
|
||||
|
||||
add_action( 'wp_ajax_ocdi_import_created_content', array( $this, 'import_created_content' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all default pre-created demo content data.
|
||||
*
|
||||
* @return array[]
|
||||
*/
|
||||
public function get_default_content() {
|
||||
return array(
|
||||
array(
|
||||
'slug' => 'about-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/about-page.xml',
|
||||
'name' => esc_html__( 'About Us', 'himara' ),
|
||||
'description' => esc_html__( 'Introduce yourself and your business with a clean layout to reassure your leads and customers.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'book-now-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/book-now-page.xml',
|
||||
'name' => esc_html__( 'Book Now', 'himara' ),
|
||||
'description' => esc_html__( 'Expand your reach by accepting appointments online plus detailing your services and staff.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'contact-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/contact-page.xml',
|
||||
'name' => esc_html__( 'Contact Us', 'himara' ),
|
||||
'description' => esc_html__( 'Make it easy to get in touch with you through a completely customizable built-in contact form.', 'himara' ),
|
||||
'required_plugins' => array( 'wpforms-lite' ),
|
||||
),
|
||||
array(
|
||||
'slug' => 'faq-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/faq-page.xml',
|
||||
'name' => esc_html__( 'FAQ', 'himara' ),
|
||||
'description' => esc_html__( 'Lighten the load on your support team or your inbox by addressing frequently asked questions.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'meet-the-team-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/meet-the-team-page.xml',
|
||||
'name' => esc_html__( 'Meet the Team', 'himara' ),
|
||||
'description' => esc_html__( 'Help potential clients feel more at ease by showing off your hard-working and trustworthy team.', 'himara' ),
|
||||
'required_plugins' => array( 'wpforms-lite' ),
|
||||
),
|
||||
array(
|
||||
'slug' => 'menu-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/menu-page.xml',
|
||||
'name' => esc_html__( 'Menu', 'himara' ),
|
||||
'description' => esc_html__( 'Display your delicious dishes online to entice website visitors to become restaurant customers.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'portfolio-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/portfolio-page.xml',
|
||||
'name' => esc_html__( 'Portfolio', 'himara' ),
|
||||
'description' => esc_html__( 'Impress leads by visually showcasing your achievements, case studies, and past work.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'services-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/services-page.xml',
|
||||
'name' => esc_html__( 'Services', 'himara' ),
|
||||
'description' => esc_html__( 'Let the world know your services or products\' cost and features in an organized pricing table.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'slug' => 'shop-page',
|
||||
'file' => OCDI_PATH . 'assets/demo-content/shop-page.xml',
|
||||
'name' => esc_html__( 'Shop', 'himara' ),
|
||||
'description' => esc_html__( 'Categorize and sell your products online while displaying reviews from happy customers.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
array(
|
||||
'file' => OCDI_PATH . 'assets/demo-content/testimonials-page.xml',
|
||||
'slug' => 'testimonials-page',
|
||||
'name' => esc_html__( 'Testimonials', 'himara' ),
|
||||
'description' => esc_html__( 'Tap into the power of social proof by displaying real-life testimonials on your website.', 'himara' ),
|
||||
'required_plugins' => array(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all pre-created demo pages.
|
||||
* With our pre-created pages being set as defaults.
|
||||
*/
|
||||
public function set_content() {
|
||||
$all_content = array_merge( $this->get_default_content(), Helpers::apply_filters( 'ocdi/register_created_demo_content', array() ) );
|
||||
|
||||
$this->content = array_filter(
|
||||
$all_content,
|
||||
function ( $item ) {
|
||||
if ( empty( $item['slug'] ) || empty( $item['name'] ) || empty( $item['file'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function after_import_wpforms_setup( $slug ) {
|
||||
|
||||
// Perform WPForms setup only if this is a contact or the meet the team page import.
|
||||
if ( ! in_array( $slug, array( 'contact-page', 'meet-the-team-page' ), true ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Is WPForms plugin active?
|
||||
$plugin_installer = new PluginInstaller();
|
||||
|
||||
if (
|
||||
! (
|
||||
$plugin_installer->is_plugin_active( 'wpforms-lite' ) ||
|
||||
$plugin_installer->is_plugin_active( 'wpforms' )
|
||||
)
|
||||
) {
|
||||
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Required WPForms plugin is not activated.', 'himara' ) );
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'wpforms' ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Required WPForms plugin doesn\'t exist.', 'himara' ) );
|
||||
}
|
||||
|
||||
$form_title = ( $slug === 'meet-the-team-page' ) ? esc_html__( 'Meet the Team Form', 'himara' ) : esc_html__( 'Contact Form', 'himara' );
|
||||
$form_id = $this->create_wpforms_form( $form_title );
|
||||
|
||||
if ( empty( $form_id ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Something went wrong while creating a WPForms contact form.', 'himara' ) );
|
||||
}
|
||||
|
||||
$update_page = $this->update_contact_page_form_id( $form_id );
|
||||
|
||||
if ( empty( $update_page ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not complete the import process for this page. Could not update the imported page with correct WPForms form ID.', 'himara' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX callback for importing the pre-created demo content.
|
||||
* Has to contain the `slug` POST parameter.
|
||||
*/
|
||||
public function import_created_content() {
|
||||
check_ajax_referer( 'ocdi-ajax-verification', 'security' );
|
||||
|
||||
// Check if user has the WP capability to import content.
|
||||
if ( ! current_user_can( 'import' ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not import this page. You don\'t have permission to import content.', 'himara' ) );
|
||||
}
|
||||
|
||||
$slug = ! empty( $_POST['slug'] ) ? sanitize_key( wp_unslash( $_POST['slug'] ) ) : '';
|
||||
|
||||
if ( empty( $slug ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not import this page. Page slug is missing.', 'himara' ) );
|
||||
}
|
||||
|
||||
// Install required plugins.
|
||||
$content_item = $this->get_content_data( $slug );
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$refresh = false;
|
||||
|
||||
if ( ! empty( $content_item['required_plugins'] ) ) {
|
||||
foreach ( $content_item['required_plugins'] as $plugin_slug ) {
|
||||
if ( ! $ocdi->plugin_installer->is_plugin_active( $plugin_slug ) ) {
|
||||
$ocdi->plugin_installer->install_plugin( $plugin_slug );
|
||||
$refresh = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $refresh ) {
|
||||
wp_send_json_success( [ 'refresh' => true ] );
|
||||
}
|
||||
|
||||
// Import the pre-created page.
|
||||
$error = $this->import_content( $slug );
|
||||
|
||||
if ( ! empty( $error ) ) {
|
||||
wp_send_json_error(
|
||||
sprintf( /* translators: %s - The actual error message. */
|
||||
esc_html__( 'An error occured while importing this page: %s', 'himara' ),
|
||||
esc_html( $error )
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
wp_send_json_success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data of a registered pre-created content via the slug.
|
||||
*
|
||||
* @param string $slug The pre-created content slug.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_content_data( $slug ) {
|
||||
$data = [];
|
||||
|
||||
foreach ( $this->content as $item ) {
|
||||
if ( $item['slug'] === $slug ) {
|
||||
$data = $item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Import the content for the selected pre-created content slug.
|
||||
*
|
||||
* @param string $slug The pre-created content slug.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function import_content( $slug ) {
|
||||
$import_file = $this->get_import_file( $slug );
|
||||
|
||||
if ( empty( $import_file ) ) {
|
||||
return esc_html__( 'The demo content import file is missing.', 'himara' );
|
||||
}
|
||||
|
||||
// Change the date to allow same page import multiple times.
|
||||
add_filter( 'wxr_importer.pre_process.post', function ( $data ) {
|
||||
if ( $data['post_type'] === 'page' ) {
|
||||
$data['post_date'] = date( 'Y-m-d H:i:s' );
|
||||
}
|
||||
|
||||
return $data;
|
||||
} );
|
||||
|
||||
// Increase PHP max execution time.
|
||||
if ( strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) === false ) {
|
||||
set_time_limit( Helpers::apply_filters( 'ocdi/set_time_limit_for_demo_data_import', 300 ) );
|
||||
}
|
||||
|
||||
// Disable import of authors.
|
||||
add_filter( 'wxr_importer.pre_process.user', '__return_false' );
|
||||
|
||||
// Configure logger instance and set it to the importer.
|
||||
$logger = new Logger();
|
||||
$logger->min_level = 'warning';
|
||||
|
||||
// Create importer instance with proper parameters.
|
||||
$importer = new Importer(
|
||||
array(
|
||||
'fetch_attachments' => true,
|
||||
'aggressive_url_search' => true,
|
||||
'prefill_existing_posts' => false,
|
||||
),
|
||||
$logger
|
||||
);
|
||||
|
||||
Helpers::do_action( 'ocdi/demo_content_creater_before_import', $slug );
|
||||
|
||||
ob_start();
|
||||
$importer->import( $import_file );
|
||||
$message = ob_get_clean(); // Catch any output and clear the buffers.
|
||||
|
||||
Helpers::do_action( 'ocdi/demo_content_creator_after_import', $slug );
|
||||
|
||||
return $importer->logger->error_output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the demo import file for the provided slug.
|
||||
*
|
||||
* @param string $slug The pre-created content slug.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_import_file( $slug ) {
|
||||
$content_data = $this->get_content_data( $slug );
|
||||
|
||||
return ! empty( $content_data['file'] ) ? $content_data['file'] : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a WPForms contact form, for the pre-created pages.
|
||||
*
|
||||
* @param string $title The title of the contact form.
|
||||
*
|
||||
* @return false|int
|
||||
*/
|
||||
private function create_wpforms_form( $title ) {
|
||||
$form_id = wpforms()->form->add( $title );
|
||||
|
||||
if ( empty( $form_id ) || is_wp_error( $form_id ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$form_id = wpforms()->form->update(
|
||||
$form_id,
|
||||
array(
|
||||
'id' => $form_id,
|
||||
'field_id' => '3',
|
||||
'fields' => array(
|
||||
'0' => array(
|
||||
'id' => '0',
|
||||
'type' => 'name',
|
||||
'format' => 'first-last',
|
||||
'label' => esc_html__( 'Name', 'himara' ),
|
||||
'required' => '1',
|
||||
'size' => 'medium',
|
||||
),
|
||||
'1' => array(
|
||||
'id' => '1',
|
||||
'type' => 'email',
|
||||
'label' => esc_html__( 'Email', 'himara' ),
|
||||
'required' => '1',
|
||||
'size' => 'medium',
|
||||
),
|
||||
'2' => array(
|
||||
'id' => '2',
|
||||
'type' => 'textarea',
|
||||
'label' => esc_html__( 'Comment or Message', 'himara' ),
|
||||
'description' => '',
|
||||
'required' => '1',
|
||||
'size' => 'medium',
|
||||
'placeholder' => '',
|
||||
'css' => '',
|
||||
),
|
||||
),
|
||||
'settings' => array(
|
||||
'form_title' => $title,
|
||||
'notification_enable' => '1',
|
||||
'notifications' => array(
|
||||
'1' => array(
|
||||
'email' => '{admin_email}',
|
||||
'sender_address' => '{admin_email}',
|
||||
'replyto' => '{field_id="1"}',
|
||||
'message' => '{all_fields}',
|
||||
),
|
||||
),
|
||||
'confirmations' => array(
|
||||
'1' => array(
|
||||
'type' => 'message',
|
||||
'message' => esc_html__( 'Thanks for contacting us! We will be in touch with you shortly.', 'himara' ),
|
||||
'message_scroll' => '1',
|
||||
),
|
||||
),
|
||||
'antispam' => '1',
|
||||
'submit_text' => esc_html__( 'Submit', 'himara' ),
|
||||
'submit_text_processing' => esc_html__( 'Sending...', 'himara' ),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
if ( empty( $form_id ) || is_wp_error( $form_id ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $form_id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find the imported contact page and update the form ID.
|
||||
*
|
||||
* @param int $form_id The WPForms form ID.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function update_contact_page_form_id( $form_id ) {
|
||||
$pages = get_posts( array(
|
||||
'post_type' => 'page',
|
||||
'meta_query' => array(
|
||||
array(
|
||||
'key' => 'ocdi_precreated_demo',
|
||||
'value' => 'contact-page',
|
||||
),
|
||||
array(
|
||||
'key' => 'ocdi_precreated_demo_updated',
|
||||
'value' => 'no',
|
||||
)
|
||||
),
|
||||
) );
|
||||
|
||||
if ( empty( $pages ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$contact_page = $pages[0];
|
||||
|
||||
// Replace the placeholder form ID with the newly created contact form.
|
||||
$contact_page->post_content = str_replace(
|
||||
'9999',
|
||||
(string) $form_id,
|
||||
$contact_page->post_content
|
||||
);
|
||||
|
||||
$update_page = wp_update_post( $contact_page, true );
|
||||
|
||||
if ( is_wp_error( $update_page ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
update_post_meta( $contact_page->ID, 'ocdi_precreated_demo_updated', 'yes' );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for the customizer importer used in the One Click Demo Import plugin.
|
||||
*
|
||||
* Code is mostly from the Customizer Export/Import plugin.
|
||||
*
|
||||
* @see https://wordpress.org/plugins/customizer-export-import/
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class CustomizerImporter {
|
||||
/**
|
||||
* Import customizer from a DAT file, generated by the Customizer Export/Import plugin.
|
||||
*
|
||||
* @param string $customizer_import_file_path path to the customizer import file.
|
||||
*/
|
||||
public static function import( $customizer_import_file_path ) {
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$log_file_path = $ocdi->get_log_file_path();
|
||||
|
||||
// Try to import the customizer settings.
|
||||
$results = self::import_customizer_options( $customizer_import_file_path );
|
||||
|
||||
// Check for errors, else write the results to the log file.
|
||||
if ( is_wp_error( $results ) ) {
|
||||
$error_message = $results->get_error_message();
|
||||
|
||||
// Add any error messages to the frontend_error_messages variable in OCDI main class.
|
||||
$ocdi->append_to_frontend_error_messages( $error_message );
|
||||
|
||||
// Write error to log file.
|
||||
Helpers::append_to_file(
|
||||
$error_message,
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing customizer settings', 'himara' )
|
||||
);
|
||||
}
|
||||
else {
|
||||
// Add this message to log file.
|
||||
$log_added = Helpers::append_to_file(
|
||||
esc_html__( 'Customizer settings import finished!', 'himara' ),
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing customizer settings' , 'himara' )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Imports uploaded mods and calls WordPress core customize_save actions so
|
||||
* themes that hook into them can act before mods are saved to the database.
|
||||
*
|
||||
* Update: WP core customize_save actions were removed, because of some errors.
|
||||
*
|
||||
* @since 1.1.1
|
||||
* @param string $import_file_path Path to the import file.
|
||||
* @return void|WP_Error
|
||||
*/
|
||||
public static function import_customizer_options( $import_file_path ) {
|
||||
// Setup global vars.
|
||||
global $wp_customize;
|
||||
|
||||
// Setup internal vars.
|
||||
$template = get_template();
|
||||
|
||||
// Make sure we have an import file.
|
||||
if ( ! file_exists( $import_file_path ) ) {
|
||||
return new \WP_Error(
|
||||
'missing_cutomizer_import_file',
|
||||
sprintf( /* translators: %s - file path */
|
||||
esc_html__( 'Error: The customizer import file is missing! File path: %s', 'himara' ),
|
||||
$import_file_path
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Get the upload data.
|
||||
$raw = Helpers::data_from_file( $import_file_path );
|
||||
|
||||
// Make sure we got the data.
|
||||
if ( is_wp_error( $raw ) ) {
|
||||
return $raw;
|
||||
}
|
||||
|
||||
$data = unserialize( $raw );
|
||||
|
||||
// Data checks.
|
||||
if ( ! is_array( $data ) && ( ! isset( $data['template'] ) || ! isset( $data['mods'] ) ) ) {
|
||||
return new \WP_Error(
|
||||
'customizer_import_data_error',
|
||||
esc_html__( 'Error: The customizer import file is not in a correct format. Please make sure to use the correct customizer import file.', 'himara' )
|
||||
);
|
||||
}
|
||||
if ( $data['template'] !== $template ) {
|
||||
return new \WP_Error(
|
||||
'customizer_import_wrong_theme',
|
||||
esc_html__( 'Error: The customizer import file is not suitable for current theme. You can only import customizer settings for the same theme or a child theme.', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Import images.
|
||||
if ( Helpers::apply_filters( 'ocdi/customizer_import_images', true ) ) {
|
||||
$data['mods'] = self::import_customizer_images( $data['mods'] );
|
||||
}
|
||||
|
||||
// Import custom options.
|
||||
if ( isset( $data['options'] ) ) {
|
||||
// Require modified customizer options class.
|
||||
if ( ! class_exists( '\WP_Customize_Setting' ) ) {
|
||||
require_once ABSPATH . 'wp-includes/class-wp-customize-setting.php';
|
||||
}
|
||||
|
||||
foreach ( $data['options'] as $option_key => $option_value ) {
|
||||
$option = new CustomizerOption( $wp_customize, $option_key, array(
|
||||
'default' => '',
|
||||
'type' => 'option',
|
||||
'capability' => 'edit_theme_options',
|
||||
) );
|
||||
|
||||
$option->import( $option_value );
|
||||
}
|
||||
}
|
||||
|
||||
// Should the customizer import use the WP customize_save* hooks?
|
||||
$use_wp_customize_save_hooks = Helpers::apply_filters( 'ocdi/enable_wp_customize_save_hooks', false );
|
||||
|
||||
if ( $use_wp_customize_save_hooks ) {
|
||||
do_action( 'customize_save', $wp_customize );
|
||||
}
|
||||
|
||||
// Loop through the mods and save the mods.
|
||||
foreach ( $data['mods'] as $key => $val ) {
|
||||
if ( $use_wp_customize_save_hooks ) {
|
||||
do_action( 'customize_save_' . $key, $wp_customize );
|
||||
}
|
||||
|
||||
set_theme_mod( $key, $val );
|
||||
}
|
||||
|
||||
if ( $use_wp_customize_save_hooks ) {
|
||||
do_action( 'customize_save_after', $wp_customize );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function: Customizer import - imports images for settings saved as mods.
|
||||
*
|
||||
* @since 1.1.1
|
||||
* @param array $mods An array of customizer mods.
|
||||
* @return array The mods array with any new import data.
|
||||
*/
|
||||
private static function import_customizer_images( $mods ) {
|
||||
foreach ( $mods as $key => $val ) {
|
||||
if ( self::customizer_is_image_url( $val ) ) {
|
||||
$data = self::customizer_sideload_image( $val );
|
||||
if ( ! is_wp_error( $data ) ) {
|
||||
$mods[ $key ] = $data->url;
|
||||
|
||||
// Handle header image controls.
|
||||
if ( isset( $mods[ $key . '_data' ] ) ) {
|
||||
$mods[ $key . '_data' ] = $data;
|
||||
update_post_meta( $data->attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $mods;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function: Customizer import
|
||||
* Taken from the core media_sideload_image function and
|
||||
* modified to return an array of data instead of html.
|
||||
*
|
||||
* @since 1.1.1.
|
||||
* @param string $file The image file path.
|
||||
* @return array An array of image data.
|
||||
*/
|
||||
private static function customizer_sideload_image( $file ) {
|
||||
$data = new \stdClass();
|
||||
|
||||
if ( ! function_exists( 'media_handle_sideload' ) ) {
|
||||
require_once( ABSPATH . 'wp-admin/includes/media.php' );
|
||||
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
||||
require_once( ABSPATH . 'wp-admin/includes/image.php' );
|
||||
}
|
||||
if ( ! empty( $file ) ) {
|
||||
// Set variables for storage, fix file filename for query strings.
|
||||
preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches );
|
||||
$file_array = array();
|
||||
$file_array['name'] = basename( $matches[0] );
|
||||
|
||||
// Download file to temp location.
|
||||
$file_array['tmp_name'] = download_url( $file );
|
||||
|
||||
// If error storing temporarily, return the error.
|
||||
if ( is_wp_error( $file_array['tmp_name'] ) ) {
|
||||
return $file_array['tmp_name'];
|
||||
}
|
||||
|
||||
// Do the validation and storage stuff.
|
||||
$id = media_handle_sideload( $file_array, 0 );
|
||||
|
||||
// If error storing permanently, unlink.
|
||||
if ( is_wp_error( $id ) ) {
|
||||
unlink( $file_array['tmp_name'] );
|
||||
return $id;
|
||||
}
|
||||
|
||||
// Build the object to return.
|
||||
$meta = wp_get_attachment_metadata( $id );
|
||||
$data->attachment_id = $id;
|
||||
$data->url = wp_get_attachment_url( $id );
|
||||
$data->thumbnail_url = wp_get_attachment_thumb_url( $id );
|
||||
$data->height = $meta['height'];
|
||||
$data->width = $meta['width'];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see whether a string is an image url or not.
|
||||
*
|
||||
* @since 1.1.1
|
||||
* @param string $string The string to check.
|
||||
* @return bool Whether the string is an image url or not.
|
||||
*/
|
||||
private static function customizer_is_image_url( $string = '' ) {
|
||||
if ( is_string( $string ) ) {
|
||||
if ( preg_match( '/\.(jpg|jpeg|png|gif)/i', $string ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* A class that extends WP_Customize_Setting so we can access
|
||||
* the protected updated method when importing options.
|
||||
*
|
||||
* Used in the Customizer importer.
|
||||
*
|
||||
* @since 1.1.1
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
final class CustomizerOption extends \WP_Customize_Setting {
|
||||
/**
|
||||
* Import an option value for this setting.
|
||||
*
|
||||
* @since 1.1.1
|
||||
* @param mixed $value The option value.
|
||||
* @return void
|
||||
*/
|
||||
public function import( $value ) {
|
||||
$this->update( $value );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for downloading a file from a given URL.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class Downloader {
|
||||
/**
|
||||
* Holds full path to where the files will be saved.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $download_directory_path = '';
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
*
|
||||
* @param string $download_directory_path Full path to where the files will be saved.
|
||||
*/
|
||||
public function __construct( $download_directory_path = '' ) {
|
||||
$this->set_download_directory_path( $download_directory_path );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Download file from a given URL.
|
||||
*
|
||||
* @param string $url URL of file to download.
|
||||
* @param string $filename Filename of the file to save.
|
||||
* @return string|WP_Error Full path to the downloaded file or WP_Error object with error message.
|
||||
*/
|
||||
public function download_file( $url, $filename ) {
|
||||
$content = $this->get_content_from_url( $url );
|
||||
|
||||
// Check if there was an error and break out.
|
||||
if ( is_wp_error( $content ) ) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
return Helpers::write_to_file( $content, $this->download_directory_path . $filename );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper function: get content from an URL.
|
||||
*
|
||||
* @param string $url URL to the content file.
|
||||
* @return string|WP_Error, content from the URL or WP_Error object with error message.
|
||||
*/
|
||||
private function get_content_from_url( $url ) {
|
||||
// Test if the URL to the file is defined.
|
||||
if ( empty( $url ) ) {
|
||||
return new \WP_Error(
|
||||
'missing_url',
|
||||
__( 'Missing URL for downloading a file!', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Get file content from the server.
|
||||
$response = wp_remote_get(
|
||||
$url,
|
||||
array( 'timeout' => Helpers::apply_filters( 'ocdi/timeout_for_downloading_import_file', 20 ) )
|
||||
);
|
||||
|
||||
// Test if the get request was not successful.
|
||||
if ( is_wp_error( $response ) || 200 !== $response['response']['code'] ) {
|
||||
// Collect the right format of error data (array or WP_Error).
|
||||
$response_error = $this->get_error_from_response( $response );
|
||||
|
||||
return new \WP_Error(
|
||||
'download_error',
|
||||
sprintf( /* translators: %1$s and %3$s - strong HTML tags, %2$s - file URL, %4$s - br HTML tag, %5$s - error code, %6$s - error message. */
|
||||
__( 'An error occurred while fetching file from: %1$s%2$s%3$s!%4$sReason: %5$s - %6$s.', 'himara' ),
|
||||
'<strong>',
|
||||
$url,
|
||||
'</strong>',
|
||||
'<br>',
|
||||
$response_error['error_code'],
|
||||
$response_error['error_message']
|
||||
) . '<br>' .
|
||||
Helpers::apply_filters( 'ocdi/message_after_file_fetching_error', '' )
|
||||
);
|
||||
}
|
||||
|
||||
// Return content retrieved from the URL.
|
||||
return wp_remote_retrieve_body( $response );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper function: get the right format of response errors.
|
||||
*
|
||||
* @param array|WP_Error $response Array or WP_Error or the response.
|
||||
* @return array Error code and error message.
|
||||
*/
|
||||
private function get_error_from_response( $response ) {
|
||||
$response_error = array();
|
||||
|
||||
if ( is_array( $response ) ) {
|
||||
$response_error['error_code'] = $response['response']['code'];
|
||||
$response_error['error_message'] = $response['response']['message'];
|
||||
}
|
||||
else {
|
||||
$response_error['error_code'] = $response->get_error_code();
|
||||
$response_error['error_message'] = $response->get_error_message();
|
||||
}
|
||||
|
||||
return $response_error;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get download_directory_path attribute.
|
||||
*/
|
||||
public function get_download_directory_path() {
|
||||
return $this->download_directory_path;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set download_directory_path attribute.
|
||||
* If no valid path is specified, the default WP upload directory will be used.
|
||||
*
|
||||
* @param string $download_directory_path Path, where the files will be saved.
|
||||
*/
|
||||
public function set_download_directory_path( $download_directory_path ) {
|
||||
if ( file_exists( $download_directory_path ) ) {
|
||||
$this->download_directory_path = $download_directory_path;
|
||||
}
|
||||
else {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$this->download_directory_path = Helpers::apply_filters( 'ocdi/upload_file_path', trailingslashit( $upload_dir['path'] ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
810
wp-content/themes/himara/core/admin/inc/importer/inc/Helpers.php
Normal file
@@ -0,0 +1,810 @@
|
||||
<?php
|
||||
/**
|
||||
* Static functions used in the OCDI plugin.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
/**
|
||||
* Class with static helper functions.
|
||||
*/
|
||||
class Helpers {
|
||||
/**
|
||||
* Holds the date and time string for demo import and log file.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public static $demo_import_start_time = '';
|
||||
|
||||
/**
|
||||
* Filter through the array of import files and get rid of those who do not comply.
|
||||
*
|
||||
* @param array $import_files list of arrays with import file details.
|
||||
* @return array list of filtered arrays.
|
||||
*/
|
||||
public static function validate_import_file_info( $import_files ) {
|
||||
$filtered_import_file_info = array();
|
||||
|
||||
foreach ( $import_files as $import_file ) {
|
||||
if ( self::is_import_file_info_format_correct( $import_file ) ) {
|
||||
$filtered_import_file_info[] = $import_file;
|
||||
}
|
||||
}
|
||||
|
||||
return $filtered_import_file_info;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper function: a simple check for valid import file format.
|
||||
*
|
||||
* @param array $import_file_info array with import file details.
|
||||
* @return boolean
|
||||
*/
|
||||
private static function is_import_file_info_format_correct( $import_file_info ) {
|
||||
if ( empty( $import_file_info['import_file_name'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Download import files. Content .xml and widgets .wie|.json files.
|
||||
*
|
||||
* @param array $import_file_info array with import file details.
|
||||
* @return array|WP_Error array of paths to the downloaded files or WP_Error object with error message.
|
||||
*/
|
||||
public static function download_import_files( $import_file_info ) {
|
||||
$downloaded_files = array(
|
||||
'content' => '',
|
||||
'widgets' => '',
|
||||
'customizer' => '',
|
||||
'redux' => '',
|
||||
'sliders' => '',
|
||||
);
|
||||
$downloader = new Downloader();
|
||||
|
||||
$import_file_info = self::apply_filters('ocdi/pre_download_import_files', $import_file_info);
|
||||
|
||||
// ----- Set content file path -----
|
||||
// Check if 'import_file_url' is not defined. That would mean a local file.
|
||||
if ( empty( $import_file_info['import_file_url'] ) ) {
|
||||
if ( file_exists( $import_file_info['local_import_file'] ) ) {
|
||||
$downloaded_files['content'] = $import_file_info['local_import_file'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Set the filename string for content import file.
|
||||
$content_filename = self::apply_filters( 'ocdi/downloaded_content_file_prefix', 'demo-content-import-file_' ) . self::$demo_import_start_time . self::apply_filters( 'ocdi/downloaded_content_file_suffix_and_file_extension', '.xml' );
|
||||
|
||||
// Download the content import file.
|
||||
$downloaded_files['content'] = $downloader->download_file( $import_file_info['import_file_url'], $content_filename );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $downloaded_files['content'] ) ) {
|
||||
return $downloaded_files['content'];
|
||||
}
|
||||
}
|
||||
|
||||
// ----- Set widget file path -----
|
||||
// Get widgets file as well. If defined!
|
||||
if ( ! empty( $import_file_info['import_widget_file_url'] ) ) {
|
||||
// Set the filename string for widgets import file.
|
||||
$widget_filename = self::apply_filters( 'ocdi/downloaded_widgets_file_prefix', 'demo-widgets-import-file_' ) . self::$demo_import_start_time . self::apply_filters( 'ocdi/downloaded_widgets_file_suffix_and_file_extension', '.json' );
|
||||
|
||||
// Download the widgets import file.
|
||||
$downloaded_files['widgets'] = $downloader->download_file( $import_file_info['import_widget_file_url'], $widget_filename );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $downloaded_files['widgets'] ) ) {
|
||||
return $downloaded_files['widgets'];
|
||||
}
|
||||
}
|
||||
else if ( ! empty( $import_file_info['local_import_widget_file'] ) ) {
|
||||
if ( file_exists( $import_file_info['local_import_widget_file'] ) ) {
|
||||
$downloaded_files['widgets'] = $import_file_info['local_import_widget_file'];
|
||||
}
|
||||
}
|
||||
|
||||
// ----- Set customizer file path -----
|
||||
// Get customizer import file as well. If defined!
|
||||
if ( ! empty( $import_file_info['import_customizer_file_url'] ) ) {
|
||||
// Setup filename path to save the customizer content.
|
||||
$customizer_filename = self::apply_filters( 'ocdi/downloaded_customizer_file_prefix', 'demo-customizer-import-file_' ) . self::$demo_import_start_time . self::apply_filters( 'ocdi/downloaded_customizer_file_suffix_and_file_extension', '.dat' );
|
||||
|
||||
// Download the customizer import file.
|
||||
$downloaded_files['customizer'] = $downloader->download_file( $import_file_info['import_customizer_file_url'], $customizer_filename );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $downloaded_files['customizer'] ) ) {
|
||||
return $downloaded_files['customizer'];
|
||||
}
|
||||
}
|
||||
else if ( ! empty( $import_file_info['local_import_customizer_file'] ) ) {
|
||||
if ( file_exists( $import_file_info['local_import_customizer_file'] ) ) {
|
||||
$downloaded_files['customizer'] = $import_file_info['local_import_customizer_file'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eagle Themes: Get Slider Revolution import files
|
||||
*
|
||||
*/
|
||||
if ( ! empty( $import_file_info['import_rev'] ) && is_array( $import_file_info['import_rev'] ) ) {
|
||||
|
||||
$slider_items = array();
|
||||
|
||||
// Setup filename paths to save the rev content.
|
||||
foreach ( $import_file_info['import_rev'] as $index => $slider_item ) {
|
||||
|
||||
$slider_filename = self::apply_filters( 'ocdi/downloaded_sliders_file_prefix', 'demo-sliders-import-file_' ) . $index . '-' . self::$demo_import_start_time . self::apply_filters( 'ocdi/downloaded_sliders_file_suffix_and_file_extension', '.zip' );
|
||||
|
||||
// error_log( $slider_filename );
|
||||
|
||||
// Download the rev import file.
|
||||
$file_path = $downloader->download_file( $slider_item['file_url'], $slider_filename );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $file_path ) ) {
|
||||
return $file_path;
|
||||
}
|
||||
|
||||
$slider_items[] = array(
|
||||
'slider_name' => $slider_item['slider_name'],
|
||||
'file_url' => $file_path,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
// Download the rev import file.
|
||||
$downloaded_files['sliders'] = $slider_items;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// ----- Set Redux file paths -----
|
||||
// Get Redux import file as well. If defined!
|
||||
if ( ! empty( $import_file_info['import_redux'] ) && is_array( $import_file_info['import_redux'] ) ) {
|
||||
$redux_items = array();
|
||||
|
||||
// Setup filename paths to save the Redux content.
|
||||
foreach ( $import_file_info['import_redux'] as $index => $redux_item ) {
|
||||
|
||||
|
||||
$redux_filename = self::apply_filters( 'ocdi/downloaded_redux_file_prefix', 'demo-redux-import-file_' ) . $index . '-' . self::$demo_import_start_time . self::apply_filters( 'ocdi/downloaded_redux_file_suffix_and_file_extension', '.json' );
|
||||
|
||||
// Download the Redux import file.
|
||||
$file_path = $downloader->download_file( $redux_item['file_url'], $redux_filename );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $file_path ) ) {
|
||||
return $file_path;
|
||||
}
|
||||
|
||||
$redux_items[] = array(
|
||||
'option_name' => $redux_item['option_name'],
|
||||
'file_path' => $file_path,
|
||||
);
|
||||
}
|
||||
|
||||
// Download the Redux import file.
|
||||
$downloaded_files['redux'] = $redux_items;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
else if ( ! empty( $import_file_info['local_import_redux'] ) ) {
|
||||
|
||||
$redux_items = array();
|
||||
|
||||
// Setup filename paths to save the Redux content.
|
||||
foreach ( $import_file_info['local_import_redux'] as $redux_item ) {
|
||||
if ( file_exists( $redux_item['file_path'] ) ) {
|
||||
$redux_items[] = $redux_item;
|
||||
}
|
||||
}
|
||||
|
||||
// Download the Redux import file.
|
||||
$downloaded_files['redux'] = $redux_items;
|
||||
}
|
||||
|
||||
return $downloaded_files;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write content to a file.
|
||||
*
|
||||
* @param string $content content to be saved to the file.
|
||||
* @param string $file_path file path where the content should be saved.
|
||||
* @return string|WP_Error path to the saved file or WP_Error object with error message.
|
||||
*/
|
||||
public static function write_to_file( $content, $file_path ) {
|
||||
// Verify WP file-system credentials.
|
||||
$verified_credentials = self::check_wp_filesystem_credentials();
|
||||
|
||||
if ( is_wp_error( $verified_credentials ) ) {
|
||||
return $verified_credentials;
|
||||
}
|
||||
|
||||
// By this point, the $wp_filesystem global should be working, so let's use it to create a file.
|
||||
global $wp_filesystem;
|
||||
|
||||
if ( ! $wp_filesystem->put_contents( $file_path, $content ) ) {
|
||||
return new \WP_Error(
|
||||
'failed_writing_file_to_server',
|
||||
sprintf( /* translators: %1$s - br HTML tag, %2$s - file path */
|
||||
__( 'An error occurred while writing file to your server! Tried to write a file to: %1$s%2$s.', 'himara' ),
|
||||
'<br>',
|
||||
$file_path
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Return the file path on successful file write.
|
||||
return $file_path;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Append content to the file.
|
||||
*
|
||||
* @param string $content content to be saved to the file.
|
||||
* @param string $file_path file path where the content should be saved.
|
||||
* @param string $separator_text separates the existing content of the file with the new content.
|
||||
* @return boolean|WP_Error, path to the saved file or WP_Error object with error message.
|
||||
*/
|
||||
public static function append_to_file( $content, $file_path, $separator_text = '' ) {
|
||||
// Verify WP file-system credentials.
|
||||
$verified_credentials = self::check_wp_filesystem_credentials();
|
||||
|
||||
if ( is_wp_error( $verified_credentials ) ) {
|
||||
return $verified_credentials;
|
||||
}
|
||||
|
||||
// By this point, the $wp_filesystem global should be working, so let's use it to create a file.
|
||||
global $wp_filesystem;
|
||||
|
||||
$existing_data = '';
|
||||
if ( file_exists( $file_path ) ) {
|
||||
$existing_data = $wp_filesystem->get_contents( $file_path );
|
||||
}
|
||||
|
||||
// Style separator.
|
||||
$separator = PHP_EOL . '---' . $separator_text . '---' . PHP_EOL;
|
||||
|
||||
if ( ! $wp_filesystem->put_contents( $file_path, $existing_data . $separator . $content . PHP_EOL ) ) {
|
||||
return new \WP_Error(
|
||||
'failed_writing_file_to_server',
|
||||
sprintf( /* translators: %1$s - br HTML tag, %2$s - file path */
|
||||
__( 'An error occurred while writing file to your server! Tried to write a file to: %1$s%2$s.', 'himara' ),
|
||||
'<br>',
|
||||
$file_path
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get data from a file
|
||||
*
|
||||
* @param string $file_path file path where the content should be saved.
|
||||
* @return string $data, content of the file or WP_Error object with error message.
|
||||
*/
|
||||
public static function data_from_file( $file_path ) {
|
||||
// Verify WP file-system credentials.
|
||||
$verified_credentials = self::check_wp_filesystem_credentials();
|
||||
|
||||
if ( is_wp_error( $verified_credentials ) ) {
|
||||
return $verified_credentials;
|
||||
}
|
||||
|
||||
// By this point, the $wp_filesystem global should be working, so let's use it to read a file.
|
||||
global $wp_filesystem;
|
||||
|
||||
$data = $wp_filesystem->get_contents( $file_path );
|
||||
|
||||
if ( ! $data ) {
|
||||
return new \WP_Error(
|
||||
'failed_reading_file_from_server',
|
||||
sprintf( /* translators: %1$s - br HTML tag, %2$s - file path */
|
||||
__( 'An error occurred while reading a file from your server! Tried reading file from path: %1$s%2$s.', 'himara' ),
|
||||
'<br>',
|
||||
$file_path
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Return the file data.
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper function: check for WP file-system credentials needed for reading and writing to a file.
|
||||
*
|
||||
* @return boolean|WP_Error
|
||||
*/
|
||||
private static function check_wp_filesystem_credentials() {
|
||||
// Check if the file-system method is 'direct', if not display an error.
|
||||
if ( ! ( 'direct' === get_filesystem_method() ) ) {
|
||||
return new \WP_Error(
|
||||
'no_direct_file_access',
|
||||
sprintf( /* translators: %1$s and %2$s - strong HTML tags, %3$s - HTML link to a doc page. */
|
||||
__( 'This WordPress page does not have %1$sdirect%2$s write file access. This plugin needs it in order to save the demo import xml file to the upload directory of your site. You can change this setting with these instructions: %3$s.', 'himara' ),
|
||||
'<strong>',
|
||||
'</strong>',
|
||||
'<a href="http://gregorcapuder.com/wordpress-how-to-set-direct-filesystem-method/" target="_blank">How to set <strong>direct</strong> filesystem method</a>'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Get plugin page settings.
|
||||
$plugin_page_setup = self::get_plugin_page_setup_data();
|
||||
|
||||
// Get user credentials for WP file-system API.
|
||||
$demo_import_page_url = wp_nonce_url( $plugin_page_setup['parent_slug'] . '?page=' . $plugin_page_setup['menu_slug'], $plugin_page_setup['menu_slug'] );
|
||||
|
||||
if ( false === ( $creds = request_filesystem_credentials( $demo_import_page_url, '', false, false, null ) ) ) {
|
||||
return new \WP_error(
|
||||
'filesystem_credentials_could_not_be_retrieved',
|
||||
__( 'An error occurred while retrieving reading/writing permissions to your server (could not retrieve WP filesystem credentials)!', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Now we have credentials, try to get the wp_filesystem running.
|
||||
if ( ! WP_Filesystem( $creds ) ) {
|
||||
return new \WP_Error(
|
||||
'wrong_login_credentials',
|
||||
__( 'Your WordPress login credentials don\'t allow to use WP_Filesystem!', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get log file path
|
||||
*
|
||||
* @return string, path to the log file
|
||||
*/
|
||||
public static function get_log_path() {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$upload_path = self::apply_filters( 'ocdi/upload_file_path', trailingslashit( $upload_dir['path'] ) );
|
||||
|
||||
$log_path = $upload_path . self::apply_filters( 'ocdi/log_file_prefix', 'log_file_' ) . self::$demo_import_start_time . self::apply_filters( 'ocdi/log_file_suffix_and_file_extension', '.txt' );
|
||||
|
||||
self::register_file_as_media_attachment( $log_path );
|
||||
|
||||
return $log_path;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Register file as attachment to the Media page.
|
||||
*
|
||||
* @param string $log_path log file path.
|
||||
* @return void
|
||||
*/
|
||||
public static function register_file_as_media_attachment( $log_path ) {
|
||||
// Check the type of file.
|
||||
$log_mimes = array( 'txt' => 'text/plain' );
|
||||
$filetype = wp_check_filetype( basename( $log_path ), self::apply_filters( 'ocdi/file_mimes', $log_mimes ) );
|
||||
|
||||
// Prepare an array of post data for the attachment.
|
||||
$attachment = array(
|
||||
'guid' => self::get_log_url( $log_path ),
|
||||
'post_mime_type' => $filetype['type'],
|
||||
'post_title' => self::apply_filters( 'ocdi/attachment_prefix', esc_html__( 'One Click Demo Import - ', 'himara' ) ) . preg_replace( '/\.[^.]+$/', '', basename( $log_path ) ),
|
||||
'post_content' => '',
|
||||
'post_status' => 'inherit',
|
||||
);
|
||||
|
||||
// Insert the file as attachment in Media page.
|
||||
$attach_id = wp_insert_attachment( $attachment, $log_path );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get log file url
|
||||
*
|
||||
* @param string $log_path log path to use for the log filename.
|
||||
* @return string, url to the log file.
|
||||
*/
|
||||
public static function get_log_url( $log_path ) {
|
||||
$upload_dir = wp_upload_dir();
|
||||
$upload_url = self::apply_filters( 'ocdi/upload_file_url', trailingslashit( $upload_dir['url'] ) );
|
||||
|
||||
return $upload_url . basename( $log_path );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the AJAX call is valid.
|
||||
*/
|
||||
public static function verify_ajax_call() {
|
||||
check_ajax_referer( 'ocdi-ajax-verification', 'security' );
|
||||
|
||||
// Check if user has the WP capability to import data.
|
||||
if ( ! current_user_can( 'import' ) ) {
|
||||
wp_die(
|
||||
sprintf( /* translators: %1$s - opening div and paragraph HTML tags, %2$s - closing div and paragraph HTML tags. */
|
||||
__( '%1$sYour user role isn\'t high enough. You don\'t have permission to import demo data.%2$s', 'himara' ),
|
||||
'<div class="notice notice-error"><p>',
|
||||
'</p></div>'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process uploaded files and return the paths to these files.
|
||||
*
|
||||
* @param array $uploaded_files $_FILES array form an AJAX request.
|
||||
* @param string $log_file_path path to the log file.
|
||||
* @return array of paths to the content import and widget import files.
|
||||
*/
|
||||
public static function process_uploaded_files( $uploaded_files, $log_file_path ) {
|
||||
// Variable holding the paths to the uploaded files.
|
||||
$selected_import_files = array(
|
||||
'content' => '',
|
||||
'widgets' => '',
|
||||
'customizer' => '',
|
||||
'redux' => '',
|
||||
'sliders' => '',
|
||||
);
|
||||
|
||||
// Upload settings to disable form and type testing for AJAX uploads.
|
||||
$upload_overrides = array(
|
||||
'test_form' => false,
|
||||
);
|
||||
|
||||
// Register the import file types and their mime types.
|
||||
add_filter( 'upload_mimes', function ( $defaults ) {
|
||||
$custom = [
|
||||
'xml' => 'text/xml',
|
||||
'json' => 'application/json',
|
||||
'wie' => 'application/json',
|
||||
'dat' => 'text/plain',
|
||||
];
|
||||
|
||||
return array_merge( $custom, $defaults );
|
||||
} );
|
||||
|
||||
// Error data if the demo file was not provided.
|
||||
$file_not_provided_error = array(
|
||||
'error' => esc_html__( 'No file provided.', 'himara' )
|
||||
);
|
||||
|
||||
// Handle demo file uploads.
|
||||
$content_file_info = isset( $_FILES['content_file'] ) ?
|
||||
wp_handle_upload( $_FILES['content_file'], $upload_overrides ) :
|
||||
$file_not_provided_error;
|
||||
|
||||
$widget_file_info = isset( $_FILES['widget_file'] ) ?
|
||||
wp_handle_upload( $_FILES['widget_file'], $upload_overrides ) :
|
||||
$file_not_provided_error;
|
||||
|
||||
$customizer_file_info = isset( $_FILES['customizer_file'] ) ?
|
||||
wp_handle_upload( $_FILES['customizer_file'], $upload_overrides ) :
|
||||
$file_not_provided_error;
|
||||
|
||||
$redux_file_info = isset( $_FILES['redux_file'] ) ?
|
||||
wp_handle_upload( $_FILES['redux_file'], $upload_overrides ) :
|
||||
$file_not_provided_error;
|
||||
|
||||
// Process content import file.
|
||||
if ( $content_file_info && ! isset( $content_file_info['error'] ) ) {
|
||||
// Set uploaded content file.
|
||||
$selected_import_files['content'] = $content_file_info['file'];
|
||||
}
|
||||
else {
|
||||
// Add this error to log file.
|
||||
$log_added = self::append_to_file(
|
||||
sprintf( /* translators: %s - the error message. */
|
||||
__( 'Content file was not uploaded. Error: %s', 'himara' ),
|
||||
$content_file_info['error']
|
||||
),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files' , 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Process widget import file.
|
||||
if ( $widget_file_info && ! isset( $widget_file_info['error'] ) ) {
|
||||
// Set uploaded widget file.
|
||||
$selected_import_files['widgets'] = $widget_file_info['file'];
|
||||
}
|
||||
else {
|
||||
// Add this error to log file.
|
||||
$log_added = self::append_to_file(
|
||||
sprintf( /* translators: %s - the error message. */
|
||||
__( 'Widget file was not uploaded. Error: %s', 'himara' ),
|
||||
$widget_file_info['error']
|
||||
),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files' , 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Process Customizer import file.
|
||||
if ( $customizer_file_info && ! isset( $customizer_file_info['error'] ) ) {
|
||||
// Set uploaded customizer file.
|
||||
$selected_import_files['customizer'] = $customizer_file_info['file'];
|
||||
}
|
||||
else {
|
||||
// Add this error to log file.
|
||||
$log_added = self::append_to_file(
|
||||
sprintf( /* translators: %s - the error message. */
|
||||
__( 'Customizer file was not uploaded. Error: %s', 'himara' ),
|
||||
$customizer_file_info['error']
|
||||
),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files' , 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Process Redux import file.
|
||||
if ( $redux_file_info && ! isset( $redux_file_info['error'] ) ) {
|
||||
if ( isset( $_POST['redux_option_name'] ) && empty( $_POST['redux_option_name'] ) ) {
|
||||
// Write error to log file and send an AJAX response with the error.
|
||||
self::log_error_and_send_ajax_response(
|
||||
esc_html__( 'Missing Redux option name! Please also enter the Redux option name!', 'himara' ),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Set uploaded Redux file.
|
||||
$selected_import_files['redux'] = array(
|
||||
array(
|
||||
'option_name' => sanitize_text_field( $_POST['redux_option_name'] ),
|
||||
'file_path' => $redux_file_info['file'],
|
||||
),
|
||||
);
|
||||
}
|
||||
else {
|
||||
// Add this error to log file.
|
||||
$log_added = self::append_to_file(
|
||||
sprintf( /* translators: %s - the error message. */
|
||||
__( 'Redux file was not uploaded. Error: %s', 'himara' ),
|
||||
$redux_file_info['error']
|
||||
),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files' , 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Add this message to log file.
|
||||
$log_added = self::append_to_file(
|
||||
__( 'The import files were successfully uploaded!', 'himara' ) . self::import_file_info( $selected_import_files ),
|
||||
$log_file_path,
|
||||
esc_html__( 'Upload files' , 'himara' )
|
||||
);
|
||||
|
||||
// Return array with paths of uploaded files.
|
||||
return $selected_import_files;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get import file information and max execution time.
|
||||
*
|
||||
* @param array $selected_import_files array of selected import files.
|
||||
*/
|
||||
public static function import_file_info( $selected_import_files ) {
|
||||
$redux_file_string = '';
|
||||
|
||||
if ( ! empty( $selected_import_files['redux'] ) ) {
|
||||
$redux_file_string = array_reduce( $selected_import_files['redux'], function( $string, $item ) {
|
||||
return sprintf( '%1$s%2$s -> %3$s %4$s', $string, $item['option_name'], $item['file_path'], PHP_EOL );
|
||||
}, '' );
|
||||
}
|
||||
|
||||
return PHP_EOL .
|
||||
sprintf( /* translators: %s - the max execution time. */
|
||||
__( 'Initial max execution time = %s', 'himara' ),
|
||||
ini_get( 'max_execution_time' )
|
||||
) . PHP_EOL .
|
||||
sprintf( /* translators: %1$s - new line break, %2$s - the site URL, %3$s - the file path for content import, %4$s - the file path for widgets import, %5$s - the file path for widgets import, %6$s - the file path for redux import. */
|
||||
__( 'Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = %4$s%1$sCustomizer file = %5$s%1$sRedux files:%1$s%6$s', 'himara' ),
|
||||
PHP_EOL,
|
||||
get_site_url(),
|
||||
empty( $selected_import_files['content'] ) ? esc_html__( 'not defined!', 'himara' ) : $selected_import_files['content'],
|
||||
empty( $selected_import_files['widgets'] ) ? esc_html__( 'not defined!', 'himara' ) : $selected_import_files['widgets'],
|
||||
empty( $selected_import_files['customizer'] ) ? esc_html__( 'not defined!', 'himara' ) : $selected_import_files['customizer'],
|
||||
|
||||
empty( $redux_file_string ) ? esc_html__( 'not defined!', 'himara' ) : $redux_file_string
|
||||
|
||||
// empty( $redux_file_string ) ? esc_html__( 'not defined!', 'himara' ) : $redux_file_string,
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write the error to the log file and send the AJAX response.
|
||||
*
|
||||
* @param string $error_text text to display in the log file and in the AJAX response.
|
||||
* @param string $log_file_path path to the log file.
|
||||
* @param string $separator title separating the old and new content.
|
||||
*/
|
||||
public static function log_error_and_send_ajax_response( $error_text, $log_file_path, $separator = '' ) {
|
||||
// Add this error to log file.
|
||||
$log_added = self::append_to_file(
|
||||
$error_text,
|
||||
$log_file_path,
|
||||
$separator
|
||||
);
|
||||
|
||||
// Send JSON Error response to the AJAX call.
|
||||
wp_send_json( $error_text );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the $demo_import_start_time class variable with the current date and time string.
|
||||
*/
|
||||
public static function set_demo_import_start_time() {
|
||||
self::$demo_import_start_time = date( self::apply_filters( 'ocdi/date_format_for_file_names', 'Y-m-d__H-i-s' ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the category list of all categories used in the predefined demo imports array.
|
||||
*
|
||||
* @param array $demo_imports Array of demo import items (arrays).
|
||||
* @return array|boolean List of all the categories or false if there aren't any.
|
||||
*/
|
||||
public static function get_all_demo_import_categories( $demo_imports ) {
|
||||
$categories = array();
|
||||
|
||||
foreach ( $demo_imports as $item ) {
|
||||
if ( ! empty( $item['categories'] ) && is_array( $item['categories'] ) ) {
|
||||
foreach ( $item['categories'] as $category ) {
|
||||
$categories[ sanitize_key( $category ) ] = $category;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty( $categories ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $categories;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the concatenated string of demo import item categories.
|
||||
* These should be separated by comma and sanitized properly.
|
||||
*
|
||||
* @param array $item The predefined demo import item data.
|
||||
* @return string The concatenated string of categories.
|
||||
*/
|
||||
public static function get_demo_import_item_categories( $item ) {
|
||||
$sanitized_categories = array();
|
||||
|
||||
if ( isset( $item['categories'] ) ) {
|
||||
foreach ( $item['categories'] as $category ) {
|
||||
$sanitized_categories[] = sanitize_key( $category );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $sanitized_categories ) ) {
|
||||
return implode( ',', $sanitized_categories );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the OCDI transient with the current importer data.
|
||||
*
|
||||
* @param array $data Data to be saved to the transient.
|
||||
*/
|
||||
public static function set_ocdi_import_data_transient( $data ) {
|
||||
set_transient( 'ocdi_importer_data', $data, 0.1 * HOUR_IN_SECONDS );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Backwards compatible apply_filters helper.
|
||||
* With 3.0 we changed the filter prefix from 'pt-ocdi/' to just 'ocdi/',
|
||||
* but we needed to make sure backwards compatibility is in place.
|
||||
* This method should be used for all apply_filters calls.
|
||||
*
|
||||
* @param string $hook The filter hook name.
|
||||
* @param mixed $default_data The default filter data.
|
||||
*
|
||||
* @return mixed|void
|
||||
*/
|
||||
public static function apply_filters( $hook, $default_data ) {
|
||||
$new_data = apply_filters( $hook, $default_data );
|
||||
|
||||
if ( $new_data !== $default_data ) {
|
||||
return $new_data;
|
||||
}
|
||||
|
||||
$old_data = apply_filters( "pt-$hook", $default_data );
|
||||
|
||||
if ( $old_data !== $default_data ) {
|
||||
return $old_data;
|
||||
}
|
||||
|
||||
return $default_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatible do_action helper.
|
||||
* With 3.0 we changed the action prefix from 'pt-ocdi/' to just 'ocdi/',
|
||||
* but we needed to make sure backwards compatibility is in place.
|
||||
* This method should be used for all do_action calls.
|
||||
*
|
||||
* @param string $hook The action hook name.
|
||||
* @param mixed ...$arg Optional. Additional arguments which are passed on to the
|
||||
* functions hooked to the action. Default empty.
|
||||
*/
|
||||
public static function do_action( $hook, ...$arg ) {
|
||||
if ( has_action( $hook ) ) {
|
||||
do_action( $hook, ...$arg );
|
||||
} else if ( has_action( "pt-$hook" ) ) {
|
||||
do_action( "pt-$hook", ...$arg );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Backwards compatible has_action helper.
|
||||
* With 3.0 we changed the action prefix from 'pt-ocdi/' to just 'ocdi/',
|
||||
* but we needed to make sure backwards compatibility is in place.
|
||||
* This method should be used for all has_action calls.
|
||||
*
|
||||
* @param string $hook The name of the action hook.
|
||||
* @param callable|bool $function_to_check Optional. The callback to check for. Default false.
|
||||
*
|
||||
* @return bool|int If $function_to_check is omitted, returns boolean for whether the hook has
|
||||
* anything registered. When checking a specific function, the priority of that
|
||||
* hook is returned, or false if the function is not attached. When using the
|
||||
* $function_to_check argument, this function may return a non-boolean value
|
||||
* that evaluates to false (e.g.) 0, so use the === operator for testing the
|
||||
* return value.
|
||||
*/
|
||||
public static function has_action( $hook, $function_to_check = false ) {
|
||||
if ( has_action( $hook ) ) {
|
||||
return has_action( $hook, $function_to_check );
|
||||
} else if ( has_action( "pt-$hook" ) ) {
|
||||
return has_action( "pt-$hook", $function_to_check );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plugin page setup data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_plugin_page_setup_data() {
|
||||
return Helpers::apply_filters( 'ocdi/plugin_page_setup', array(
|
||||
'parent_slug' => 'themes.php',
|
||||
'page_title' => esc_html__( 'One Click Demo Import' , 'himara' ),
|
||||
'menu_title' => esc_html__( 'Import Demo Data' , 'himara' ),
|
||||
'capability' => 'import',
|
||||
'menu_slug' => 'himara',
|
||||
) );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for the import actions used in the One Click Demo Import plugin.
|
||||
* Register default WP actions for OCDI plugin.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class ImportActions {
|
||||
/**
|
||||
* Register all action hooks for this class.
|
||||
*/
|
||||
public function register_hooks() {
|
||||
// Before content import.
|
||||
add_action( 'ocdi/before_content_import_execution', array( $this, 'before_content_import_action' ), 10, 3 );
|
||||
|
||||
// After content import.
|
||||
add_action( 'ocdi/after_content_import_execution', array( $this, 'before_widget_import_action' ), 10, 3 );
|
||||
add_action( 'ocdi/after_content_import_execution', array( $this, 'widgets_import' ), 20, 3 );
|
||||
add_action( 'ocdi/after_content_import_execution', array( $this, 'redux_import' ), 30, 3 );
|
||||
|
||||
|
||||
// Custom: Import Slider
|
||||
add_action( 'ocdi/after_content_import_execution', array( $this, 'sliders_import' ), 80, 3 );
|
||||
|
||||
|
||||
// // Customizer import.
|
||||
// add_action( 'ocdi/customizer_import_execution', array( $this, 'customizer_import' ), 10, 1 );
|
||||
|
||||
// After full import action.
|
||||
add_action( 'ocdi/after_all_import_execution', array( $this, 'after_import_action' ), 10, 3 );
|
||||
|
||||
// Special widget import cases.
|
||||
if ( Helpers::apply_filters( 'ocdi/enable_custom_menu_widget_ids_fix', true ) ) {
|
||||
add_action( 'ocdi/widget_settings_array', array( $this, 'fix_custom_menu_widget_ids' ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change the menu IDs in the custom menu widgets in the widget import data.
|
||||
* This solves the issue with custom menu widgets not having the correct (new) menu ID, because they
|
||||
* have the old menu ID from the export site.
|
||||
*
|
||||
* @param array $widget The widget settings array.
|
||||
*/
|
||||
public function fix_custom_menu_widget_ids( $widget ) {
|
||||
// Skip (no changes needed), if this is not a custom menu widget.
|
||||
if ( ! array_key_exists( 'nav_menu', $widget ) || empty( $widget['nav_menu'] ) || ! is_int( $widget['nav_menu'] ) ) {
|
||||
return $widget;
|
||||
}
|
||||
|
||||
// Get import data, with new menu IDs.
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$content_import_data = $ocdi->importer->get_importer_data();
|
||||
$term_ids = $content_import_data['mapping']['term_id'];
|
||||
|
||||
// Set the new menu ID for the widget.
|
||||
$widget['nav_menu'] = $term_ids[ $widget['nav_menu'] ];
|
||||
|
||||
return $widget;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the widgets import.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function widgets_import( $selected_import_files, $import_files, $selected_index ) {
|
||||
if ( ! empty( $selected_import_files['widgets'] ) ) {
|
||||
WidgetImporter::import( $selected_import_files['widgets'] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Eagle Themes: Import Slider Revolution
|
||||
*
|
||||
*/
|
||||
public function sliders_import( $selected_import_files, $import_files, $selected_index ) {
|
||||
|
||||
// Try to update PHP memory limit (so that it does not run out of it).
|
||||
ini_set( 'memory_limit', apply_filters( 'pt-ocdi/import_memory_limit', '350M' ) );
|
||||
|
||||
if ( !empty( $selected_import_files['sliders'] ) ) {
|
||||
|
||||
if ( class_exists( '\RevSliderSlider' ) ) {
|
||||
|
||||
$slider = new \RevSliderSlider();
|
||||
|
||||
foreach( $selected_import_files['sliders'] as $filepath){
|
||||
|
||||
$slider->importSliderFromPost( true, true, $filepath['file_url'] );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the Redux import.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function redux_import( $selected_import_files, $import_files, $selected_index ) {
|
||||
if ( ! empty( $selected_import_files['redux'] ) ) {
|
||||
ReduxImporter::import( $selected_import_files['redux'] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the customizer import.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function customizer_import( $selected_import_files ) {
|
||||
if ( ! empty( $selected_import_files['customizer'] ) ) {
|
||||
CustomizerImporter::import( $selected_import_files['customizer'] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the action: 'ocdi/before_content_import'.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function before_content_import_action( $selected_import_files, $import_files, $selected_index ) {
|
||||
$this->do_import_action( 'ocdi/before_content_import', $import_files[ $selected_index ] );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the action: 'ocdi/before_widgets_import'.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function before_widget_import_action( $selected_import_files, $import_files, $selected_index ) {
|
||||
$this->do_import_action( 'ocdi/before_widgets_import', $import_files[ $selected_index ] );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Execute the action: 'ocdi/after_import'.
|
||||
*
|
||||
* @param array $selected_import_files Actual selected import files (content, widgets, customizer, redux).
|
||||
* @param array $import_files The filtered import files defined in `ocdi/import_files` filter.
|
||||
* @param int $selected_index Selected index of import.
|
||||
*/
|
||||
public function after_import_action( $selected_import_files, $import_files, $selected_index ) {
|
||||
$this->do_import_action( 'ocdi/after_import', $import_files[ $selected_index ] );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Register the do_action hook, so users can hook to these during import.
|
||||
*
|
||||
* @param string $action The action name to be executed.
|
||||
* @param array $selected_import The data of selected import from `ocdi/import_files` filter.
|
||||
*/
|
||||
private function do_import_action( $action, $selected_import ) {
|
||||
if ( false !== Helpers::has_action( $action ) ) {
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$log_file_path = $ocdi->get_log_file_path();
|
||||
|
||||
ob_start();
|
||||
Helpers::do_action( $action, $selected_import );
|
||||
$message = ob_get_clean();
|
||||
|
||||
// Add this message to log file.
|
||||
$log_added = Helpers::append_to_file(
|
||||
$message,
|
||||
$log_file_path,
|
||||
$action
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for declaring the content importer used in the One Click Demo Import plugin
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class Importer {
|
||||
/**
|
||||
* The importer class object used for importing content.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
private $importer;
|
||||
|
||||
/**
|
||||
* Time in milliseconds, marking the beginning of the import.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
private $microtime;
|
||||
|
||||
/**
|
||||
* The instance of the OCDI\Logger class.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
public $logger;
|
||||
|
||||
/**
|
||||
* The instance of the One Click Demo Import class.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
private $ocdi;
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
*
|
||||
* @param array $importer_options Importer options.
|
||||
* @param object $logger Logger object used in the importer.
|
||||
*/
|
||||
public function __construct( $importer_options = array(), $logger = null ) {
|
||||
// Include files that are needed for WordPress Importer v2.
|
||||
$this->include_required_files();
|
||||
|
||||
// Set the WordPress Importer v2 as the importer used in this plugin.
|
||||
// More: https://github.com/humanmade/WordPress-Importer.
|
||||
$this->importer = new WXRImporter( $importer_options );
|
||||
|
||||
// Set logger to the importer.
|
||||
$this->logger = $logger;
|
||||
if ( ! empty( $this->logger ) ) {
|
||||
$this->set_logger( $this->logger );
|
||||
}
|
||||
|
||||
// Get the OCDI (main plugin class) instance.
|
||||
$this->ocdi = OneClickDemoImport::get_instance();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Include required files.
|
||||
*/
|
||||
private function include_required_files() {
|
||||
if ( ! class_exists( '\WP_Importer' ) ) {
|
||||
require ABSPATH . '/wp-admin/includes/class-wp-importer.php';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Imports content from a WordPress export file.
|
||||
*
|
||||
* @param string $data_file path to xml file, file with WordPress export data.
|
||||
*/
|
||||
public function import( $data_file ) {
|
||||
$this->importer->import( $data_file );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the logger used in the import
|
||||
*
|
||||
* @param object $logger logger instance.
|
||||
*/
|
||||
public function set_logger( $logger ) {
|
||||
$this->importer->set_logger( $logger );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all protected variables from the WXR_Importer needed for continuing the import.
|
||||
*/
|
||||
public function get_importer_data() {
|
||||
return $this->importer->get_importer_data();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets all protected variables from the WXR_Importer needed for continuing the import.
|
||||
*
|
||||
* @param array $data with set variables.
|
||||
*/
|
||||
public function set_importer_data( $data ) {
|
||||
$this->importer->set_importer_data( $data );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Import content from an WP XML file.
|
||||
*
|
||||
* @param string $import_file_path Path to the import file.
|
||||
*/
|
||||
public function import_content( $import_file_path ) {
|
||||
$this->microtime = microtime( true );
|
||||
|
||||
// Increase PHP max execution time. Just in case, even though the AJAX calls are only 25 sec long.
|
||||
$disabled = explode(',', ini_get('disable_functions'));
|
||||
if( !ini_get('safe_mode') && !in_array('set_time_limit', $disabled) ) {
|
||||
set_time_limit( apply_filters( 'pt-ocdi/set_time_limit_for_demo_data_import', 300 ) );
|
||||
}
|
||||
// Disable import of authors.
|
||||
add_filter( 'wxr_importer.pre_process.user', '__return_false' );
|
||||
|
||||
// Check, if we need to send another AJAX request and set the importing author to the current user.
|
||||
add_filter( 'wxr_importer.pre_process.post', array( $this, 'new_ajax_request_maybe' ) );
|
||||
|
||||
// Disables generation of multiple image sizes (thumbnails) in the content import step.
|
||||
if ( ! Helpers::apply_filters( 'ocdi/regenerate_thumbnails_in_content_import', true ) ) {
|
||||
add_filter( 'intermediate_image_sizes_advanced', '__return_null' );
|
||||
}
|
||||
|
||||
// Import content.
|
||||
if ( ! empty( $import_file_path ) ) {
|
||||
ob_start();
|
||||
$this->import( $import_file_path );
|
||||
$message = ob_get_clean();
|
||||
}
|
||||
|
||||
// Return any error messages for the front page output (errors, critical, alert and emergency level messages only).
|
||||
return $this->logger->error_output;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if we need to create a new AJAX request, so that server does not timeout.
|
||||
*
|
||||
* @param array $data current post data.
|
||||
* @return array
|
||||
*/
|
||||
public function new_ajax_request_maybe( $data ) {
|
||||
$time = microtime( true ) - $this->microtime;
|
||||
|
||||
// We should make a new ajax call, if the time is right.
|
||||
if ( $time > Helpers::apply_filters( 'ocdi/time_for_one_ajax_call', 25 ) ) {
|
||||
$response = array(
|
||||
'status' => 'newAJAX',
|
||||
'message' => 'Time for new AJAX request!: ' . $time,
|
||||
);
|
||||
|
||||
// Add any output to the log file and clear the buffers.
|
||||
$message = ob_get_clean();
|
||||
|
||||
// Add any error messages to the frontend_error_messages variable in OCDI main class.
|
||||
if ( ! empty( $message ) ) {
|
||||
$this->ocdi->append_to_frontend_error_messages( $message );
|
||||
}
|
||||
|
||||
// Add message to log file.
|
||||
$log_added = Helpers::append_to_file(
|
||||
__( 'New AJAX call!' , 'himara' ) . PHP_EOL . $message,
|
||||
$this->ocdi->get_log_file_path(),
|
||||
''
|
||||
);
|
||||
|
||||
// Set the current importer stat, so it can be continued on the next AJAX call.
|
||||
$this->set_current_importer_data();
|
||||
|
||||
// Send the request for a new AJAX call.
|
||||
wp_send_json( $response );
|
||||
}
|
||||
|
||||
// Set importing author to the current user.
|
||||
// Fixes the [WARNING] Could not find the author for ... log warning messages.
|
||||
$current_user_obj = wp_get_current_user();
|
||||
$data['post_author'] = $current_user_obj->user_login;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set current state of the content importer, so we can continue the import with new AJAX request.
|
||||
*/
|
||||
private function set_current_importer_data() {
|
||||
$data = array_merge( $this->ocdi->get_current_importer_data(), $this->get_importer_data() );
|
||||
|
||||
Helpers::set_ocdi_import_data_transient( $data );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Logger class used in the One Click Demo Import plugin
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class Logger extends \AwesomeMotive\WPContentImporter2\WPImporterLoggerCLI {
|
||||
/**
|
||||
* Variable for front-end error display.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $error_output = '';
|
||||
|
||||
/**
|
||||
* Overwritten log function from WP_Importer_Logger_CLI.
|
||||
*
|
||||
* Logs with an arbitrary level.
|
||||
*
|
||||
* @param mixed $level level of reporting.
|
||||
* @param string $message log message.
|
||||
* @param array $context context to the log message.
|
||||
*/
|
||||
public function log( $level, $message, array $context = array() ) {
|
||||
// Save error messages for front-end display.
|
||||
$this->error_output( $level, $message, $context = array() );
|
||||
|
||||
if ( $this->level_to_numeric( $level ) < $this->level_to_numeric( $this->min_level ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
printf(
|
||||
'[%s] %s' . PHP_EOL,
|
||||
strtoupper( $level ),
|
||||
$message
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save messages for error output.
|
||||
* Only the messages greater then Error.
|
||||
*
|
||||
* @param mixed $level level of reporting.
|
||||
* @param string $message log message.
|
||||
* @param array $context context to the log message.
|
||||
*/
|
||||
public function error_output( $level, $message, array $context = array() ) {
|
||||
if ( $this->level_to_numeric( $level ) < $this->level_to_numeric( 'error' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->error_output .= sprintf(
|
||||
'[%s] %s<br>',
|
||||
strtoupper( $level ),
|
||||
$message
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,737 @@
|
||||
<?php
|
||||
/**
|
||||
* Main One Click Demo Import plugin class/file.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
/**
|
||||
* One Click Demo Import class, so we don't have to worry about namespaces.
|
||||
*/
|
||||
class OneClickDemoImport {
|
||||
/**
|
||||
* The instance *Singleton* of this class
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
private static $instance;
|
||||
|
||||
/**
|
||||
* The instance of the OCDI\Importer class.
|
||||
*
|
||||
* @var object
|
||||
*/
|
||||
public $importer;
|
||||
|
||||
/**
|
||||
* The instance of the OCDI\PluginInstaller class.
|
||||
*
|
||||
* @var PluginInstaller object
|
||||
*/
|
||||
public $plugin_installer;
|
||||
|
||||
/**
|
||||
* The resulting page's hook_suffix, or false if the user does not have the capability required.
|
||||
*
|
||||
* @var boolean or string
|
||||
*/
|
||||
private $plugin_page;
|
||||
|
||||
/**
|
||||
* Holds the verified import files.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $import_files;
|
||||
|
||||
/**
|
||||
* The path of the log file.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $log_file_path;
|
||||
|
||||
/**
|
||||
* The index of the `import_files` array (which import files was selected).
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
private $selected_index;
|
||||
|
||||
/**
|
||||
* The paths of the actual import files to be used in the import.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $selected_import_files;
|
||||
|
||||
/**
|
||||
* Holds any error messages, that should be printed out at the end of the import.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $frontend_error_messages = array();
|
||||
|
||||
/**
|
||||
* Was the before content import already triggered?
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
private $before_import_executed = false;
|
||||
|
||||
/**
|
||||
* Make plugin page options available to other methods.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $plugin_page_setup = array();
|
||||
|
||||
/**
|
||||
* Imported terms.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $imported_terms = array();
|
||||
|
||||
/**
|
||||
* Returns the *Singleton* instance of this class.
|
||||
*
|
||||
* @return OneClickDemoImport the *Singleton* instance.
|
||||
*/
|
||||
public static function get_instance() {
|
||||
if ( null === static::$instance ) {
|
||||
static::$instance = new static();
|
||||
}
|
||||
|
||||
return static::$instance;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Class construct function, to initiate the plugin.
|
||||
* Protected constructor to prevent creating a new instance of the
|
||||
* *Singleton* via the `new` operator from outside of this class.
|
||||
*/
|
||||
protected function __construct() {
|
||||
// Actions.
|
||||
add_action( 'admin_menu', array( $this, 'create_plugin_page' ) );
|
||||
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
||||
add_action( 'wp_ajax_ocdi_upload_manual_import_files', array( $this, 'upload_manual_import_files_callback' ) );
|
||||
add_action( 'wp_ajax_ocdi_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
|
||||
add_action( 'wp_ajax_ocdi_import_customizer_data', array( $this, 'import_customizer_data_ajax_callback' ) );
|
||||
add_action( 'wp_ajax_ocdi_after_import_data', array( $this, 'after_all_import_data_ajax_callback' ) );
|
||||
add_action( 'after_setup_theme', array( $this, 'setup_plugin_with_filter_data' ) );
|
||||
add_action( 'user_admin_notices', array( $this, 'start_notice_output_capturing' ), 0 );
|
||||
add_action( 'admin_notices', array( $this, 'start_notice_output_capturing' ), 0 );
|
||||
add_action( 'all_admin_notices', array( $this, 'finish_notice_output_capturing' ), PHP_INT_MAX );
|
||||
add_action( 'admin_init', array( $this, 'redirect_from_old_default_admin_page' ) );
|
||||
add_action( 'set_object_terms', array( $this, 'add_imported_terms' ), 10, 6 );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Private clone method to prevent cloning of the instance of the *Singleton* instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function __clone() {}
|
||||
|
||||
|
||||
/**
|
||||
* Empty unserialize method to prevent unserializing of the *Singleton* instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __wakeup() {}
|
||||
|
||||
|
||||
/**
|
||||
* Creates the plugin page and a submenu item in WP Appearance menu.
|
||||
*/
|
||||
public function create_plugin_page() {
|
||||
$this->plugin_page_setup = Helpers::get_plugin_page_setup_data();
|
||||
|
||||
$this->plugin_page = add_submenu_page(
|
||||
$this->plugin_page_setup['parent_slug'],
|
||||
$this->plugin_page_setup['page_title'],
|
||||
$this->plugin_page_setup['menu_title'],
|
||||
$this->plugin_page_setup['capability'],
|
||||
$this->plugin_page_setup['menu_slug'],
|
||||
Helpers::apply_filters( 'ocdi/plugin_page_display_callback_function', array( $this, 'display_plugin_page' ) )
|
||||
);
|
||||
|
||||
// Register the old default settings page, so we can redirect to the new one and not break any existing links.
|
||||
add_submenu_page(
|
||||
'',
|
||||
$this->plugin_page_setup['page_title'],
|
||||
$this->plugin_page_setup['menu_title'],
|
||||
$this->plugin_page_setup['capability'],
|
||||
'pt-one-click-demo-import'
|
||||
);
|
||||
|
||||
register_importer( $this->plugin_page_setup['menu_slug'], $this->plugin_page_setup['page_title'], $this->plugin_page_setup['menu_title'], Helpers::apply_filters( 'ocdi/plugin_page_display_callback_function', array( $this, 'display_plugin_page' ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Plugin page display.
|
||||
* Output (HTML) is in another file.
|
||||
*/
|
||||
public function display_plugin_page() {
|
||||
|
||||
if ( isset( $_GET['step'] ) && 'install-plugins' === $_GET['step'] ) {
|
||||
require_once OCDI_PATH . 'views/install-plugins.php';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isset( $_GET['step'] ) && 'create-content' === $_GET['step'] ) {
|
||||
require_once OCDI_PATH . 'views/create-content.php';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isset( $_GET['step'] ) && 'import' === $_GET['step'] ) {
|
||||
require_once OCDI_PATH . 'views/import.php';
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
require_once OCDI_PATH . 'views/plugin-page.php';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Enqueue admin scripts (JS and CSS)
|
||||
*
|
||||
* @param string $hook holds info on which admin page you are currently loading.
|
||||
*/
|
||||
public function admin_enqueue_scripts( $hook ) {
|
||||
// Enqueue the scripts only on the plugin page.
|
||||
if ( $this->plugin_page === $hook || ( 'admin.php' === $hook && $this->plugin_page_setup['menu_slug'] === esc_attr( $_GET['import'] ) ) ) {
|
||||
wp_enqueue_script( 'ocdi-main-js', OCDI_URL . 'assets/js/main.js' , array( 'jquery' ), OCDI_VERSION );
|
||||
|
||||
// Get theme data.
|
||||
$theme = wp_get_theme();
|
||||
|
||||
wp_localize_script( 'ocdi-main-js', 'ocdi',
|
||||
array(
|
||||
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
||||
'ajax_nonce' => wp_create_nonce( 'ocdi-ajax-verification' ),
|
||||
'import_files' => $this->import_files,
|
||||
'wp_customize_on' => Helpers::apply_filters( 'ocdi/enable_wp_customize_save_hooks', false ),
|
||||
'theme_screenshot' => $theme->get_screenshot(),
|
||||
'missing_plugins' => $this->plugin_installer->get_missing_plugins(),
|
||||
'plugin_url' => OCDI_URL,
|
||||
'import_url' => $this->get_plugin_settings_url( [ 'step' => 'import' ] ),
|
||||
'texts' => array(
|
||||
'missing_preview_image' => esc_html__( 'No preview image defined for this import.', 'himara' ),
|
||||
'dialog_title' => esc_html__( 'Are you sure?', 'himara' ),
|
||||
'dialog_no' => esc_html__( 'Cancel', 'himara' ),
|
||||
'dialog_yes' => esc_html__( 'Yes, import!', 'himara' ),
|
||||
'selected_import_title' => esc_html__( 'Selected demo import:', 'himara' ),
|
||||
'installing' => esc_html__( 'Installing...', 'himara' ),
|
||||
'importing' => esc_html__( 'Importing...', 'himara' ),
|
||||
'successful_import' => esc_html__( 'Successfully Imported!', 'himara' ),
|
||||
'install_plugin' => esc_html__( 'Install Plugin', 'himara' ),
|
||||
'installed' => esc_html__( 'Installed', 'himara' ),
|
||||
'import_failed' => esc_html__( 'Import Failed', 'himara' ),
|
||||
'import_failed_subtitle' => esc_html__( 'Whoops, there was a problem importing your content.', 'himara' ),
|
||||
'plugin_install_failed' => esc_html__( 'Looks like some of the plugins failed to install. Please try again. If this issue persists, please manually install the failing plugins and come back to this step to import the theme demo data.', 'himara' ),
|
||||
'content_filetype_warn' => esc_html__( 'Invalid file type detected! Please select an XML file for the Content Import.', 'himara' ),
|
||||
'widgets_filetype_warn' => esc_html__( 'Invalid file type detected! Please select a JSON or WIE file for the Widgets Import.', 'himara' ),
|
||||
'customizer_filetype_warn' => esc_html__( 'Invalid file type detected! Please select a DAT file for the Customizer Import.', 'himara' ),
|
||||
'redux_filetype_warn' => esc_html__( 'Invalid file type detected! Please select a JSON file for the Redux Import.', 'himara' ),
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
wp_enqueue_style( 'ocdi-main-css', OCDI_URL . 'assets/css/main.css', array() , OCDI_VERSION );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AJAX callback method for uploading the manual import files.
|
||||
*/
|
||||
public function upload_manual_import_files_callback() {
|
||||
Helpers::verify_ajax_call();
|
||||
|
||||
if ( empty( $_FILES ) ) {
|
||||
wp_send_json_error( esc_html__( 'Manual import files are missing! Please select the import files and try again.', 'himara' ) );
|
||||
}
|
||||
|
||||
// Create a date and time string to use for demo and log file names.
|
||||
Helpers::set_demo_import_start_time();
|
||||
|
||||
// Define log file path.
|
||||
$this->log_file_path = Helpers::get_log_path();
|
||||
|
||||
$this->selected_index = 0;
|
||||
|
||||
// Get paths for the uploaded files.
|
||||
$this->selected_import_files = Helpers::process_uploaded_files( $_FILES, $this->log_file_path );
|
||||
|
||||
// Set the name of the import files, because we used the uploaded files.
|
||||
$this->import_files[ $this->selected_index ]['import_file_name'] = esc_html__( 'Manually uploaded files', 'himara' );
|
||||
|
||||
// Save the initial import data as a transient, so the next import call (in new AJAX call) can use that data.
|
||||
Helpers::set_ocdi_import_data_transient( $this->get_current_importer_data() );
|
||||
|
||||
wp_send_json_success();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Main AJAX callback function for:
|
||||
* 1). prepare import files (uploaded or predefined via filters)
|
||||
* 2). execute 'before content import' actions (before import WP action)
|
||||
* 3). import content
|
||||
* 4). execute 'after content import' actions (before widget import WP action, widget import, customizer import, after import WP action)
|
||||
*/
|
||||
public function import_demo_data_ajax_callback() {
|
||||
// Try to update PHP memory limit (so that it does not run out of it).
|
||||
ini_set( 'memory_limit', Helpers::apply_filters( 'ocdi/import_memory_limit', '350M' ) );
|
||||
|
||||
// Verify if the AJAX call is valid (checks nonce and current_user_can).
|
||||
Helpers::verify_ajax_call();
|
||||
|
||||
// Is this a new AJAX call to continue the previous import?
|
||||
$use_existing_importer_data = $this->use_existing_importer_data();
|
||||
|
||||
if ( ! $use_existing_importer_data ) {
|
||||
// Create a date and time string to use for demo and log file names.
|
||||
Helpers::set_demo_import_start_time();
|
||||
|
||||
// Define log file path.
|
||||
$this->log_file_path = Helpers::get_log_path();
|
||||
|
||||
// Get selected file index or set it to 0.
|
||||
$this->selected_index = empty( $_POST['selected'] ) ? 0 : absint( $_POST['selected'] );
|
||||
|
||||
/**
|
||||
* 1). Prepare import files.
|
||||
* Manually uploaded import files or predefined import files via filter: ocdi/import_files
|
||||
*/
|
||||
if ( ! empty( $_FILES ) ) { // Using manual file uploads?
|
||||
// Get paths for the uploaded files.
|
||||
$this->selected_import_files = Helpers::process_uploaded_files( $_FILES, $this->log_file_path );
|
||||
|
||||
// Set the name of the import files, because we used the uploaded files.
|
||||
$this->import_files[ $this->selected_index ]['import_file_name'] = esc_html__( 'Manually uploaded files', 'himara' );
|
||||
}
|
||||
elseif ( ! empty( $this->import_files[ $this->selected_index ] ) ) { // Use predefined import files from wp filter: ocdi/import_files.
|
||||
|
||||
// Download the import files (content, widgets and customizer files).
|
||||
$this->selected_import_files = Helpers::download_import_files( $this->import_files[ $this->selected_index ] );
|
||||
|
||||
// Check Errors.
|
||||
if ( is_wp_error( $this->selected_import_files ) ) {
|
||||
// Write error to log file and send an AJAX response with the error.
|
||||
Helpers::log_error_and_send_ajax_response(
|
||||
$this->selected_import_files->get_error_message(),
|
||||
$this->log_file_path,
|
||||
esc_html__( 'Downloaded files', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Add this message to log file.
|
||||
$log_added = Helpers::append_to_file(
|
||||
sprintf( /* translators: %s - the name of the selected import. */
|
||||
__( 'The import files for: %s were successfully downloaded!', 'himara' ),
|
||||
$this->import_files[ $this->selected_index ]['import_file_name']
|
||||
) . Helpers::import_file_info( $this->selected_import_files ),
|
||||
$this->log_file_path,
|
||||
esc_html__( 'Downloaded files' , 'himara' )
|
||||
);
|
||||
}
|
||||
else {
|
||||
// Send JSON Error response to the AJAX call.
|
||||
wp_send_json( esc_html__( 'No import files specified!', 'himara' ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Save the initial import data as a transient, so other import parts (in new AJAX calls) can use that data.
|
||||
Helpers::set_ocdi_import_data_transient( $this->get_current_importer_data() );
|
||||
|
||||
if ( ! $this->before_import_executed ) {
|
||||
$this->before_import_executed = true;
|
||||
|
||||
/**
|
||||
* 2). Execute the actions hooked to the 'ocdi/before_content_import_execution' action:
|
||||
*
|
||||
* Default actions:
|
||||
* 1 - Before content import WP action (with priority 10).
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/before_content_import_execution', $this->selected_import_files, $this->import_files, $this->selected_index );
|
||||
}
|
||||
|
||||
/**
|
||||
* 3). Import content (if the content XML file is set for this import).
|
||||
* Returns any errors greater then the "warning" logger level, that will be displayed on front page.
|
||||
*/
|
||||
if ( ! empty( $this->selected_import_files['content'] ) ) {
|
||||
$this->append_to_frontend_error_messages( $this->importer->import_content( $this->selected_import_files['content'] ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* 4). Execute the actions hooked to the 'ocdi/after_content_import_execution' action:
|
||||
*
|
||||
* Default actions:
|
||||
* 1 - Before widgets import setup (with priority 10).
|
||||
* 2 - Import widgets (with priority 20).
|
||||
* 3 - Import Redux data (with priority 30).
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/after_content_import_execution', $this->selected_import_files, $this->import_files, $this->selected_index );
|
||||
|
||||
// Save the import data as a transient, so other import parts (in new AJAX calls) can use that data.
|
||||
Helpers::set_ocdi_import_data_transient( $this->get_current_importer_data() );
|
||||
|
||||
// Request the customizer import AJAX call.
|
||||
if ( ! empty( $this->selected_import_files['customizer'] ) ) {
|
||||
wp_send_json( array( 'status' => 'customizerAJAX' ) );
|
||||
}
|
||||
|
||||
// Request the after all import AJAX call.
|
||||
if ( false !== Helpers::has_action( 'ocdi/after_all_import_execution' ) ) {
|
||||
wp_send_json( array( 'status' => 'afterAllImportAJAX' ) );
|
||||
}
|
||||
|
||||
// Update terms count.
|
||||
$this->update_terms_count();
|
||||
|
||||
// Send a JSON response with final report.
|
||||
$this->final_response();
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX callback for importing the customizer data.
|
||||
* This request has the wp_customize set to 'on', so that the customizer hooks can be called
|
||||
* (they can only be called with the $wp_customize instance). But if the $wp_customize is defined,
|
||||
* then the widgets do not import correctly, that's why the customizer import has its own AJAX call.
|
||||
*/
|
||||
public function import_customizer_data_ajax_callback() {
|
||||
// Verify if the AJAX call is valid (checks nonce and current_user_can).
|
||||
Helpers::verify_ajax_call();
|
||||
|
||||
// Get existing import data.
|
||||
if ( $this->use_existing_importer_data() ) {
|
||||
/**
|
||||
* Execute the customizer import actions.
|
||||
*
|
||||
* Default actions:
|
||||
* 1 - Customizer import (with priority 10).
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/customizer_import_execution', $this->selected_import_files );
|
||||
}
|
||||
|
||||
// Request the after all import AJAX call.
|
||||
if ( false !== Helpers::has_action( 'ocdi/after_all_import_execution' ) ) {
|
||||
wp_send_json( array( 'status' => 'afterAllImportAJAX' ) );
|
||||
}
|
||||
|
||||
// Send a JSON response with final report.
|
||||
$this->final_response();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* AJAX callback for the after all import action.
|
||||
*/
|
||||
public function after_all_import_data_ajax_callback() {
|
||||
// Verify if the AJAX call is valid (checks nonce and current_user_can).
|
||||
Helpers::verify_ajax_call();
|
||||
|
||||
// Get existing import data.
|
||||
if ( $this->use_existing_importer_data() ) {
|
||||
/**
|
||||
* Execute the after all import actions.
|
||||
*
|
||||
* Default actions:
|
||||
* 1 - after_import action (with priority 10).
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/after_all_import_execution', $this->selected_import_files, $this->import_files, $this->selected_index );
|
||||
}
|
||||
|
||||
// Update terms count.
|
||||
$this->update_terms_count();
|
||||
|
||||
// Send a JSON response with final report.
|
||||
$this->final_response();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Send a JSON response with final report.
|
||||
*/
|
||||
private function final_response() {
|
||||
// Delete importer data transient for current import.
|
||||
delete_transient( 'ocdi_importer_data' );
|
||||
|
||||
// Display final messages (success or warning messages).
|
||||
// $response['title'] = esc_html__( 'Import Complete!', 'himara' );
|
||||
$response['subtitle'] = '<div class="eth-notice eth-notice-info"><i class="dashicons dashicons-info-outline"></i><p>' . esc_html__( 'Congrats, your demo was imported successfully. You can now begin editing your site.', 'himara' ) . '</p></div>';
|
||||
$response['message'] = '<img class="ocdi-imported-content-imported ocdi-imported-content-imported--success" src="' . esc_url( OCDI_URL . 'assets/images/success.svg' ) . '" alt="' . esc_attr__( 'Successful Import', 'himara' ) . '">';
|
||||
|
||||
if ( ! empty( $this->frontend_error_messages ) ) {
|
||||
$response['subtitle'] = '<div class="eth-notice eth-notice-info"><i class="dashicons dashicons-info-outline"></i><p>' . esc_html__( 'Your import completed, but some things may not have imported properly.', 'himara' ) . '';
|
||||
|
||||
$response['subtitle'] .= sprintf(
|
||||
wp_kses(
|
||||
/* translators: %s - link to the log file. */
|
||||
__( '<a href="%s" target="_blank">View error log</a> for more information.', 'himara' ),
|
||||
array(
|
||||
'p' => [],
|
||||
'a' => [
|
||||
'href' => [],
|
||||
'target' => [],
|
||||
],
|
||||
)
|
||||
),
|
||||
Helpers::get_log_url( $this->log_file_path )
|
||||
);
|
||||
|
||||
$response['message'] = '<div class="notice notice-warning">' . $this->frontend_error_messages_display() . '</p></div></div>';
|
||||
}
|
||||
|
||||
wp_send_json( $response );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get content importer data, so we can continue the import with this new AJAX request.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function use_existing_importer_data() {
|
||||
if ( $data = get_transient( 'ocdi_importer_data' ) ) {
|
||||
$this->frontend_error_messages = empty( $data['frontend_error_messages'] ) ? array() : $data['frontend_error_messages'];
|
||||
$this->log_file_path = empty( $data['log_file_path'] ) ? '' : $data['log_file_path'];
|
||||
$this->selected_index = empty( $data['selected_index'] ) ? 0 : $data['selected_index'];
|
||||
$this->selected_import_files = empty( $data['selected_import_files'] ) ? array() : $data['selected_import_files'];
|
||||
$this->import_files = empty( $data['import_files'] ) ? array() : $data['import_files'];
|
||||
$this->before_import_executed = empty( $data['before_import_executed'] ) ? false : $data['before_import_executed'];
|
||||
$this->imported_terms = empty( $data['imported_terms'] ) ? [] : $data['imported_terms'];
|
||||
$this->importer->set_importer_data( $data );
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the current state of selected data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_current_importer_data() {
|
||||
return array(
|
||||
'frontend_error_messages' => $this->frontend_error_messages,
|
||||
'log_file_path' => $this->log_file_path,
|
||||
'selected_index' => $this->selected_index,
|
||||
'selected_import_files' => $this->selected_import_files,
|
||||
'import_files' => $this->import_files,
|
||||
'before_import_executed' => $this->before_import_executed,
|
||||
'imported_terms' => $this->imported_terms,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Getter function to retrieve the private log_file_path value.
|
||||
*
|
||||
* @return string The log_file_path value.
|
||||
*/
|
||||
public function get_log_file_path() {
|
||||
return $this->log_file_path;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Setter function to append additional value to the private frontend_error_messages value.
|
||||
*
|
||||
* @param string $additional_value The additional value that will be appended to the existing frontend_error_messages.
|
||||
*/
|
||||
public function append_to_frontend_error_messages( $text ) {
|
||||
$lines = array();
|
||||
|
||||
if ( ! empty( $text ) ) {
|
||||
$text = str_replace( '<br>', PHP_EOL, $text );
|
||||
$lines = explode( PHP_EOL, $text );
|
||||
}
|
||||
|
||||
foreach ( $lines as $line ) {
|
||||
if ( ! empty( $line ) && ! in_array( $line , $this->frontend_error_messages ) ) {
|
||||
$this->frontend_error_messages[] = $line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display the frontend error messages.
|
||||
*
|
||||
* @return string Text with HTML markup.
|
||||
*/
|
||||
public function frontend_error_messages_display() {
|
||||
$output = '';
|
||||
|
||||
if ( ! empty( $this->frontend_error_messages ) ) {
|
||||
foreach ( $this->frontend_error_messages as $line ) {
|
||||
$output .= esc_html( $line );
|
||||
$output .= '<br>';
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get data from filters, after the theme has loaded and instantiate the importer.
|
||||
*/
|
||||
public function setup_plugin_with_filter_data() {
|
||||
if ( ! ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get info of import data files and filter it.
|
||||
$this->import_files = Helpers::validate_import_file_info( Helpers::apply_filters( 'ocdi/import_files', array() ) );
|
||||
|
||||
/**
|
||||
* Register all default actions (before content import, widget, customizer import and other actions)
|
||||
* to the 'before_content_import_execution' and the 'ocdi/after_content_import_execution' action hook.
|
||||
*/
|
||||
$import_actions = new ImportActions();
|
||||
$import_actions->register_hooks();
|
||||
|
||||
// Importer options array.
|
||||
$importer_options = Helpers::apply_filters( 'ocdi/importer_options', array(
|
||||
'fetch_attachments' => true,
|
||||
) );
|
||||
|
||||
// Logger options for the logger used in the importer.
|
||||
$logger_options = Helpers::apply_filters( 'ocdi/logger_options', array(
|
||||
'logger_min_level' => 'warning',
|
||||
) );
|
||||
|
||||
// Configure logger instance and set it to the importer.
|
||||
$logger = new Logger();
|
||||
$logger->min_level = $logger_options['logger_min_level'];
|
||||
|
||||
// Create importer instance with proper parameters.
|
||||
$this->importer = new Importer( $importer_options, $logger );
|
||||
|
||||
// Prepare registered plugins and register AJAX callbacks.
|
||||
$this->plugin_installer = new PluginInstaller();
|
||||
$this->plugin_installer->init();
|
||||
|
||||
// Prepare registered pre-created demo content pages and the AJAX callback.
|
||||
$demo_content_creator = new CreateDemoContent\DemoContentCreator();
|
||||
$demo_content_creator->init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for $plugin_page_setup.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_plugin_page_setup() {
|
||||
return $this->plugin_page_setup;
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the begining of the container div for all notices, but only on OCDI pages.
|
||||
*/
|
||||
public function start_notice_output_capturing() {
|
||||
$screen = get_current_screen();
|
||||
|
||||
if ( false === strpos( $screen->base, $this->plugin_page_setup['menu_slug'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
echo '<div class="ocdi-notices-wrapper js-ocdi-notice-wrapper">';
|
||||
}
|
||||
|
||||
/**
|
||||
* Output the ending of the container div for all notices, but only on OCDI pages.
|
||||
*/
|
||||
public function finish_notice_output_capturing() {
|
||||
if ( is_network_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$screen = get_current_screen();
|
||||
|
||||
if ( false === strpos( $screen->base, $this->plugin_page_setup['menu_slug'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
echo '</div><!-- /.ocdi-notices-wrapper -->';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the URL of the plugin settings page.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_plugin_settings_url( $query_parameters = [] ) {
|
||||
if ( empty( $this->plugin_page_setup ) ) {
|
||||
$this->plugin_page_setup = Helpers::get_plugin_page_setup_data();
|
||||
}
|
||||
|
||||
$parameters = array_merge(
|
||||
array( 'page' => $this->plugin_page_setup['menu_slug'] ),
|
||||
$query_parameters
|
||||
);
|
||||
|
||||
$url = menu_page_url( $this->plugin_page_setup['parent_slug'], false );
|
||||
|
||||
if ( empty( $url ) ) {
|
||||
$url = self_admin_url( $this->plugin_page_setup['parent_slug'] );
|
||||
}
|
||||
|
||||
return add_query_arg( $parameters, $url );
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect from the old default OCDI settings page URL to the new one.
|
||||
*/
|
||||
public function redirect_from_old_default_admin_page() {
|
||||
global $pagenow;
|
||||
|
||||
if ( $pagenow == 'themes.php' && isset( $_GET['page'] ) && $_GET['page'] == 'pt-one-click-demo-import' ) {
|
||||
wp_safe_redirect( $this->get_plugin_settings_url() );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add imported terms.
|
||||
*
|
||||
* Mainly it's needed for saving all imported terms and trigger terms count updates.
|
||||
* WP core term defer counting is not working, since import split to chunks and we are losing `$_deffered` array
|
||||
* items between ajax calls.
|
||||
*/
|
||||
public function add_imported_terms( $object_id, $terms, $tt_ids, $taxonomy, $append, $old_tt_ids ){
|
||||
|
||||
if ( ! isset( $this->imported_terms[ $taxonomy ] ) ) {
|
||||
$this->imported_terms[ $taxonomy ] = array();
|
||||
}
|
||||
|
||||
$this->imported_terms[ $taxonomy ] = array_unique( array_merge( $this->imported_terms[ $taxonomy ], $tt_ids ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update imported terms count.
|
||||
*/
|
||||
private function update_terms_count() {
|
||||
|
||||
foreach ( $this->imported_terms as $tax => $terms ) {
|
||||
wp_update_term_count_now( $terms, $tax );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,553 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Installer class - responsible for installing other plugins.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class PluginInstaller {
|
||||
|
||||
/**
|
||||
* Holds all registered plugins.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $plugins;
|
||||
|
||||
/**
|
||||
* Initialize everything needed for the plugin installer class to function properly.
|
||||
*/
|
||||
public function init() {
|
||||
$this->set_plugins();
|
||||
|
||||
add_action( 'ocdi/plugin_intaller_before_plugin_activation', array( $this, 'before_plugin_activation' ) );
|
||||
add_action( 'ocdi/plugin_intaller_after_plugin_activation', array( $this, 'after_plugin_activation' ) );
|
||||
|
||||
add_action( 'wp_ajax_ocdi_install_plugin', array( $this, 'install_plugin_callback' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent the auto redirects for our recommended plugins.
|
||||
* This code is run before plugin is activated.
|
||||
*
|
||||
* @param string $slug The plugin slug.
|
||||
*/
|
||||
public function before_plugin_activation( $slug ) {
|
||||
// Disable the WPForms redirect after plugin activation.
|
||||
if ( $slug === 'wpforms-lite' ) {
|
||||
update_option( 'wpforms_activation_redirect', true );
|
||||
}
|
||||
|
||||
// Disable the AIOSEO redirect after plugin activation.
|
||||
if ( $slug === 'all-in-one-seo-pack' ) {
|
||||
update_option( 'aioseo_activation_redirect', true );
|
||||
}
|
||||
|
||||
// Disable the WP Mail SMTP redirect after plugin activation.
|
||||
if ( $slug === 'wp-mail-smtp' ) {
|
||||
update_option( 'wp_mail_smtp_activation_prevent_redirect', true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent the auto redirects for our recommended plugins.
|
||||
* This code is run after plugin is activated.
|
||||
*
|
||||
* @param string $slug The plugin slug.
|
||||
*/
|
||||
public function after_plugin_activation( $slug ) {
|
||||
// Disable the RafflePress redirect after plugin activation.
|
||||
if ( $slug === 'rafflepress' ) {
|
||||
delete_transient('_rafflepress_welcome_screen_activation_redirect');
|
||||
}
|
||||
|
||||
// Disable the MonsterInsights redirect after plugin activation.
|
||||
if ( $slug === 'google-analytics-for-wordpress' ) {
|
||||
delete_transient('_monsterinsights_activation_redirect');
|
||||
}
|
||||
|
||||
// Disable the SeedProd redirect after the plugin activation.
|
||||
if ( $slug === 'coming-soon' ) {
|
||||
delete_transient( '_seedprod_welcome_screen_activation_redirect' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all partner plugins data.
|
||||
*
|
||||
* @return array[]
|
||||
*/
|
||||
public function get_partner_plugins() {
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all registered plugins.
|
||||
* With our recommended plugins being set as defaults.
|
||||
*/
|
||||
public function set_plugins() {
|
||||
$all_plugins = array_merge( $this->get_partner_plugins(), Helpers::apply_filters( 'ocdi/register_plugins', array() ) );
|
||||
|
||||
$this->plugins = $this->filter_plugins( $all_plugins );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all theme registered plugins.
|
||||
* With our 3 top recommended plugins being set as defaults.
|
||||
*/
|
||||
public function get_theme_plugins() {
|
||||
$default_plugins = $this->get_top_partner_plugins();
|
||||
|
||||
$theme_plugins = array_merge( $default_plugins, Helpers::apply_filters( 'ocdi/register_plugins', array() ) );
|
||||
|
||||
return $this->filter_plugins( $theme_plugins );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the top 3 partner plugins if they are not already activated.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function get_top_partner_plugins() {
|
||||
$installed_plugins = $this->get_plugins();
|
||||
$contact_form = [
|
||||
'wpforms-lite/wpforms.php',
|
||||
'wpforms/wpforms.php',
|
||||
'formidable/formidable.php',
|
||||
'formidable/formidable-pro.php',
|
||||
'gravityforms/gravityforms.php',
|
||||
'ninja-forms/ninja-forms.php',
|
||||
];
|
||||
$seo = [
|
||||
'all-in-one-seo-pack/all_in_one_seo_pack.php',
|
||||
'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
|
||||
'wordpress-seo/wp-seo.php',
|
||||
'wordpress-seo-premium/wp-seo-premium.php',
|
||||
'seo-by-rank-math/rank-math.php',
|
||||
'seo-by-rank-math-pro/rank-math-pro.php',
|
||||
];
|
||||
$google_analytics = [
|
||||
'google-analytics-for-wordpress/googleanalytics.php',
|
||||
'exactmetrics-premium/exactmetrics-premium.php',
|
||||
'google-analytics-dashboard-for-wp/gadwp.php',
|
||||
];
|
||||
|
||||
$plugins = array_slice( $this->get_partner_plugins(), 0, 3 );
|
||||
|
||||
$plugins = array_map( function ( $plugin ) {
|
||||
unset( $plugin['preselected'] );
|
||||
|
||||
return $plugin;
|
||||
} , $plugins );
|
||||
|
||||
return array_filter(
|
||||
$plugins,
|
||||
function ( $plugin ) use ( $installed_plugins, $contact_form, $seo, $google_analytics ) {
|
||||
if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( 'wpforms-lite' === $plugin['slug'] ) {
|
||||
foreach ( $installed_plugins as $basename => $plugin_info ) {
|
||||
if ( in_array( $basename, $contact_form, true ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} elseif ( 'all-in-one-seo-pack' === $plugin['slug'] ) {
|
||||
foreach ( $installed_plugins as $basename => $plugin_info ) {
|
||||
if ( in_array( $basename, $seo, true ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} elseif ( 'google-analytics-for-wordpress' === $plugin['slug'] ) {
|
||||
foreach ( $installed_plugins as $basename => $plugin_info ) {
|
||||
if ( in_array( $basename, $google_analytics, true ) ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX callback for installing a plugin.
|
||||
* Has to contain the `slug` POST parameter.
|
||||
*/
|
||||
public function install_plugin_callback() {
|
||||
check_ajax_referer( 'ocdi-ajax-verification', 'security' );
|
||||
|
||||
// Check if user has the WP capability to install plugins.
|
||||
if ( ! current_user_can( 'install_plugins' ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not install the plugin. You don\'t have permission to install plugins.', 'himara' ) );
|
||||
}
|
||||
|
||||
$slug = ! empty( $_POST['slug'] ) ? sanitize_key( wp_unslash( $_POST['slug'] ) ) : '';
|
||||
|
||||
if ( empty( $slug ) ) {
|
||||
wp_send_json_error( esc_html__( 'Could not install the plugin. Plugin slug is missing.', 'himara' ) );
|
||||
}
|
||||
|
||||
// Check if the plugin is already installed and activated.
|
||||
if ( $this->is_plugin_active( $slug ) ) {
|
||||
wp_send_json_success( esc_html__( 'Plugin is already installed and activated!', 'himara' ) );
|
||||
}
|
||||
|
||||
// Activate the plugin if the plugin is already installed.
|
||||
if ( $this->is_plugin_installed( $slug ) ) {
|
||||
$activated = $this->activate_plugin( $this->get_plugin_basename_from_slug( $slug ), $slug );
|
||||
|
||||
if ( ! is_wp_error( $activated ) ) {
|
||||
wp_send_json_success( esc_html__( 'Plugin was already installed! We activated it for you.', 'himara' ) );
|
||||
} else {
|
||||
wp_send_json_error( $activated->get_error_message() );
|
||||
}
|
||||
}
|
||||
|
||||
// Check for file system permissions.
|
||||
if ( ! $this->filesystem_permissions_allowed() ) {
|
||||
wp_send_json_error( esc_html__( 'Could not install the plugin. Don\'t have file permission.', 'himara' ) );
|
||||
}
|
||||
|
||||
// Do not allow WordPress to search/download translations, as this will break JS output.
|
||||
remove_action( 'upgrader_process_complete', [ 'Language_Pack_Upgrader', 'async_upgrade' ], 20 );
|
||||
|
||||
// Prep variables for Plugin_Installer_Skin class.
|
||||
$extra = array();
|
||||
$extra['slug'] = $slug; // Needed for potentially renaming of directory name.
|
||||
$source = $this->get_download_url( $slug );
|
||||
$api = empty( $this->get_plugin_data( $slug )['source'] ) ? $this->get_plugins_api( $slug ) : null;
|
||||
$api = ( false !== $api ) ? $api : null;
|
||||
|
||||
if ( ! empty( $api ) && is_wp_error( $api ) ) {
|
||||
wp_send_json_error( $api->get_error_message() );
|
||||
}
|
||||
|
||||
if ( ! class_exists( '\Plugin_Upgrader', false ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
}
|
||||
|
||||
$skin_args = array(
|
||||
'type' => 'web',
|
||||
'plugin' => '',
|
||||
'api' => $api,
|
||||
'extra' => $extra,
|
||||
);
|
||||
|
||||
$upgrader = new \Plugin_Upgrader( new PluginInstallerSkin( $skin_args ) );
|
||||
|
||||
$upgrader->install( $source );
|
||||
|
||||
// Flush the cache and return the newly installed plugin basename.
|
||||
wp_cache_flush();
|
||||
|
||||
if ( $upgrader->plugin_info() ) {
|
||||
$activated = $this->activate_plugin( $upgrader->plugin_info(), $slug );
|
||||
|
||||
if ( ! is_wp_error( $activated ) ) {
|
||||
wp_send_json_success(
|
||||
esc_html__( 'Plugin installed and activated succesfully.', 'himara' )
|
||||
);
|
||||
} else {
|
||||
wp_send_json_success( $activated->get_error_message() );
|
||||
}
|
||||
}
|
||||
|
||||
wp_send_json_error( esc_html__( 'Could not install the plugin. WP Plugin installer could not retrieve plugin information.', 'himara' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Direct plugin install, without AJAX responses.
|
||||
*
|
||||
* @param string $slug The registered plugin slug to install.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function install_plugin( $slug ) {
|
||||
if ( empty( $slug ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if user has the WP capability to install plugins.
|
||||
if ( ! current_user_can( 'install_plugins' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if the plugin is already installed and activated.
|
||||
if ( $this->is_plugin_active( $slug ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Activate the plugin if the plugin is already installed.
|
||||
if ( $this->is_plugin_installed( $slug ) ) {
|
||||
$activated = $this->activate_plugin( $this->get_plugin_basename_from_slug( $slug ), $slug );
|
||||
|
||||
return ! is_wp_error( $activated );
|
||||
}
|
||||
|
||||
// Check for file system permissions.
|
||||
if ( ! $this->filesystem_permissions_allowed() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not allow WordPress to search/download translations, as this will break JS output.
|
||||
remove_action( 'upgrader_process_complete', [ 'Language_Pack_Upgrader', 'async_upgrade' ], 20 );
|
||||
|
||||
// Prep variables for Plugin_Installer_Skin class.
|
||||
$extra = array();
|
||||
$extra['slug'] = $slug; // Needed for potentially renaming of directory name.
|
||||
$source = $this->get_download_url( $slug );
|
||||
$api = empty( $this->get_plugin_data( $slug )['source'] ) ? $this->get_plugins_api( $slug ) : null;
|
||||
$api = ( false !== $api ) ? $api : null;
|
||||
|
||||
if ( ! empty( $api ) && is_wp_error( $api ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! class_exists( '\Plugin_Upgrader', false ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
}
|
||||
|
||||
$skin_args = array(
|
||||
'type' => 'web',
|
||||
'plugin' => '',
|
||||
'api' => $api,
|
||||
'extra' => $extra,
|
||||
);
|
||||
|
||||
$upgrader = new \Plugin_Upgrader( new PluginInstallerSkinSilent( $skin_args ) );
|
||||
|
||||
$upgrader->install( $source );
|
||||
|
||||
// Flush the cache and return the newly installed plugin basename.
|
||||
wp_cache_flush();
|
||||
|
||||
if ( $upgrader->plugin_info() ) {
|
||||
$activated = $this->activate_plugin( $upgrader->plugin_info(), $slug );
|
||||
|
||||
if ( ! is_wp_error( $activated ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activate the plugin with the before and after hooks.
|
||||
*
|
||||
* @param string $plugin_filename The plugin's basename(example: wpforms/wpforms.php).
|
||||
* @param string $slug The plugin's slug.
|
||||
*
|
||||
* @return null|WP_Error Null on success, WP_Error on invalid file.
|
||||
*/
|
||||
private function activate_plugin( $plugin_filename, $slug ) {
|
||||
Helpers::do_action( 'ocdi/plugin_intaller_before_plugin_activation', $slug );
|
||||
|
||||
$activated = activate_plugin( $plugin_filename );
|
||||
|
||||
Helpers::do_action( 'ocdi/plugin_intaller_after_plugin_activation', $slug );
|
||||
|
||||
return $activated;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check for the filesystem permissions.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function filesystem_permissions_allowed() {
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$url = esc_url_raw( $ocdi->get_plugin_settings_url() );
|
||||
$creds = request_filesystem_credentials( $url, '', false, false, null );
|
||||
|
||||
// Check for file system permissions.
|
||||
if ( false === $creds || ! WP_Filesystem( $creds ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data of a registered plugin via the slug.
|
||||
*
|
||||
* @param string $slug The plugin slug.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_plugin_data( $slug ) {
|
||||
$data = [];
|
||||
|
||||
foreach ( $this->plugins as $plugin ) {
|
||||
if ( $plugin['slug'] === $slug ) {
|
||||
$data = $plugin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the download URL for a plugin.
|
||||
*
|
||||
* @param string $slug Plugin slug.
|
||||
*
|
||||
* @return string Plugin download URL.
|
||||
*/
|
||||
public function get_download_url( $slug ) {
|
||||
$plugin_data = $this->get_plugin_data( $slug );
|
||||
|
||||
if ( ! empty( $plugin_data['source'] ) ) {
|
||||
return $plugin_data['source'];
|
||||
}
|
||||
|
||||
return $this->get_wp_repo_download_url( $slug );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the download URL from the WP.org.
|
||||
*
|
||||
* @param string $slug Plugin slug.
|
||||
*
|
||||
* @return string Plugin download URL from WP.org.
|
||||
*/
|
||||
protected function get_wp_repo_download_url( $slug ) {
|
||||
$source = '';
|
||||
$api = $this->get_plugins_api( $slug );
|
||||
|
||||
if ( false !== $api && isset( $api->download_link ) ) {
|
||||
$source = $api->download_link;
|
||||
}
|
||||
|
||||
return $source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to grab information from WordPress API.
|
||||
*
|
||||
* @param string $slug Plugin slug.
|
||||
*
|
||||
* @return object Plugins_api response object on success, WP_Error on failure.
|
||||
*/
|
||||
protected function get_plugins_api( $slug ) {
|
||||
static $api = array(); // Cache received responses.
|
||||
|
||||
if ( ! isset( $api[ $slug ] ) ) {
|
||||
if ( ! function_exists( 'plugins_api' ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
|
||||
}
|
||||
|
||||
$api[ $slug ] = plugins_api( 'plugin_information', array( 'slug' => $slug, 'fields' => array( 'sections' => false ) ) );
|
||||
}
|
||||
|
||||
return $api[ $slug ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper around the core WP get_plugins function, making sure it's actually available.
|
||||
*
|
||||
* @param string $plugin_folder Optional. Relative path to single plugin folder.
|
||||
*
|
||||
* @return array Array of installed plugins with plugin information.
|
||||
*/
|
||||
public function get_plugins( $plugin_folder = '' ) {
|
||||
if ( ! function_exists( 'get_plugins' ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
||||
}
|
||||
|
||||
return get_plugins( $plugin_folder );
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to extract the plugin file path from the
|
||||
* plugin slug, if the plugin is installed.
|
||||
*
|
||||
* @param string $slug Plugin slug (typically folder name) as provided by the developer.
|
||||
*
|
||||
* @return string|bool Either plugin file path for plugin if installed, or false.
|
||||
*/
|
||||
protected function get_plugin_basename_from_slug( $slug ) {
|
||||
$keys = array_keys( $this->get_plugins() );
|
||||
|
||||
foreach ( $keys as $key ) {
|
||||
if ( preg_match( '/^' . $slug . '\//', $key ) ) {
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a plugin is installed. Does not take must-use plugins into account.
|
||||
*
|
||||
* @param string $slug Plugin slug.
|
||||
*
|
||||
* @return bool True if installed, false otherwise.
|
||||
*/
|
||||
public function is_plugin_installed( $slug ) {
|
||||
return ( ! empty( $this->get_plugin_basename_from_slug( $slug ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a plugin is active.
|
||||
*
|
||||
* @param string $slug Plugin slug.
|
||||
*
|
||||
* @return bool True if active, false otherwise.
|
||||
*/
|
||||
public function is_plugin_active( $slug ) {
|
||||
$plugin_path = $this->get_plugin_basename_from_slug( $slug );
|
||||
|
||||
if ( empty( $plugin_path ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return is_plugin_active( $plugin_path );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of plugins (with their data) of all non-active and non-installed registered plugins.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_missing_plugins() {
|
||||
$missing = [];
|
||||
|
||||
foreach ( $this->plugins as $plugin_data ) {
|
||||
if ( ! $this->is_plugin_active( $plugin_data['slug'] ) ) {
|
||||
$missing[] = $plugin_data;
|
||||
}
|
||||
}
|
||||
|
||||
return $missing;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return only plugins with required attributes:
|
||||
* - name
|
||||
* - slug
|
||||
*
|
||||
* @param array $plugins The array of plugin's data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function filter_plugins( $plugins ) {
|
||||
return array_filter(
|
||||
$plugins,
|
||||
function ( $plugin ) {
|
||||
if ( empty( $plugin['slug'] ) || empty( $plugin['name'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Installer Skin class - responsible for displying info while installing plugins.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
if ( ! class_exists( '\Plugin_Upgrader', false ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* WordPress class extended for on-the-fly plugin installations.
|
||||
*/
|
||||
class PluginInstallerSkin extends \WP_Upgrader_Skin {
|
||||
|
||||
/**
|
||||
* Empty out the header of its HTML content.
|
||||
*/
|
||||
public function header() {}
|
||||
|
||||
/**
|
||||
* Empty out the footer of its HTML content.
|
||||
*/
|
||||
public function footer() {}
|
||||
|
||||
/**
|
||||
* Empty out the footer of its HTML content.
|
||||
*
|
||||
* @param string $string
|
||||
* @param mixed ...$args Optional text replacements.
|
||||
*/
|
||||
public function feedback( $string, ...$args ) {}
|
||||
|
||||
/**
|
||||
* Empty out JavaScript output that calls function to decrement the update counts.
|
||||
*
|
||||
* @param string $type Type of update count to decrement.
|
||||
*/
|
||||
public function decrement_update_count( $type ) {}
|
||||
|
||||
/**
|
||||
* Instead of outputting HTML for errors, json_encode the errors and send them
|
||||
* back to the Ajax script for processing.
|
||||
*
|
||||
* @param string|WP_Error $errors A string or WP_Error object of the install error/s.
|
||||
*/
|
||||
public function error( $errors ) {
|
||||
if ( empty( $errors ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_string( $errors ) ) {
|
||||
wp_send_json_error( $errors );
|
||||
} elseif ( is_wp_error( $errors ) && $errors->has_errors() ) {
|
||||
if ( $errors->get_error_data() && is_string( $errors->get_error_data() ) ) {
|
||||
wp_send_json_error( $message . ' ' . esc_html( strip_tags( $errors->get_error_data() ) ) );
|
||||
} else {
|
||||
wp_send_json_error( $message );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin Installer Skin class - responsible for not displying any info while installing plugins.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
if ( ! class_exists( '\Plugin_Upgrader', false ) ) {
|
||||
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* WordPress class extended for on-the-fly plugin installations.
|
||||
*/
|
||||
class PluginInstallerSkinSilent extends \WP_Upgrader_Skin {
|
||||
|
||||
/**
|
||||
* Empty out the header of its HTML content.
|
||||
*/
|
||||
public function header() {}
|
||||
|
||||
/**
|
||||
* Empty out the footer of its HTML content.
|
||||
*/
|
||||
public function footer() {}
|
||||
|
||||
/**
|
||||
* Empty out the footer of its HTML content.
|
||||
*
|
||||
* @param string $string
|
||||
* @param mixed ...$args Optional text replacements.
|
||||
*/
|
||||
public function feedback( $string, ...$args ) {}
|
||||
|
||||
/**
|
||||
* Empty out JavaScript output that calls function to decrement the update counts.
|
||||
*
|
||||
* @param string $type Type of update count to decrement.
|
||||
*/
|
||||
public function decrement_update_count( $type ) {}
|
||||
|
||||
/**
|
||||
* Empty out the error HTML content.
|
||||
*
|
||||
* @param string|WP_Error $errors A string or WP_Error object of the install error/s.
|
||||
*/
|
||||
public function error( $errors ) {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for the Redux importer used in the One Click Demo Import plugin.
|
||||
*
|
||||
* @see https://wordpress.org/plugins/redux-framework/
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class ReduxImporter {
|
||||
/**
|
||||
* Import Redux data from a JSON file, generated by the Redux plugin.
|
||||
*
|
||||
* @param array $import_data Array of arrays. Child array contains 'option_name' and 'file_path'.
|
||||
*/
|
||||
public static function import( $import_data ) {
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$log_file_path = $ocdi->get_log_file_path();
|
||||
|
||||
// Redux plugin is not active!
|
||||
if ( ! class_exists( 'ReduxFramework' ) ) {
|
||||
$error_message = esc_html__( 'The Redux plugin is not activated, so the Redux import was skipped!', 'himara' );
|
||||
|
||||
// Add any error messages to the frontend_error_messages variable in OCDI main class.
|
||||
$ocdi->append_to_frontend_error_messages( $error_message );
|
||||
|
||||
// Write error to log file.
|
||||
Helpers::append_to_file(
|
||||
$error_message,
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing Redux settings' , 'himara' )
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $import_data as $redux_item ) {
|
||||
$redux_options_raw_data = Helpers::data_from_file( $redux_item['file_path'] );
|
||||
|
||||
$redux_options_data = json_decode( $redux_options_raw_data, true );
|
||||
|
||||
$redux_framework = \ReduxFrameworkInstances::get_instance( $redux_item['option_name'] );
|
||||
|
||||
if ( isset( $redux_framework->args['opt_name'] ) ) {
|
||||
|
||||
// Import Redux settings.
|
||||
$redux_framework->options_class->set( $redux_options_data );
|
||||
|
||||
// Add this message to log file.
|
||||
$log_added = Helpers::append_to_file( /* translators: %s - the name of the Redux option. */
|
||||
sprintf( esc_html__( 'Redux settings import for: %s finished successfully!', 'himara' ), $redux_item['option_name'] ),
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing Redux settings' , 'himara' )
|
||||
);
|
||||
}
|
||||
else { /* translators: %s - the name of the Redux option. */
|
||||
$error_message = sprintf( esc_html__( 'The Redux option name: %s, was not found in this WP site, so it was not imported!', 'himara' ), $redux_item['option_name'] );
|
||||
|
||||
// Add any error messages to the frontend_error_messages variable in OCDI main class.
|
||||
$ocdi->append_to_frontend_error_messages( $error_message );
|
||||
|
||||
// Write error to log file.
|
||||
Helpers::append_to_file(
|
||||
$error_message,
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing Redux settings' , 'himara' )
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* Static functions used in the OCDI plugin views.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class ViewHelpers {
|
||||
/**
|
||||
* The HTML output of the plugin page header.
|
||||
*
|
||||
* @return string HTML output.
|
||||
*/
|
||||
public static function plugin_header_output() {
|
||||
ob_start(); ?>
|
||||
<div class="eth-admin-header">
|
||||
<div class="eth-admin-header-inner">
|
||||
<div class="eth-admin-brand">
|
||||
<a href="https://eagle-themes.com/?utm_source=eth_header_logo" target="_blank" class="eth-admin-logo">
|
||||
<img src="<?php echo get_template_directory_uri().'/assets/images/admin/eth_logo.png'?>" alt="Eagle Themes">
|
||||
</a>
|
||||
<div class="eth-admin-slogan">
|
||||
<span><?php echo HIMARA_THEME_NAME ?> <small><?php echo HIMARA_THEME_VERSION ?></small></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="eth-admin-menu">
|
||||
<div class="view-switcher">
|
||||
<a href="admin.php?page=himara_dashboard" class="btn"><?php echo __('Dashboard', 'himara') ?></a>
|
||||
<a href="admin.php?page=himara_demo_importer" class="btn active"><?php echo __('Demo Importer', 'himara') ?></a>
|
||||
<a href="admin.php?page=himara_options" class="btn"><?php echo __('Theme Settings', 'himara' )?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
$plugin_title = ob_get_clean();
|
||||
|
||||
// Display the plugin title (can be replaced with custom title text through the filter below).
|
||||
return Helpers::apply_filters( 'ocdi/plugin_page_title', $plugin_title );
|
||||
}
|
||||
|
||||
/**
|
||||
* The HTML output of a small card with theme screenshot and title.
|
||||
*
|
||||
* @return string HTML output.
|
||||
*/
|
||||
public static function small_theme_card( $selected = null ) {
|
||||
$theme = wp_get_theme();
|
||||
$screenshot = $theme->get_screenshot();
|
||||
$name = $theme->name;
|
||||
|
||||
if ( isset( $selected ) ) {
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$selected_data = $ocdi->import_files[ $selected ];
|
||||
$name = ! empty( $selected_data['import_file_name'] ) ? $selected_data['import_file_name'] : $name;
|
||||
$screenshot = ! empty( $selected_data['import_preview_image_url'] ) ? $selected_data['import_preview_image_url'] : $screenshot;
|
||||
}
|
||||
|
||||
ob_start(); ?>
|
||||
<div class="ocdi__card ocdi__card--theme">
|
||||
<div class="ocdi__card-content">
|
||||
<?php if ( $screenshot ) : ?>
|
||||
<div class="screenshot"><img src="<?php echo esc_url( $screenshot ); ?>" alt="<?php esc_attr_e( 'Theme screenshot', 'himara' ); ?>" /></div>
|
||||
<?php else : ?>
|
||||
<div class="screenshot blank"></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<h3><?php echo esc_html( $name ); ?></h3>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
/**
|
||||
* WXR importer class used in the One Click Demo Import plugin.
|
||||
* Needed to extend the WXR_Importer class to get/set the importer protected variables,
|
||||
* for use in the multiple AJAX calls.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class WXRImporter extends \AwesomeMotive\WPContentImporter2\WXRImporter {
|
||||
/**
|
||||
* Constructor method.
|
||||
*
|
||||
* @param array $options Importer options.
|
||||
*/
|
||||
public function __construct( $options = array() ) {
|
||||
parent::__construct( $options );
|
||||
|
||||
// Set current user to $mapping variable.
|
||||
// Fixes the [WARNING] Could not find the author for ... log warning messages.
|
||||
$current_user_obj = wp_get_current_user();
|
||||
$this->mapping['user_slug'][ $current_user_obj->user_login ] = $current_user_obj->ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all protected variables from the WXR_Importer needed for continuing the import.
|
||||
*/
|
||||
public function get_importer_data() {
|
||||
return array(
|
||||
'mapping' => $this->mapping,
|
||||
'requires_remapping' => $this->requires_remapping,
|
||||
'exists' => $this->exists,
|
||||
'user_slug_override' => $this->user_slug_override,
|
||||
'url_remap' => $this->url_remap,
|
||||
'featured_images' => $this->featured_images,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets all protected variables from the WXR_Importer needed for continuing the import.
|
||||
*
|
||||
* @param array $data with set variables.
|
||||
*/
|
||||
public function set_importer_data( $data ) {
|
||||
$this->mapping = empty( $data['mapping'] ) ? array() : $data['mapping'];
|
||||
$this->requires_remapping = empty( $data['requires_remapping'] ) ? array() : $data['requires_remapping'];
|
||||
$this->exists = empty( $data['exists'] ) ? array() : $data['exists'];
|
||||
$this->user_slug_override = empty( $data['user_slug_override'] ) ? array() : $data['user_slug_override'];
|
||||
$this->url_remap = empty( $data['url_remap'] ) ? array() : $data['url_remap'];
|
||||
$this->featured_images = empty( $data['featured_images'] ) ? array() : $data['featured_images'];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
<?php
|
||||
/**
|
||||
* Class for the widget importer used in the One Click Demo Import plugin.
|
||||
*
|
||||
* Code is mostly from the Widget Importer & Exporter plugin.
|
||||
*
|
||||
* @see https://wordpress.org/plugins/widget-importer-exporter/
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
class WidgetImporter {
|
||||
/**
|
||||
* Import widgets from WIE or JSON file.
|
||||
*
|
||||
* @param string $widget_import_file_path path to the widget import file.
|
||||
*/
|
||||
public static function import( $widget_import_file_path ) {
|
||||
$results = array();
|
||||
$ocdi = OneClickDemoImport::get_instance();
|
||||
$log_file_path = $ocdi->get_log_file_path();
|
||||
|
||||
// Import widgets and return result.
|
||||
if ( ! empty( $widget_import_file_path ) ) {
|
||||
$results = self::import_widgets( $widget_import_file_path );
|
||||
}
|
||||
|
||||
// Check for errors, else write the results to the log file.
|
||||
if ( is_wp_error( $results ) ) {
|
||||
$error_message = $results->get_error_message();
|
||||
|
||||
// Add any error messages to the frontend_error_messages variable in OCDI main class.
|
||||
$ocdi->append_to_frontend_error_messages( $error_message );
|
||||
|
||||
// Write error to log file.
|
||||
Helpers::append_to_file(
|
||||
$error_message,
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing widgets', 'himara' )
|
||||
);
|
||||
}
|
||||
else {
|
||||
ob_start();
|
||||
self::format_results_for_log( $results );
|
||||
$message = ob_get_clean();
|
||||
|
||||
// Add this message to log file.
|
||||
$log_added = Helpers::append_to_file(
|
||||
$message,
|
||||
$log_file_path,
|
||||
esc_html__( 'Importing widgets' , 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Imports widgets from a json file.
|
||||
*
|
||||
* @param string $data_file path to json file with WordPress widget export data.
|
||||
*/
|
||||
private static function import_widgets( $data_file ) {
|
||||
// Get widgets data from file.
|
||||
$data = self::process_import_file( $data_file );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $data ) ) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
// Import the widget data and save the results.
|
||||
return self::import_data( $data );
|
||||
}
|
||||
|
||||
/**
|
||||
* Process import file - this parses the widget data and returns it.
|
||||
*
|
||||
* @param string $file path to json file.
|
||||
* @return object $data decoded JSON string
|
||||
*/
|
||||
private static function process_import_file( $file ) {
|
||||
// File exists?
|
||||
if ( ! file_exists( $file ) ) {
|
||||
return new \WP_Error(
|
||||
'widget_import_file_not_found',
|
||||
__( 'Error: Widget import file could not be found.', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Get file contents and decode.
|
||||
$data = Helpers::data_from_file( $file );
|
||||
|
||||
// Return from this function if there was an error.
|
||||
if ( is_wp_error( $data ) ) {
|
||||
return $data;
|
||||
}
|
||||
|
||||
return json_decode( $data );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Import widget JSON data
|
||||
*
|
||||
* @global array $wp_registered_sidebars
|
||||
* @param object $data JSON widget data.
|
||||
* @return array $results
|
||||
*/
|
||||
private static function import_data( $data ) {
|
||||
global $wp_registered_sidebars;
|
||||
|
||||
// Have valid data? If no data or could not decode.
|
||||
if ( empty( $data ) || ! is_object( $data ) ) {
|
||||
return new \WP_Error(
|
||||
'corrupted_widget_import_data',
|
||||
__( 'Error: Widget import data could not be read. Please try a different file.', 'himara' )
|
||||
);
|
||||
}
|
||||
|
||||
// Hook before import.
|
||||
Helpers::do_action( 'ocdi/widget_importer_before_widgets_import' );
|
||||
$data = Helpers::apply_filters( 'ocdi/before_widgets_import_data', $data );
|
||||
|
||||
// Get all available widgets site supports.
|
||||
$available_widgets = self::available_widgets();
|
||||
|
||||
// Get all existing widget instances.
|
||||
$widget_instances = array();
|
||||
|
||||
foreach ( $available_widgets as $widget_data ) {
|
||||
$widget_instances[ $widget_data['id_base'] ] = get_option( 'widget_' . $widget_data['id_base'] );
|
||||
}
|
||||
|
||||
// Begin results.
|
||||
$results = array();
|
||||
|
||||
// Loop import data's sidebars.
|
||||
foreach ( $data as $sidebar_id => $widgets ) {
|
||||
// Skip inactive widgets (should not be in export file).
|
||||
if ( 'wp_inactive_widgets' == $sidebar_id ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if sidebar is available on this site. Otherwise add widgets to inactive, and say so.
|
||||
if ( isset( $wp_registered_sidebars[ $sidebar_id ] ) ) {
|
||||
$sidebar_available = true;
|
||||
$use_sidebar_id = $sidebar_id;
|
||||
$sidebar_message_type = 'success';
|
||||
$sidebar_message = '';
|
||||
}
|
||||
else {
|
||||
$sidebar_available = false;
|
||||
$use_sidebar_id = 'wp_inactive_widgets'; // Add to inactive if sidebar does not exist in theme.
|
||||
$sidebar_message_type = 'error';
|
||||
$sidebar_message = __( 'Sidebar does not exist in theme (moving widget to Inactive)', 'himara' );
|
||||
}
|
||||
|
||||
// Result for sidebar.
|
||||
$results[ $sidebar_id ]['name'] = ! empty( $wp_registered_sidebars[ $sidebar_id ]['name'] ) ? $wp_registered_sidebars[ $sidebar_id ]['name'] : $sidebar_id; // Sidebar name if theme supports it; otherwise ID.
|
||||
$results[ $sidebar_id ]['message_type'] = $sidebar_message_type;
|
||||
$results[ $sidebar_id ]['message'] = $sidebar_message;
|
||||
$results[ $sidebar_id ]['widgets'] = array();
|
||||
|
||||
// Loop widgets.
|
||||
foreach ( $widgets as $widget_instance_id => $widget ) {
|
||||
$fail = false;
|
||||
|
||||
// Get id_base (remove -# from end) and instance ID number.
|
||||
$id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id );
|
||||
$instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id );
|
||||
|
||||
// Does site support this widget?
|
||||
if ( ! $fail && ! isset( $available_widgets[ $id_base ] ) ) {
|
||||
$fail = true;
|
||||
$widget_message_type = 'error';
|
||||
$widget_message = __( 'Site does not support widget', 'himara' ); // Explain why widget not imported.
|
||||
}
|
||||
|
||||
// Filter to modify settings object before conversion to array and import.
|
||||
// Leave this filter here for backwards compatibility with manipulating objects (before conversion to array below).
|
||||
// Ideally the newer wie_widget_settings_array below will be used instead of this.
|
||||
$widget = Helpers::apply_filters( 'ocdi/widget_settings', $widget ); // Object.
|
||||
|
||||
// Convert multidimensional objects to multidimensional arrays.
|
||||
// Some plugins like Jetpack Widget Visibility store settings as multidimensional arrays.
|
||||
// Without this, they are imported as objects and cause fatal error on Widgets page.
|
||||
// If this creates problems for plugins that do actually intend settings in objects then may need to consider other approach: https://wordpress.org/support/topic/problem-with-array-of-arrays.
|
||||
// It is probably much more likely that arrays are used than objects, however.
|
||||
$widget = json_decode( json_encode( $widget ), true );
|
||||
|
||||
// Filter to modify settings array.
|
||||
// This is preferred over the older wie_widget_settings filter above.
|
||||
// Do before identical check because changes may make it identical to end result (such as URL replacements).
|
||||
$widget = Helpers::apply_filters( 'ocdi/widget_settings_array', $widget );
|
||||
|
||||
// Does widget with identical settings already exist in same sidebar?
|
||||
if ( ! $fail && isset( $widget_instances[ $id_base ] ) ) {
|
||||
// Get existing widgets in this sidebar.
|
||||
$sidebars_widgets = get_option( 'sidebars_widgets' );
|
||||
$sidebar_widgets = isset( $sidebars_widgets[ $use_sidebar_id ] ) ? $sidebars_widgets[ $use_sidebar_id ] : array(); // Check Inactive if that's where will go.
|
||||
|
||||
// Loop widgets with ID base.
|
||||
$single_widget_instances = ! empty( $widget_instances[ $id_base ] ) ? $widget_instances[ $id_base ] : array();
|
||||
foreach ( $single_widget_instances as $check_id => $check_widget ) {
|
||||
// Is widget in same sidebar and has identical settings?
|
||||
if ( in_array( "$id_base-$check_id", $sidebar_widgets ) && (array) $widget == $check_widget ) {
|
||||
$fail = true;
|
||||
$widget_message_type = 'warning';
|
||||
$widget_message = __( 'Widget already exists', 'himara' ); // Explain why widget not imported.
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// No failure.
|
||||
if ( ! $fail ) {
|
||||
// Add widget instance.
|
||||
$single_widget_instances = get_option( 'widget_' . $id_base ); // All instances for that widget ID base, get fresh every time.
|
||||
$single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1 ); // Start fresh if have to.
|
||||
$single_widget_instances[] = $widget; // Add it.
|
||||
|
||||
// Get the key it was given.
|
||||
end( $single_widget_instances );
|
||||
$new_instance_id_number = key( $single_widget_instances );
|
||||
|
||||
// If key is 0, make it 1.
|
||||
// When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it).
|
||||
if ( '0' === strval( $new_instance_id_number ) ) {
|
||||
$new_instance_id_number = 1;
|
||||
$single_widget_instances[ $new_instance_id_number ] = $single_widget_instances[0];
|
||||
unset( $single_widget_instances[0] );
|
||||
}
|
||||
|
||||
// Move _multiwidget to end of array for uniformity.
|
||||
if ( isset( $single_widget_instances['_multiwidget'] ) ) {
|
||||
$multiwidget = $single_widget_instances['_multiwidget'];
|
||||
unset( $single_widget_instances['_multiwidget'] );
|
||||
$single_widget_instances['_multiwidget'] = $multiwidget;
|
||||
}
|
||||
|
||||
// Update option with new widget.
|
||||
update_option( 'widget_' . $id_base, $single_widget_instances );
|
||||
|
||||
// Assign widget instance to sidebar.
|
||||
$sidebars_widgets = get_option( 'sidebars_widgets' ); // Which sidebars have which widgets, get fresh every time.
|
||||
|
||||
// Avoid rarely fatal error when the option is an empty string
|
||||
// https://github.com/churchthemes/widget-importer-exporter/pull/11.
|
||||
if ( ! $sidebars_widgets ) {
|
||||
$sidebars_widgets = array();
|
||||
}
|
||||
|
||||
$new_instance_id = $id_base . '-' . $new_instance_id_number; // Use ID number from new widget instance.
|
||||
$sidebars_widgets[ $use_sidebar_id ][] = $new_instance_id; // Add new instance to sidebar.
|
||||
update_option( 'sidebars_widgets', $sidebars_widgets ); // Save the amended data.
|
||||
|
||||
// After widget import action.
|
||||
$after_widget_import = array(
|
||||
'sidebar' => $use_sidebar_id,
|
||||
'sidebar_old' => $sidebar_id,
|
||||
'widget' => $widget,
|
||||
'widget_type' => $id_base,
|
||||
'widget_id' => $new_instance_id,
|
||||
'widget_id_old' => $widget_instance_id,
|
||||
'widget_id_num' => $new_instance_id_number,
|
||||
'widget_id_num_old' => $instance_id_number,
|
||||
);
|
||||
Helpers::do_action( 'ocdi/widget_importer_after_single_widget_import', $after_widget_import );
|
||||
|
||||
// Success message.
|
||||
if ( $sidebar_available ) {
|
||||
$widget_message_type = 'success';
|
||||
$widget_message = __( 'Imported', 'himara' );
|
||||
}
|
||||
else {
|
||||
$widget_message_type = 'warning';
|
||||
$widget_message = __( 'Imported to Inactive', 'himara' );
|
||||
}
|
||||
}
|
||||
|
||||
// Result for widget instance.
|
||||
$results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['name'] = isset( $available_widgets[ $id_base ]['name'] ) ? $available_widgets[ $id_base ]['name'] : $id_base; // Widget name or ID if name not available (not supported by site).
|
||||
$results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['title'] = ! empty( $widget['title'] ) ? $widget['title'] : __( 'No Title', 'himara' ); // Show "No Title" if widget instance is untitled.
|
||||
$results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message_type'] = $widget_message_type;
|
||||
$results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message'] = $widget_message;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Hook after import.
|
||||
Helpers::do_action( 'ocdi/widget_importer_after_widgets_import' );
|
||||
|
||||
// Return results.
|
||||
return Helpers::apply_filters( 'ocdi/widget_import_results', $results );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Available widgets.
|
||||
*
|
||||
* Gather site's widgets into array with ID base, name, etc.
|
||||
*
|
||||
* @global array $wp_registered_widget_controls
|
||||
* @return array $available_widgets, Widget information
|
||||
*/
|
||||
private static function available_widgets() {
|
||||
global $wp_registered_widget_controls;
|
||||
|
||||
$widget_controls = $wp_registered_widget_controls;
|
||||
$available_widgets = array();
|
||||
|
||||
foreach ( $widget_controls as $widget ) {
|
||||
if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[ $widget['id_base'] ] ) ) {
|
||||
$available_widgets[ $widget['id_base'] ]['id_base'] = $widget['id_base'];
|
||||
$available_widgets[ $widget['id_base'] ]['name'] = $widget['name'];
|
||||
}
|
||||
}
|
||||
|
||||
return Helpers::apply_filters( 'ocdi/available_widgets', $available_widgets );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Format results for log file
|
||||
*
|
||||
* @param array $results widget import results.
|
||||
*/
|
||||
private static function format_results_for_log( $results ) {
|
||||
if ( empty( $results ) ) {
|
||||
esc_html_e( 'No results for widget import!', 'himara' );
|
||||
}
|
||||
|
||||
// Loop sidebars.
|
||||
foreach ( $results as $sidebar ) {
|
||||
echo esc_html( $sidebar['name'] ) . ' : ' . esc_html( $sidebar['message'] ) . PHP_EOL . PHP_EOL;
|
||||
// Loop widgets.
|
||||
foreach ( $sidebar['widgets'] as $widget ) {
|
||||
echo esc_html( $widget['name'] ) . ' - ' . esc_html( $widget['title'] ) . ' - ' . esc_html( $widget['message'] ) . PHP_EOL;
|
||||
}
|
||||
echo PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,947 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: One Click Demo Import 3.1.2\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/one-click-demo-import\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2022-07-08T11:47:50+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.4.0\n"
|
||||
"X-Domain: one-click-demo-import\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: inc/Helpers.php:753
|
||||
#: inc/ViewHelpers.php:19
|
||||
msgid "One Click Demo Import"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://wordpress.org/plugins/one-click-demo-import/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Import your content, widgets and theme settings with one click. Theme authors! Enable simple demo import for your theme demo data."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "OCDI"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://ocdi.com"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:46
|
||||
msgid "About Us"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:47
|
||||
msgid "Introduce yourself and your business with a clean layout to reassure your leads and customers."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:53
|
||||
msgid "Book Now"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:54
|
||||
msgid "Expand your reach by accepting appointments online plus detailing your services and staff."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:60
|
||||
msgid "Contact Us"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:61
|
||||
msgid "Make it easy to get in touch with you through a completely customizable built-in contact form."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:67
|
||||
msgid "FAQ"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:68
|
||||
msgid "Lighten the load on your support team or your inbox by addressing frequently asked questions."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:74
|
||||
msgid "Meet the Team"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:75
|
||||
msgid "Help potential clients feel more at ease by showing off your hard-working and trustworthy team."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:81
|
||||
msgid "Menu"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:82
|
||||
msgid "Display your delicious dishes online to entice website visitors to become restaurant customers."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:88
|
||||
msgid "Portfolio"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:89
|
||||
msgid "Impress leads by visually showcasing your achievements, case studies, and past work."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:95
|
||||
msgid "Services"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:96
|
||||
msgid "Let the world know your services or products' cost and features in an organized pricing table."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:102
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:103
|
||||
msgid "Categorize and sell your products online while displaying reviews from happy customers."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:109
|
||||
msgid "Testimonials"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:110
|
||||
msgid "Tap into the power of social proof by displaying real-life testimonials on your website."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:151
|
||||
msgid "Could not complete the import process for this page. Required WPForms plugin is not activated."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:155
|
||||
msgid "Could not complete the import process for this page. Required WPForms plugin doesn't exist."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:158
|
||||
msgid "Meet the Team Form"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:158
|
||||
msgid "Contact Form"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:162
|
||||
msgid "Could not complete the import process for this page. Something went wrong while creating a WPForms contact form."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:168
|
||||
msgid "Could not complete the import process for this page. Could not update the imported page with correct WPForms form ID."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:181
|
||||
msgid "Could not import this page. You don't have permission to import content."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:187
|
||||
msgid "Could not import this page. Page slug is missing."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - The actual error message.
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:214
|
||||
msgid "An error occured while importing this page: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:254
|
||||
msgid "The demo content import file is missing."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:336
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:343
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:350
|
||||
msgid "Comment or Message"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:372
|
||||
msgid "Thanks for contacting us! We will be in touch with you shortly."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:377
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CreateDemoContent/DemoContentCreator.php:378
|
||||
msgid "Sending..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CustomizerImporter.php:37
|
||||
#: inc/CustomizerImporter.php:45
|
||||
msgid "Importing customizer settings"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CustomizerImporter.php:43
|
||||
msgid "Customizer settings import finished!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - file path
|
||||
#: inc/CustomizerImporter.php:73
|
||||
msgid "Error: The customizer import file is missing! File path: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/CustomizerImporter.php:93
|
||||
msgid "Error: The customizer import file is not in a correct format. Please make sure to use the correct customizer import file."
|
||||
msgstr ""
|
||||
|
||||
#: inc/CustomizerImporter.php:99
|
||||
msgid "Error: The customizer import file is not suitable for current theme. You can only import customizer settings for the same theme or a child theme."
|
||||
msgstr ""
|
||||
|
||||
#: inc/Downloader.php:58
|
||||
msgid "Missing URL for downloading a file!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s and %3$s - strong HTML tags, %2$s - file URL, %4$s - br HTML tag, %5$s - error code, %6$s - error message.
|
||||
#: inc/Downloader.php:76
|
||||
msgid "An error occurred while fetching file from: %1$s%2$s%3$s!%4$sReason: %5$s - %6$s."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - br HTML tag, %2$s - file path
|
||||
#: inc/Helpers.php:199
|
||||
#: inc/Helpers.php:242
|
||||
msgid "An error occurred while writing file to your server! Tried to write a file to: %1$s%2$s."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - br HTML tag, %2$s - file path
|
||||
#: inc/Helpers.php:276
|
||||
msgid "An error occurred while reading a file from your server! Tried reading file from path: %1$s%2$s."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s and %2$s - strong HTML tags, %3$s - HTML link to a doc page.
|
||||
#: inc/Helpers.php:299
|
||||
msgid "This WordPress page does not have %1$sdirect%2$s write file access. This plugin needs it in order to save the demo import xml file to the upload directory of your site. You can change this setting with these instructions: %3$s."
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:316
|
||||
msgid "An error occurred while retrieving reading/writing permissions to your server (could not retrieve WP filesystem credentials)!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:324
|
||||
msgid "Your WordPress login credentials don't allow to use WP_Filesystem!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:364
|
||||
msgid "One Click Demo Import - "
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - opening div and paragraph HTML tags, %2$s - closing div and paragraph HTML tags.
|
||||
#: inc/Helpers.php:398
|
||||
msgid "%1$sYour user role isn't high enough. You don't have permission to import demo data.%2$s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:442
|
||||
msgid "No file provided."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the error message.
|
||||
#: inc/Helpers.php:471
|
||||
msgid "Content file was not uploaded. Error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:475
|
||||
#: inc/Helpers.php:492
|
||||
#: inc/Helpers.php:509
|
||||
#: inc/Helpers.php:520
|
||||
#: inc/Helpers.php:540
|
||||
#: inc/Helpers.php:548
|
||||
msgid "Upload files"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the error message.
|
||||
#: inc/Helpers.php:488
|
||||
msgid "Widget file was not uploaded. Error: %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the error message.
|
||||
#: inc/Helpers.php:505
|
||||
msgid "Customizer file was not uploaded. Error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:518
|
||||
msgid "Missing Redux option name! Please also enter the Redux option name!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the error message.
|
||||
#: inc/Helpers.php:536
|
||||
msgid "Redux file was not uploaded. Error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:546
|
||||
msgid "The import files were successfully uploaded!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the max execution time.
|
||||
#: inc/Helpers.php:572
|
||||
msgid "Initial max execution time = %s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - new line break, %2$s - the site URL, %3$s - the file path for content import, %4$s - the file path for widgets import, %5$s - the file path for widgets import, %6$s - the file path for redux import.
|
||||
#: inc/Helpers.php:576
|
||||
msgid "Files info:%1$sSite URL = %2$s%1$sData file = %3$s%1$sWidget file = %4$s%1$sCustomizer file = %5$s%1$sRedux files:%1$s%6$s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:579
|
||||
#: inc/Helpers.php:580
|
||||
#: inc/Helpers.php:581
|
||||
#: inc/Helpers.php:582
|
||||
msgid "not defined!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Helpers.php:754
|
||||
#: views/plugin-page.php:290
|
||||
msgid "Import Demo Data"
|
||||
msgstr ""
|
||||
|
||||
#: inc/Importer.php:174
|
||||
msgid "New AJAX call!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:229
|
||||
msgid "No preview image defined for this import."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:230
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:231
|
||||
#: views/plugin-page.php:276
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:232
|
||||
msgid "Yes, import!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:233
|
||||
msgid "Selected demo import:"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:234
|
||||
msgid "Installing..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:235
|
||||
#: inc/WPCLICommands.php:153
|
||||
msgid "Importing..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:236
|
||||
msgid "Successfully Imported!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:237
|
||||
#: views/plugin-page.php:270
|
||||
msgid "Install Plugin"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:238
|
||||
#: views/plugin-page.php:270
|
||||
msgid "Installed"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:239
|
||||
msgid "Import Failed"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:240
|
||||
msgid "Whoops, there was a problem importing your content."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:241
|
||||
msgid "Looks like some of the plugins failed to install. Please try again. If this issue persists, please manually install the failing plugins and come back to this step to import the theme demo data."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:242
|
||||
msgid "Invalid file type detected! Please select an XML file for the Content Import."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:243
|
||||
msgid "Invalid file type detected! Please select a JSON or WIE file for the Widgets Import."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:244
|
||||
msgid "Invalid file type detected! Please select a DAT file for the Customizer Import."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:245
|
||||
msgid "Invalid file type detected! Please select a JSON file for the Redux Import."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:262
|
||||
msgid "Manual import files are missing! Please select the import files and try again."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:277
|
||||
#: inc/OneClickDemoImport.php:322
|
||||
msgid "Manually uploaded files"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:335
|
||||
#: inc/OneClickDemoImport.php:346
|
||||
msgid "Downloaded files"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the name of the selected import.
|
||||
#: inc/OneClickDemoImport.php:342
|
||||
msgid "The import files for: %s were successfully downloaded!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:351
|
||||
msgid "No import files specified!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:474
|
||||
#: views/import.php:118
|
||||
msgid "Import Complete!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:475
|
||||
#: views/import.php:121
|
||||
msgid "Congrats, your demo was imported successfully. You can now begin editing your site."
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:476
|
||||
msgid "Successful Import"
|
||||
msgstr ""
|
||||
|
||||
#: inc/OneClickDemoImport.php:479
|
||||
msgid "Your import completed, but some things may not have imported properly."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - link to the log file.
|
||||
#: inc/OneClickDemoImport.php:483
|
||||
msgid "<p><a href=\"%s\" target=\"_blank\">View error log</a> for more information.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:85
|
||||
msgid "WPForms"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:86
|
||||
msgid "Join 4,000,000+ professionals who build smarter forms and surveys with WPForms."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:92
|
||||
msgid "All in One SEO"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:93
|
||||
msgid "Use All in One SEO Pack to optimize your WordPress site for SEO."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:99
|
||||
msgid "MonsterInsights"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:100
|
||||
msgid "The #1 Google Analytics Plugin for WordPress that’s easy and powerful."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:106
|
||||
msgid "Custom Landing Pages by SeedProd"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:107
|
||||
msgid "Work on your site in private while visitors see a \"Coming Soon\" or \"Maintenance Mode\" page."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:112
|
||||
msgid "Smash Balloon Social Photo Feed"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:113
|
||||
msgid "Display beautifully clean, customizable, and responsive Instagram feeds."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:118
|
||||
msgid "WP Mail SMTP"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:119
|
||||
msgid "Make email delivery easy for WordPress. Connect with SMTP, Gmail, Outlook, Mailgun, and more."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:226
|
||||
msgid "Could not install the plugin. You don't have permission to install plugins."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:232
|
||||
msgid "Could not install the plugin. Plugin slug is missing."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:237
|
||||
msgid "Plugin is already installed and activated!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:245
|
||||
msgid "Plugin was already installed! We activated it for you."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:253
|
||||
msgid "Could not install the plugin. Don't have file permission."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:293
|
||||
msgid "Plugin installed and activated succesfully."
|
||||
msgstr ""
|
||||
|
||||
#: inc/PluginInstaller.php:300
|
||||
msgid "Could not install the plugin. WP Plugin installer could not retrieve plugin information."
|
||||
msgstr ""
|
||||
|
||||
#: inc/ReduxImporter.php:23
|
||||
msgid "The Redux plugin is not activated, so the Redux import was skipped!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/ReduxImporter.php:32
|
||||
#: inc/ReduxImporter.php:53
|
||||
#: inc/ReduxImporter.php:66
|
||||
msgid "Importing Redux settings"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the name of the Redux option.
|
||||
#: inc/ReduxImporter.php:51
|
||||
msgid "Redux settings import for: %s finished successfully!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the name of the Redux option.
|
||||
#: inc/ReduxImporter.php:57
|
||||
msgid "The Redux option name: %s, was not found in this WP site, so it was not imported!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/ViewHelpers.php:21
|
||||
msgid "Questionmark icon"
|
||||
msgstr ""
|
||||
|
||||
#: inc/ViewHelpers.php:52
|
||||
#: views/plugin-page.php:74
|
||||
msgid "Theme screenshot"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:40
|
||||
#: inc/WidgetImporter.php:52
|
||||
msgid "Importing widgets"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:88
|
||||
msgid "Error: Widget import file could not be found."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:118
|
||||
msgid "Error: Widget import data could not be read. Please try a different file."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:157
|
||||
msgid "Sidebar does not exist in theme (moving widget to Inactive)"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:178
|
||||
msgid "Site does not support widget"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:211
|
||||
msgid "Widget already exists"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:276
|
||||
msgid "Imported"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:280
|
||||
msgid "Imported to Inactive"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:286
|
||||
msgid "No Title"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WidgetImporter.php:333
|
||||
msgid "No results for widget import!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:34
|
||||
msgid "There are no predefined demo imports for currently active theme!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:37
|
||||
msgid "Here are the predefined demo imports:"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:71
|
||||
msgid "At least one of the possible options should be set! Check them with --help"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:122
|
||||
msgid "The \"predefined\" parameter should be a number (an index of the OCDI predefined demo import)!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:128
|
||||
msgid "The supplied predefined index does not exist! Please take a look at the available predefined demo imports:"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:135
|
||||
msgid "Predefined demo import started! All other parameters will be ignored!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the name of the selected demo import.
|
||||
#: inc/WPCLICommands.php:140
|
||||
msgid "Selected predefined demo import: %s"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:143
|
||||
msgid "Preparing the demo import files..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:148
|
||||
msgid "Demo import files could not be retrieved!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:151
|
||||
msgid "Demo import files retrieved successfully!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:173
|
||||
msgid "Predefined import finished!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:185
|
||||
msgid "Content import file provided does not exist! Skipping this import!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:194
|
||||
msgid "Importing content (this might take a while)..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:196
|
||||
msgid "Importing content"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:201
|
||||
msgid "Content import finished!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:204
|
||||
msgid "There were some issues while importing the content!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:223
|
||||
msgid "Widgets import file provided does not exist! Skipping this import!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:227
|
||||
msgid "Importing widgets..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:232
|
||||
msgid "Widgets imported successfully!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:235
|
||||
msgid "There were some issues while importing widgets!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:254
|
||||
msgid "Customizer import file provided does not exist! Skipping this import!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:258
|
||||
msgid "Importing customizer settings..."
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:263
|
||||
msgid "Customizer settings imported successfully!"
|
||||
msgstr ""
|
||||
|
||||
#: inc/WPCLICommands.php:266
|
||||
msgid "There were some issues while importing customizer settings!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s - the name of the executing action.
|
||||
#: inc/WPCLICommands.php:286
|
||||
msgid "Executing action: %s ..."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - the PHP version, %2$s and %3$s - strong HTML tags, %4$s - br HTMl tag.
|
||||
#: one-click-demo-import.php:58
|
||||
msgid "The %2$sOne Click Demo Import%3$s plugin requires %2$sPHP 5.6+%3$s to run properly. Please contact your hosting company and ask them to update the PHP version of your site to at least PHP 7.4%4$s Your current version of PHP: %2$s%1$s%3$s"
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:26
|
||||
#: views/plugin-page.php:239
|
||||
msgid "Create Demo Content"
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:28
|
||||
msgid "Select which pre-built pages you want to import to use on your website. After that, all you need to do is customize the content to fit your needs and your page will be good to go."
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:50
|
||||
#: views/import.php:71
|
||||
#: views/install-plugins.php:49
|
||||
msgid "Checkmark icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:51
|
||||
#: views/import.php:75
|
||||
#: views/install-plugins.php:50
|
||||
msgid "Loading..."
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:60
|
||||
msgid "The following plugins will be installed for free: "
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:66
|
||||
#: views/import.php:98
|
||||
#: views/install-plugins.php:57
|
||||
msgid "Back icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:66
|
||||
#: views/import.php:98
|
||||
#: views/install-plugins.php:57
|
||||
msgid "Go Back"
|
||||
msgstr ""
|
||||
|
||||
#: views/create-content.php:67
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:28
|
||||
msgid "Before We Import Your Demo"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:30
|
||||
msgid "To ensure the best experience, installing the following plugins is strongly recommended, and in some cases required."
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:43
|
||||
msgid "All required/recommended plugins are already installed. You can import your demo content."
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:56
|
||||
#: views/import.php:89
|
||||
msgid "Star icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:73
|
||||
msgid "Lock icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:85
|
||||
msgid "The plugins with %1$s are recommended by One Click Demo Import plugin to help you grow your website. They are not required for the %2$s theme to work."
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:99
|
||||
#: views/plugin-page.php:277
|
||||
msgid "Continue & Import"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:108
|
||||
msgid "Importing Content"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:109
|
||||
msgid "Please sit tight while we import your content. Do not refresh the page or hit the back button."
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:112
|
||||
msgid "Importing animation"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:129
|
||||
msgid "Theme Settings"
|
||||
msgstr ""
|
||||
|
||||
#: views/import.php:130
|
||||
msgid "Visit Site"
|
||||
msgstr ""
|
||||
|
||||
#: views/install-plugins.php:25
|
||||
msgid "Install Recommended Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: views/install-plugins.php:27
|
||||
msgid "Want to use the best plugins for the job? Here is the list of awesome plugins that will help you achieve your goals."
|
||||
msgstr ""
|
||||
|
||||
#: views/install-plugins.php:58
|
||||
msgid "Install & Activate"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s - the opening div and paragraph HTML tags, %2$s and %3$s - strong HTML tags, %4$s - the closing div and paragraph HTML tags.
|
||||
#: views/plugin-page.php:32
|
||||
msgid "%1$sWarning: your server is using %2$sPHP safe mode%3$s. This means that you might experience server timeout errors.%4$s"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:50
|
||||
msgid "Importing demo data (post, pages, images, theme settings, etc.) is the quickest and easiest way to set up your new theme."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:51
|
||||
msgid "It allows you to simply edit everything instead of creating content and layouts from scratch."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:52
|
||||
msgid "Learn more"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:65
|
||||
msgid "There are no predefined import files available for this theme. Please upload the import files manually below."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:108
|
||||
msgid "Switch to Manual Import"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:110
|
||||
msgid "Switch back to Theme Predefined Imports"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:121
|
||||
msgid "Manual Demo File Import"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:130
|
||||
msgid "Content import icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:132
|
||||
msgid "Import Content"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:133
|
||||
msgid "Select an XML file to import."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:136
|
||||
#: views/plugin-page.php:157
|
||||
#: views/plugin-page.php:178
|
||||
#: views/plugin-page.php:200
|
||||
#: views/plugin-page.php:225
|
||||
#: views/plugin-page.php:243
|
||||
#: views/plugin-page.php:261
|
||||
msgid "Info icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:141
|
||||
#: views/plugin-page.php:162
|
||||
#: views/plugin-page.php:183
|
||||
#: views/plugin-page.php:205
|
||||
msgid "Select a File"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:151
|
||||
msgid "Widgets import icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:153
|
||||
msgid "Import Widgets"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:154
|
||||
msgid "Select a JSON/WIE file to import."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:172
|
||||
msgid "Customizer import icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:174
|
||||
msgid "Import Customizer"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:175
|
||||
msgid "Select a DAT file to import."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:194
|
||||
msgid "Redux import icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:196
|
||||
msgid "Import Redux"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:197
|
||||
msgid "Select a JSON file and enter Redux option name."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:208
|
||||
msgid "Enter Option Name"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:219
|
||||
msgid "Recommended plugins icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:221
|
||||
msgid "Recommended Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:222
|
||||
msgid "Install our recommended plugins."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:229
|
||||
msgid "Install Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:237
|
||||
msgid "Create demo content icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:240
|
||||
msgid "Create useful content with a few clicks."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:247
|
||||
msgid "Create Content"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:255
|
||||
msgid "Create landing pages icon"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:257
|
||||
msgid "Create Landing Pages"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:258
|
||||
msgid "Create beautiful converting pages."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:305
|
||||
msgid "All Demos"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:318
|
||||
msgid "Search Demos..."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:341
|
||||
msgid "No preview image."
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:348
|
||||
msgid "Preview Demo"
|
||||
msgstr ""
|
||||
|
||||
#: views/plugin-page.php:350
|
||||
msgid "Import Demo"
|
||||
msgstr ""
|
||||
598
wp-content/themes/himara/core/admin/inc/importer/readme.txt
Normal file
@@ -0,0 +1,598 @@
|
||||
=== One Click Demo Import ===
|
||||
Contributors: ocdi, smub, jaredatch, capuderg
|
||||
Tags: import, content, demo, data, widgets, settings, redux, theme options
|
||||
Requires at least: 5.2
|
||||
Tested up to: 6.0
|
||||
Requires PHP: 5.6
|
||||
Stable tag: 3.1.2
|
||||
License: GPLv3 or later
|
||||
|
||||
Import your demo content, widgets and theme settings with one click. Theme authors! Enable simple theme demo import for your users.
|
||||
|
||||
== Description ==
|
||||
|
||||
The best feature of this plugin is, that theme authors can define import files in their themes and so all you (the user of the theme) have to do is click on the "Import Demo Data" button.
|
||||
|
||||
> **Are you a theme author?**
|
||||
>
|
||||
> Setup One Click Demo Imports for your theme and your users will thank you for it!
|
||||
>
|
||||
> [Follow this easy guide on how to setup this plugin for your themes!](https://ocdi.com/quick-integration-guide/)
|
||||
|
||||
> **Are you a theme user?**
|
||||
>
|
||||
> Contact the author of your theme and [let them know about this plugin](https://ocdi.com/ask-your-theme-author/). Theme authors can make any theme compatible with this plugin in 15 minutes and make it much more user-friendly.
|
||||
>
|
||||
> "[Where can I find the theme author contact?](https://ocdi.com/ask-your-theme-author/#how-can-you-contact-your-theme-author)"
|
||||
|
||||
Please take a look at our [plugin documentation](https://ocdi.com/user-guide/) for more information on how to import your demo content.
|
||||
|
||||
This plugin is using the modified version of the improved WP import 2.0 that is still in development and can be found here: https://github.com/humanmade/WordPress-Importer.
|
||||
|
||||
NOTE: There is no setting to "connect" authors from the demo import file to the existing users in your WP site (like there is in the original WP Importer plugin). All demo content will be imported under the current user.
|
||||
|
||||
**Do you want to contribute?**
|
||||
|
||||
Please refer to our official [GitHub repository](https://github.com/awesomemotive/one-click-demo-import).
|
||||
|
||||
== Installation ==
|
||||
|
||||
**From your WordPress dashboard**
|
||||
|
||||
1. Visit 'Plugins > Add New',
|
||||
2. Search for 'One Click Demo Import' and install the plugin,
|
||||
3. Activate 'One Click Demo Import' from your Plugins page.
|
||||
|
||||
**From WordPress.org**
|
||||
|
||||
1. Download 'One Click Demo Import'.
|
||||
2. Upload the 'himara' directory to your '/wp-content/plugins/' directory, using your favorite method (ftp, sftp, scp, etc...)
|
||||
3. Activate 'One Click Demo Import' from your Plugins page.
|
||||
|
||||
**Once the plugin is activated you will find the actual import page in: Appearance -> Import Demo Data.**
|
||||
|
||||
== Frequently Asked Questions ==
|
||||
|
||||
= I have activated the plugin. Where is the "Import Demo Data" page? =
|
||||
|
||||
You will find the import page in *wp-admin -> Appearance -> Import Demo Data*.
|
||||
|
||||
= Where are the demo import files and the log files saved? =
|
||||
|
||||
The files used in the demo import will be saved to the default WordPress uploads directory. An example of that directory would be: `../wp-content/uploads/2016/03/`.
|
||||
|
||||
The log file will also be registered in the *wp-admin -> Media* section, so you can access it easily.
|
||||
|
||||
= How to predefine demo imports? =
|
||||
|
||||
This question is for theme authors. To predefine demo imports, you just have to add the following code structure, with your own values to your theme (using the `ocdi/import_files` filter):
|
||||
|
||||
`
|
||||
function ocdi_import_files() {
|
||||
return array(
|
||||
array(
|
||||
'import_file_name' => 'Demo Import 1',
|
||||
'categories' => array( 'Category 1', 'Category 2' ),
|
||||
'import_file_url' => 'http://www.your_domain.com/ocdi/demo-content.xml',
|
||||
'import_widget_file_url' => 'http://www.your_domain.com/ocdi/widgets.json',
|
||||
'import_customizer_file_url' => 'http://www.your_domain.com/ocdi/customizer.dat',
|
||||
'import_redux' => array(
|
||||
array(
|
||||
'file_url' => 'http://www.your_domain.com/ocdi/redux.json',
|
||||
'option_name' => 'redux_option_name',
|
||||
),
|
||||
),
|
||||
'import_preview_image_url' => 'http://www.your_domain.com/ocdi/preview_import_image1.jpg',
|
||||
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
|
||||
'preview_url' => 'http://www.your_domain.com/my-demo-1',
|
||||
),
|
||||
array(
|
||||
'import_file_name' => 'Demo Import 2',
|
||||
'categories' => array( 'New category', 'Old category' ),
|
||||
'import_file_url' => 'http://www.your_domain.com/ocdi/demo-content2.xml',
|
||||
'import_widget_file_url' => 'http://www.your_domain.com/ocdi/widgets2.json',
|
||||
'import_customizer_file_url' => 'http://www.your_domain.com/ocdi/customizer2.dat',
|
||||
'import_redux' => array(
|
||||
array(
|
||||
'file_url' => 'http://www.your_domain.com/ocdi/redux.json',
|
||||
'option_name' => 'redux_option_name',
|
||||
),
|
||||
array(
|
||||
'file_url' => 'http://www.your_domain.com/ocdi/redux2.json',
|
||||
'option_name' => 'redux_option_name_2',
|
||||
),
|
||||
),
|
||||
'import_preview_image_url' => 'http://www.your_domain.com/ocdi/preview_import_image2.jpg',
|
||||
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
|
||||
'preview_url' => 'http://www.your_domain.com/my-demo-2',
|
||||
),
|
||||
);
|
||||
}
|
||||
add_filter( 'ocdi/import_files', 'ocdi_import_files' );
|
||||
`
|
||||
|
||||
You can set content import, widgets, customizer and Redux framework import files. You can also define a preview image, which will be used only when multiple demo imports are defined, so that the user will see the difference between imports. Categories can be assigned to each demo import, so that they can be filtered easily. The preview URL will display the "Preview" button in the predefined demo item, which will open this URL in a new tab and user can view how the demo site looks like.
|
||||
|
||||
= How to automatically assign "Front page", "Posts page" and menu locations after the importer is done? =
|
||||
|
||||
You can do that, with the `ocdi/after_import` action hook. The code would look something like this:
|
||||
|
||||
`
|
||||
function ocdi_after_import_setup() {
|
||||
// Assign menus to their locations.
|
||||
$main_menu = get_term_by( 'name', 'Main Menu', 'nav_menu' );
|
||||
|
||||
set_theme_mod( 'nav_menu_locations', array(
|
||||
'main-menu' => $main_menu->term_id, // replace 'main-menu' here with the menu location identifier from register_nav_menu() function
|
||||
)
|
||||
);
|
||||
|
||||
// Assign front page and posts page (blog page).
|
||||
$front_page_id = get_page_by_title( 'Home' );
|
||||
$blog_page_id = get_page_by_title( 'Blog' );
|
||||
|
||||
update_option( 'show_on_front', 'page' );
|
||||
update_option( 'page_on_front', $front_page_id->ID );
|
||||
update_option( 'page_for_posts', $blog_page_id->ID );
|
||||
|
||||
}
|
||||
add_action( 'ocdi/after_import', 'ocdi_after_import_setup' );
|
||||
`
|
||||
|
||||
= What about using local import files (from theme folder)? =
|
||||
|
||||
You have to use the same filter as in above example, but with a slightly different array keys: `local_*`. The values have to be absolute paths (not URLs) to your import files. To use local import files, that reside in your theme folder, please use the below code. Note: make sure your import files are readable!
|
||||
|
||||
`
|
||||
function ocdi_import_files() {
|
||||
return array(
|
||||
array(
|
||||
'import_file_name' => 'Demo Import 1',
|
||||
'categories' => array( 'Category 1', 'Category 2' ),
|
||||
'local_import_file' => trailingslashit( get_template_directory() ) . 'ocdi/demo-content.xml',
|
||||
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ocdi/widgets.json',
|
||||
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ocdi/customizer.dat',
|
||||
'local_import_redux' => array(
|
||||
array(
|
||||
'file_path' => trailingslashit( get_template_directory() ) . 'ocdi/redux.json',
|
||||
'option_name' => 'redux_option_name',
|
||||
),
|
||||
),
|
||||
'import_preview_image_url' => 'http://www.your_domain.com/ocdi/preview_import_image1.jpg',
|
||||
'import_notice' => __( 'After you import this demo, you will have to setup the slider separately.', 'your-textdomain' ),
|
||||
'preview_url' => 'http://www.your_domain.com/my-demo-1',
|
||||
),
|
||||
array(
|
||||
'import_file_name' => 'Demo Import 2',
|
||||
'categories' => array( 'New category', 'Old category' ),
|
||||
'local_import_file' => trailingslashit( get_template_directory() ) . 'ocdi/demo-content2.xml',
|
||||
'local_import_widget_file' => trailingslashit( get_template_directory() ) . 'ocdi/widgets2.json',
|
||||
'local_import_customizer_file' => trailingslashit( get_template_directory() ) . 'ocdi/customizer2.dat',
|
||||
'local_import_redux' => array(
|
||||
array(
|
||||
'file_path' => trailingslashit( get_template_directory() ) . 'ocdi/redux.json',
|
||||
'option_name' => 'redux_option_name',
|
||||
),
|
||||
array(
|
||||
'file_path' => trailingslashit( get_template_directory() ) . 'ocdi/redux2.json',
|
||||
'option_name' => 'redux_option_name_2',
|
||||
),
|
||||
),
|
||||
'import_preview_image_url' => 'http://www.your_domain.com/ocdi/preview_import_image2.jpg',
|
||||
'import_notice' => __( 'A special note for this import.', 'your-textdomain' ),
|
||||
'preview_url' => 'http://www.your_domain.com/my-demo-2',
|
||||
),
|
||||
);
|
||||
}
|
||||
add_filter( 'ocdi/import_files', 'ocdi_import_files' );
|
||||
`
|
||||
|
||||
= How to handle different "after import setups" depending on which predefined import was selected? =
|
||||
|
||||
This question might be asked by a theme author wanting to implement different after import setups for multiple predefined demo imports. Lets say we have predefined two demo imports with the following names: 'Demo Import 1' and 'Demo Import 2', the code for after import setup would be (using the `ocdi/after_import` filter):
|
||||
|
||||
`
|
||||
function ocdi_after_import( $selected_import ) {
|
||||
echo "This will be displayed on all after imports!";
|
||||
|
||||
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
|
||||
echo "This will be displayed only on after import if user selects Demo Import 1";
|
||||
|
||||
// Set logo in customizer
|
||||
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo1.png' );
|
||||
}
|
||||
elseif ( 'Demo Import 2' === $selected_import['import_file_name'] ) {
|
||||
echo "This will be displayed only on after import if user selects Demo Import 2";
|
||||
|
||||
// Set logo in customizer
|
||||
set_theme_mod( 'logo_img', get_template_directory_uri() . '/assets/images/logo2.png' );
|
||||
}
|
||||
}
|
||||
add_action( 'ocdi/after_import', 'ocdi_after_import' );
|
||||
`
|
||||
|
||||
= Can I add some code before the widgets get imported? =
|
||||
|
||||
Of course you can, use the `ocdi/before_widgets_import` action. You can also target different predefined demo imports like in the example above. Here is a simple example code of the `ocdi/before_widgets_import` action:
|
||||
|
||||
`
|
||||
function ocdi_before_widgets_import( $selected_import ) {
|
||||
echo "Add your code here that will be executed before the widgets get imported!";
|
||||
}
|
||||
add_action( 'ocdi/before_widgets_import', 'ocdi_before_widgets_import' );
|
||||
`
|
||||
|
||||
= How can I import via the WP-CLI? =
|
||||
|
||||
In the 2.4.0 version of this plugin we added two WP-CLI commands:
|
||||
|
||||
* `wp ocdi list` - Which will list any predefined demo imports currently active theme might have,
|
||||
* `wp ocdi import` - which has a few options that you can use to import the things you want (content/widgets/customizer/predefined demos). Let's look at these options below.
|
||||
|
||||
`wp ocdi import` options:
|
||||
|
||||
`wp ocdi import [--content=<file>] [--widgets=<file>] [--customizer=<file>] [--predefined=<index>]`
|
||||
|
||||
* `--content=<file>` - will run the content import with the WP import file specified in the `<file>` parameter,
|
||||
* `--widgets=<file>` - will run the widgets import with the widgets import file specified in the `<file>` parameter,
|
||||
* `--customizer=<file>` - will run the customizer settings import with the customizer import file specified in the `<file>` parameter,
|
||||
* `--predefined=<index>` - will run the theme predefined import with the index of the predefined import in the `<index>` parameter (you can use the `wp ocdi list` command to check which index is used for each predefined demo import)
|
||||
|
||||
The content, widgets and customizer options can be mixed and used at the same time. If the `predefined` option is set, then it will ignore all other options and import the predefined demo data.
|
||||
|
||||
= I'm a theme author and I want to change the plugin intro text, how can I do that? =
|
||||
|
||||
You can change the plugin intro text by using the `ocdi/plugin_intro_text` filter:
|
||||
|
||||
`
|
||||
function ocdi_plugin_intro_text( $default_text ) {
|
||||
$default_text .= '<div class="ocdi__intro-text">This is a custom text added to this plugin intro text.</div>';
|
||||
|
||||
return $default_text;
|
||||
}
|
||||
add_filter( 'ocdi/plugin_intro_text', 'ocdi_plugin_intro_text' );
|
||||
`
|
||||
|
||||
To add some text in a separate "box", you should wrap your text in a div with a class of 'ocdi__intro-text', like in the code example above.
|
||||
|
||||
= How to disable generation of smaller images (thumbnails) during the content import =
|
||||
|
||||
This will greatly improve the time needed to import the content (images), but only the original sized images will be imported. You can disable it with a filter, so just add this code to your theme function.php file:
|
||||
|
||||
`add_filter( 'ocdi/regenerate_thumbnails_in_content_import', '__return_false' );`
|
||||
|
||||
= How to change the location, title and other parameters of the plugin page? =
|
||||
|
||||
As a theme author you do not like the location of the "Import Demo Data" plugin page in *Appearance -> Import Demo Data*? You can change that with the filter below. Apart from the location, you can also change the title or the page/menu and some other parameters as well.
|
||||
|
||||
`
|
||||
function ocdi_plugin_page_setup( $default_settings ) {
|
||||
$default_settings['parent_slug'] = 'themes.php';
|
||||
$default_settings['page_title'] = esc_html__( 'One Click Demo Import' , 'himara' );
|
||||
$default_settings['menu_title'] = esc_html__( 'Import Demo Data' , 'himara' );
|
||||
$default_settings['capability'] = 'import';
|
||||
$default_settings['menu_slug'] = 'himara';
|
||||
|
||||
return $default_settings;
|
||||
}
|
||||
add_filter( 'ocdi/plugin_page_setup', 'ocdi_plugin_page_setup' );
|
||||
`
|
||||
|
||||
= How to do something before the content import executes? =
|
||||
|
||||
In version 2.0.0 there is a new action hook: `ocdi/before_content_import`, which will let you hook before the content import starts. An example of the code would look like this:
|
||||
|
||||
`
|
||||
function ocdi_before_content_import( $selected_import ) {
|
||||
if ( 'Demo Import 1' === $selected_import['import_file_name'] ) {
|
||||
// Here you can do stuff for the "Demo Import 1" before the content import starts.
|
||||
echo "before import 1";
|
||||
}
|
||||
else {
|
||||
// Here you can do stuff for all other imports before the content import starts.
|
||||
echo "before import 2";
|
||||
}
|
||||
}
|
||||
add_action( 'ocdi/before_content_import', 'ocdi_before_content_import' );
|
||||
`
|
||||
|
||||
= How can I enable the `customize_save*` wp action hooks in the customizer import? =
|
||||
|
||||
It's easy, just add this to your theme:
|
||||
|
||||
`add_action( 'ocdi/enable_wp_customize_save_hooks', '__return_true' );`
|
||||
|
||||
This will enable the following WP hooks when importing the customizer data: `customize_save`, `customize_save_*`, `customize_save_after`.
|
||||
|
||||
= How can I pass Amazon S3 presigned URL's (temporary links) as external files ? =
|
||||
|
||||
If you want to host your import content files on Amazon S3, but you want them to be publicly available, rather through an own API as presigned URL's (which expires) you can use the filter `ocdi/pre_download_import_files` in which you can pass your own URL's, for example:
|
||||
|
||||
`
|
||||
add_filter( 'ocdi/pre_download_import_files', function( $import_file_info ){
|
||||
|
||||
// In this example `get_my_custom_urls` is supposedly making a `wp_remote_get` request, getting the urls from an API server where you're creating the presigned urls, [example here](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-presigned-url.html).
|
||||
// This request should return an array containing all the 3 links - `import_file_url`, `import_widget_file_url`, `import_customizer_file_url`
|
||||
$request = get_my_custom_urls( $import_file_info );
|
||||
|
||||
if ( !is_wp_error( $request ) )
|
||||
{
|
||||
if ( isset($request['data']) && is_array($request['data']) )
|
||||
{
|
||||
if( isset($request['data']['import_file_url']) && $import_file_url = $request['data']['import_file_url'] ){
|
||||
$import_file_info['import_file_url'] = $import_file_url;
|
||||
}
|
||||
if( isset($request['data']['import_widget_file_url']) && $import_widget_file_url = $request['data']['import_widget_file_url'] ){
|
||||
$import_file_info['import_widget_file_url'] = $import_widget_file_url;
|
||||
}
|
||||
if( isset($request['data']['import_customizer_file_url']) && $import_customizer_file_url = $request['data']['import_customizer_file_url'] ){
|
||||
$import_file_info['import_customizer_file_url'] = $import_customizer_file_url;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $import_file_info;
|
||||
|
||||
} );
|
||||
`
|
||||
|
||||
= I can't activate the plugin, because of a fatal error, what can I do? =
|
||||
|
||||
*Update: since version 1.2.0, there is now a admin error notice, stating that the minimal PHP version required for this plugin is 5.3.2.*
|
||||
|
||||
You want to activate the plugin, but this error shows up:
|
||||
|
||||
*Plugin could not be activated because it triggered a fatal error*
|
||||
|
||||
This happens, because your hosting server is using a very old version of PHP. This plugin requires PHP version of at least **5.3.x**, but we recommend version *5.6.x* or better yet *7.x*. Please contact your hosting company and ask them to update the PHP version for your site.
|
||||
|
||||
= Issues with the import, that we can't fix in the plugin =
|
||||
|
||||
Please visit this [docs page](https://github.com/awesomemotive/one-click-demo-import/blob/master/docs/import-problems.md), for more answers to issues with importing data.
|
||||
|
||||
== Screenshots ==
|
||||
|
||||
1. Example of multiple predefined demo imports, that a user can choose from.
|
||||
2. How the import page looks like, when only one demo import is predefined.
|
||||
3. Example of how the import page looks like, when no demo imports are predefined a.k.a manual import.
|
||||
4. How the Recommended & Required theme plugins step looks like, just before the import step.
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 3.1.2 =
|
||||
|
||||
*Release Date - 8th July 2022*
|
||||
|
||||
* Fixed missing terms count update (fixes missing menu items after WP 6.0 update).
|
||||
|
||||
= 3.1.1 =
|
||||
|
||||
*Release Date - 22nd March 2022*
|
||||
|
||||
* Fixed missing sanitization for the redux option name.
|
||||
|
||||
= 3.1.0 =
|
||||
|
||||
*Release Date - 18th March 2022*
|
||||
|
||||
* Changed the minimal WordPress version to 5.2.
|
||||
* Fixed upload file types. Allow just whitelisted import file types.
|
||||
|
||||
= 3.0.2 =
|
||||
|
||||
*Release Date - 2 April 2021*
|
||||
|
||||
* Fixed missing old default settings page (breaking existing links to the OCDI settings page).
|
||||
* Fixed PHP notices in network admin area for WP Multisite.
|
||||
* Fixed theme card image style in the sidebar.
|
||||
|
||||
= 3.0.1 =
|
||||
|
||||
*Release Date - 31 March 2021*
|
||||
|
||||
* Added more details about recommended plugins.
|
||||
* Changed recommended plugins to opt-in.
|
||||
|
||||
= 3.0.0 =
|
||||
|
||||
*Release Date - 31 March 2021*
|
||||
|
||||
* IMPORTANT: Support for PHP 5.5 or lower has been discontinued. If you are running one of those versions, you MUST upgrade PHP before installing or upgrading to One Click Demo Import v3.0. Failure to do that will disable One Click Demo Import functionality.
|
||||
* IMPORTANT: Support for WordPress core v4.9 or lower has been discontinued. If you are running one of those versions, you MUST upgrade WordPress core before installing or upgrading to One Click Demo Import v3.0. Failure to do that could cause issues with the One Click Demo Import functionality.
|
||||
* Added support for recommended theme plugins.
|
||||
* Added useful single page demo content imports.
|
||||
* Added recommended plugins installer.
|
||||
* Updated the UI/UX of the plugin.
|
||||
* Fixed PHP8 warning.
|
||||
* Fixed deprecated WP function `wp_slash_strings_only`.
|
||||
|
||||
= 2.6.1 =
|
||||
|
||||
*Release Date - 21 July 2020*
|
||||
|
||||
* Fixed Elementor import issues.
|
||||
|
||||
= 2.6.0 =
|
||||
|
||||
*Release Date - 21 July 2020*
|
||||
|
||||
* Improved code execution: not loading plugin code on frontend.
|
||||
* Fixed incorrect post and post meta import (unicode and other special characters were not escaped properly).
|
||||
* Fixed error (500 - internal error) for Widgets import on PHP 7.x.
|
||||
* Fixed PHP notices for manual demo import.
|
||||
* Fixed PHP warning if `set_time_limit` function is disabled.
|
||||
* Fixed links for switching manual and predefined import modes.
|
||||
|
||||
= 2.5.2 =
|
||||
|
||||
*Release Date - 29 July 2019*
|
||||
|
||||
* Improved documentation and code sample
|
||||
* Added `pt-ocdi/pre_download_import_files` filter
|
||||
* Added two action hooks to plugin-page.php
|
||||
* Bumped `Tested up to` tag
|
||||
|
||||
= 2.5.1 =
|
||||
|
||||
*Release Date - 25 October 2018*
|
||||
|
||||
* Fix missing translation strings
|
||||
|
||||
= 2.5.0 =
|
||||
|
||||
*Release Date - 8 January 2018*
|
||||
|
||||
* Add OCDI as a WordPress import tool in Tools -> Import,
|
||||
* Add switching to the manual import, if the theme has predefined demo imports,
|
||||
* Fix text domain loading
|
||||
|
||||
= 2.4.0 =
|
||||
|
||||
*Release Date - 23 August 2017*
|
||||
|
||||
* Add WP-CLI commands for importing with this plugin,
|
||||
* Fix conflict with WooCommerce importer
|
||||
|
||||
= 2.3.0 =
|
||||
|
||||
*Release Date - 28 May 2017*
|
||||
|
||||
* Add preview button option to the predefined demo import items,
|
||||
* Add custom JS event trigger when the import process is completed,
|
||||
* Add custom filter for plugin page title,
|
||||
* Remove content import as a required import. Now you can make separate imports for customizer, widgets or redux options.
|
||||
* Fix custom menu widgets imports, the menus will now be set correctly.
|
||||
|
||||
= 2.2.1 =
|
||||
|
||||
*Release Date - 3 April 2017*
|
||||
|
||||
* Fix image importing error for server compressed files,
|
||||
* Fix remapping of featured images,
|
||||
* Fix custom post type existing posts check (no more multiple imports for custom post types).
|
||||
|
||||
= 2.2.0 =
|
||||
|
||||
*Release Date - 5 February 2017*
|
||||
|
||||
* Add ProteusThemes branding notice after successful import,
|
||||
* Fix after import error reporting (duplicate errors were shown),
|
||||
* Fix some undefined variables in the plugin, causing PHP notices.
|
||||
|
||||
= 2.1.0 =
|
||||
|
||||
*Release Date - 8 January 2017*
|
||||
|
||||
* Add grid layout import confirmation popup options filter,
|
||||
* Fix term meta data double import,
|
||||
* Fix WooCommerce product attributes import.
|
||||
|
||||
= 2.0.2 =
|
||||
|
||||
*Release Date - 13 December 2016*
|
||||
|
||||
* Fix issue with customizer options import
|
||||
|
||||
= 2.0.1 =
|
||||
|
||||
*Release Date - 12 December 2016*
|
||||
|
||||
* Fix issue with some browsers (Safari and IE) not supporting some FormData methods.
|
||||
|
||||
= 2.0.0 =
|
||||
|
||||
*Release Date - 10 December 2016*
|
||||
|
||||
* Add new layout for multiple predefined demo imports (a grid layout instead of the dropdown selector),
|
||||
* Add support for Redux framework import,
|
||||
* Change the code structure of the plugin (plugin rewrite, namespaces, autoloading),
|
||||
* Now the whole import (content, widgets, customizer, redux) goes through even if something goes wrong in the content import (before content import errors blocked further import),
|
||||
* Add `pt-ocdi/before_content_import` action hook, that theme authors can use to hook into before the content import starts,
|
||||
* Fix frontend error reporting through multiple AJAX calls,
|
||||
* Fix post formats (video/quote/gallery,...) not importing,
|
||||
* Fix customizer import does not save some options (because of the missing WP actions - these can be enabled via a filter, more in the FAQ section).
|
||||
|
||||
= 1.4.0 =
|
||||
|
||||
*Release Date - 29 October 2016*
|
||||
|
||||
* Add support for WP term meta data in content importer,
|
||||
* Fix the issue of having both plugins (OCDI and the new WP importer v2) activated at the same time.
|
||||
|
||||
= 1.3.0 =
|
||||
|
||||
*Release Date - 1 October 2016*
|
||||
|
||||
* Import/plugin page re-design. Updated the plugin page styles to match WordPress (thanks to Oliver Juhas).
|
||||
|
||||
|
||||
= 1.2.0 =
|
||||
|
||||
*Release Date - 9 July 2016*
|
||||
|
||||
* Now also accepts predefined local import files (from theme folder),
|
||||
* Fixes PHP fatal error on plugin activation, for sites using PHP versions older then 5.3.2 (added admin error notice),
|
||||
* Register log file in *wp-admin -> Media*, so that it's easier to access,
|
||||
* No more "[WARNING] Could not find the author for ..." messages in the log file.
|
||||
|
||||
= 1.1.3 =
|
||||
|
||||
*Release Date - 17 June 2016*
|
||||
|
||||
* Updated plugin design,
|
||||
* Changed the plugin page setup filter name from `pt-ocdi/plugin-page-setup` to `pt-ocdi/plugin_page_setup` (mind the underscore characters instead of dashes).
|
||||
|
||||
= 1.1.2 =
|
||||
|
||||
*Release Date - 12 June 2016*
|
||||
|
||||
* An 'import notice' field has been added to the predefined demo import settings. This notice is displayed above the import button (it also accepts HTML),
|
||||
* Now displays proper error message, if the file-system method is not set to "direct",
|
||||
* This plugin is now compatible with the new [Humanmade content importer plugin](https://github.com/humanmade/WordPress-Importer),
|
||||
* Added a filter to the plugin page creation, so that theme authors can now change the location of the plugin page (Demo data import) and some other parameters as well.
|
||||
|
||||
|
||||
= 1.1.1 =
|
||||
|
||||
*Release Date - 22 May 2016*
|
||||
|
||||
* Preview import images can now be defined for multiple predefined import files (check FAQ "How to predefine demo imports?" for more info),
|
||||
* You can now also import customizer settings.
|
||||
|
||||
= 1.1.0 =
|
||||
|
||||
*Release Date - 14 May 2016*
|
||||
|
||||
* Content import now imports in multiple AJAX calls, so there should be no more server timeout errors,
|
||||
* The setting for generation of multiple image sizes in the content import is again enabled by default,
|
||||
* Plugin textdomain was loaded, so that translations can be made.
|
||||
|
||||
= 1.0.3 =
|
||||
|
||||
*Release Date - 27 April 2016*
|
||||
|
||||
* Added filter to enable image regeneration,
|
||||
* Added filter to change the plugin intro text,
|
||||
* Added action to execute custom code before widget import,
|
||||
* Disabled author imports.
|
||||
|
||||
= 1.0.2 =
|
||||
|
||||
*Release Date - 15 April 2016*
|
||||
|
||||
* Monkey fix for WP version 4.5. - disabled generation of multiple image sizes in the content import.
|
||||
|
||||
= 1.0.1 =
|
||||
|
||||
*Release Date - 2 April 2016*
|
||||
|
||||
Small code fixes:
|
||||
|
||||
* Fixed undefined variable bug,
|
||||
* Fixed naming of downloaded files and their filters.
|
||||
|
||||
= 1.0.0 =
|
||||
|
||||
*Release Date - 25 March 2016*
|
||||
|
||||
* Initial release!
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* The create content page view.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
$demo_content_creator = new CreateDemoContent\DemoContentCreator();
|
||||
$content_items = $demo_content_creator->get_default_content();
|
||||
?>
|
||||
|
||||
<div class="eth-theme-dashboard ocdi ocdi--create-content">
|
||||
|
||||
<?php echo wp_kses_post( ViewHelpers::plugin_header_output() ); ?>
|
||||
|
||||
<div class="eth-theme-panel ocdi__content-container">
|
||||
|
||||
<div class="ocdi__admin-notices js-ocdi-admin-notices-container"></div>
|
||||
|
||||
<div class="ocdi__content-container-content">
|
||||
<div class="ocdi__content-container-content--main">
|
||||
<div class="ocdi-create-content">
|
||||
<div class="ocdi-create-content-header">
|
||||
<h2><?php esc_html_e( 'Create Demo Content', 'himara' ); ?></h2>
|
||||
<p>
|
||||
<?php esc_html_e( 'Select which pre-built pages you want to import to use on your website. After that, all you need to do is customize the content to fit your needs and your page will be good to go.', 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="ocdi-create-content-content">
|
||||
<div>
|
||||
<?php foreach ( $content_items as $item ) : ?>
|
||||
<label class="content-item content-item-<?php echo esc_attr( $item['slug'] ); ?>" for="ocdi-<?php echo esc_attr( $item['slug'] ); ?>-content-item">
|
||||
<div class="content-item-content">
|
||||
<div class="content-item-content-title">
|
||||
<h3><?php echo esc_html( $item['name'] ); ?></h3>
|
||||
</div>
|
||||
<?php if ( ! empty( $item['description'] ) ) : ?>
|
||||
<p>
|
||||
<?php echo wp_kses_post( $item['description'] ); ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<div class="content-item-error js-ocdi-content-item-error"></div>
|
||||
<div class="content-item-info js-ocdi-content-item-info"></div>
|
||||
</div>
|
||||
<span class="content-item-checkbox">
|
||||
<input type="checkbox" id="ocdi-<?php echo esc_attr( $item['slug'] ); ?>-content-item" name="<?php echo esc_attr( $item['slug'] ); ?>" data-plugins="<?php echo esc_attr( implode( ',', $item['required_plugins'] ) ); ?>">
|
||||
<span class="checkbox">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/check-solid-white.svg' ); ?>" class="ocdi-check-icon" alt="<?php esc_attr_e( 'Checkmark icon', 'himara' ); ?>">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/loader.svg' ); ?>" class="ocdi-loading ocdi-loading-md" alt="<?php esc_attr_e( 'Loading...', 'himara' ); ?>">
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<div class="ocdi-create-content-content-notice js-ocdi-create-content-install-plugins-notice">
|
||||
<p>
|
||||
<?php esc_html_e( 'The following plugins will be installed for free: ', 'himara' ); ?>
|
||||
<span class="js-ocdi-create-content-install-plugins-list"></span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi-create-content-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url() ); ?>" class="button"><img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/long-arrow-alt-left-blue.svg' ); ?>" alt="<?php esc_attr_e( 'Back icon', 'himara' ); ?>"><span><?php esc_html_e( 'Go Back' , 'himara' ); ?></span></a>
|
||||
<a href="#" class="button button-primary js-ocdi-create-content"><?php esc_html_e( 'Import' , 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi__content-container-content--side">
|
||||
<?php echo wp_kses_post( ViewHelpers::small_theme_card() ); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/**
|
||||
* The install plugins page view.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
$plugin_installer = new PluginInstaller();
|
||||
$theme_plugins = $plugin_installer->get_theme_plugins();
|
||||
$theme = wp_get_theme();
|
||||
?>
|
||||
|
||||
<div class="eth-theme-dashboard ocdi ocdi--install-plugins">
|
||||
|
||||
<?php echo wp_kses_post( ViewHelpers::plugin_header_output() ); ?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
|
||||
<div class="ocdi__admin-notices js-ocdi-admin-notices-container"></div>
|
||||
|
||||
<div class="ocdi__content-container-content">
|
||||
<div class="ocdi__content-container-content--main">
|
||||
<?php if ( isset( $_GET['import'] ) ) : ?>
|
||||
<div class="ocdi-install-plugins-content js-ocdi-install-plugins-content">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php esc_html_e( 'Import Demo Content', 'himara' ); ?></h3>
|
||||
|
||||
|
||||
<?php if ( ! empty( $this->import_files[ $_GET['import'] ]['import_notice'] ) ) : ?>
|
||||
<div class="notice notice-info">
|
||||
<p><?php echo wp_kses_post( $this->import_files[ $_GET['import'] ]['import_notice'] ); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="eth-theme-panel-inner ocdi-install-plugins-content-content">
|
||||
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p> <?php echo __('Your website needs a few essential plugins. The following plugins will be installed and activated.', 'himara') ?> </p>
|
||||
</div>
|
||||
|
||||
<?php if ( empty( $theme_plugins ) ) : ?>
|
||||
<div class="ocdi-content-notice">
|
||||
<p>
|
||||
<?php esc_html_e( 'All required/recommended plugins are already installed. You can import your demo content.' , 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div>
|
||||
<?php foreach ( $theme_plugins as $plugin ) : ?>
|
||||
<?php $is_plugin_active = $plugin_installer->is_plugin_active( $plugin['slug'] ); ?>
|
||||
<label class="plugin-item plugin-item-<?php echo esc_attr( $plugin['slug'] ); ?><?php echo $is_plugin_active ? ' plugin-item--active' : ''; ?><?php echo ! empty( $plugin['required'] ) ? ' plugin-item--required' : ''; ?>" for="ocdi-<?php echo esc_attr( $plugin['slug'] ); ?>-plugin">
|
||||
<div class="plugin-item-content">
|
||||
<div class="plugin-item-content-title">
|
||||
<h3><?php echo esc_html( $plugin['name'] ); ?><?php echo ! empty( $plugin['required'] ) ? ' <small class="required-plugin">'.__('Required', 'himara').'</small>' : '<small class="suggested-plugin">'. __('Suggested', 'himara'). '</small>'; ?></h3>
|
||||
<?php if ( in_array( $plugin['slug'], [ 'wpforms-lite', 'all-in-one-seo-pack', 'google-analytics-for-wordpress' ], true ) ) : ?>
|
||||
<span>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/star.svg' ); ?>" alt="<?php esc_attr_e( 'Star icon', 'himara' ); ?>">
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if ( ! empty( $plugin['description'] ) ) : ?>
|
||||
<p>
|
||||
<?php echo wp_kses_post( $plugin['description'] ); ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<div class="plugin-item-error js-ocdi-plugin-item-error"></div>
|
||||
<div class="plugin-item-info js-ocdi-plugin-item-info"></div>
|
||||
</div>
|
||||
<span class="plugin-item-checkbox">
|
||||
<input type="checkbox" id="ocdi-<?php echo esc_attr( $plugin['slug'] ); ?>-plugin" name="<?php echo esc_attr( $plugin['slug'] ); ?>" <?php checked( ! empty( $plugin['preselected'] ) || ! empty( $plugin['required'] ) || $is_plugin_active ); ?><?php disabled( $is_plugin_active ); ?>>
|
||||
<span class="checkbox">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/check-solid-white.svg' ); ?>" class="ocdi-check-icon" alt="<?php esc_attr_e( 'Checkmark icon', 'himara' ); ?>">
|
||||
<?php if ( ! empty( $plugin['required'] ) ) : ?>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/lock.svg' ); ?>" class="ocdi-lock-icon" alt="<?php esc_attr_e( 'Lock icon', 'himara' ); ?>">
|
||||
<?php endif; ?>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/loader.svg' ); ?>" class="ocdi-loading ocdi-loading-md" alt="<?php esc_attr_e( 'Loading...', 'himara' ); ?>">
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div class="">
|
||||
|
||||
<!-- test -->
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="ocdi-install-plugins-content-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url() ); ?>" class="button"><img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/long-arrow-alt-left-blue.svg' ); ?>" alt="<?php esc_attr_e( 'Back icon', 'himara' ); ?>"><span><?php esc_html_e( 'Go Back' , 'himara' ); ?></span></a>
|
||||
<a href="#" class="button button-primary js-ocdi-install-plugins-before-import"><?php esc_html_e( 'Continue & Import' , 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="js-ocdi-auto-start-manual-import"></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="ocdi-importing js-ocdi-importing">
|
||||
|
||||
<div class="eth-theme-panel-header ">
|
||||
<h3 class="title"><?php esc_html_e( 'Import Demo Content' , 'himara' ); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="eth-theme-panel-inner">
|
||||
|
||||
<div class="ocdi-importing-header">
|
||||
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p><?php esc_html_e( 'Please sit tight while we import your content. Do not refresh the page or hit the back button.' , 'himara' ); ?></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ocdi-importing-content">
|
||||
<img class="ocdi-importing-content-importing" src="<?php echo esc_url( OCDI_URL . 'assets/images/importing.svg' ); ?>" alt="<?php esc_attr_e( 'Importing animation', 'himara' ); ?>">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi-imported js-ocdi-imported">
|
||||
|
||||
<div class="eth-theme-panel-header ">
|
||||
<h3 class="title js-ocdi-ajax-response-title"><?php esc_html_e( 'Import Demo Content' , 'himara' ); ?></h3>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="eth-theme-panel-inner">
|
||||
|
||||
<div class="ocdi-imported-header">
|
||||
|
||||
|
||||
<div class="js-ocdi-ajax-response-subtitle">
|
||||
<p>
|
||||
<?php esc_html_e( 'Congrats, your demo was imported successfully. You can now begin editing your site.' , 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ocdi-imported-content">
|
||||
<div class="ocdi__response js-ocdi-ajax-response"></div>
|
||||
</div>
|
||||
<div class="ocdi-imported-footer">
|
||||
<a href="<?php echo esc_url( admin_url( 'admin.php?page=himara_options' ) ); ?>" class="button button-primary button-hero"><?php esc_html_e( 'Theme Settings' , 'himara' ); ?></a>
|
||||
<a href="<?php echo esc_url( get_home_url() ); ?>" target="_blank" class="button button-primary button-hero"><?php esc_html_e( 'Visit Site' , 'himara' ); ?></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi__content-container-content--side">
|
||||
<?php
|
||||
$selected = isset( $_GET['import'] ) ? (int) $_GET['import'] : null;
|
||||
echo wp_kses_post( ViewHelpers::small_theme_card( $selected ) );
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* The install plugins page view.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
$plugin_installer = new PluginInstaller();
|
||||
?>
|
||||
|
||||
<div class="eth-theme-dashboard ocdi ocdi--install-plugins">
|
||||
|
||||
<?php echo wp_kses_post( ViewHelpers::plugin_header_output() ); ?>
|
||||
|
||||
<div class="eth-theme-panel ocdi__content-container">
|
||||
|
||||
<div class="ocdi__admin-notices js-ocdi-admin-notices-container"></div>
|
||||
|
||||
<div class="ocdi__content-container-content">
|
||||
<div class="ocdi__content-container-content--main">
|
||||
<div class="ocdi-install-plugins-content">
|
||||
<div class="ocdi-install-plugins-content-header">
|
||||
<h2><?php esc_html_e( 'Install Recommended Plugins', 'himara' ); ?></h2>
|
||||
<p>
|
||||
<?php esc_html_e( 'Want to use the best plugins for the job? Here is the list of awesome plugins that will help you achieve your goals.', 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="ocdi-install-plugins-content-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url() ); ?>" class="button"><img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/long-arrow-alt-left-blue.svg' ); ?>" alt="<?php esc_attr_e( 'Back icon', 'himara' ); ?>"><span><?php esc_html_e( 'Go Back' , 'himara' ); ?></span></a>
|
||||
<a href="#" class="button button-primary js-ocdi-install-plugins"><?php esc_html_e( 'Install & Activate' , 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi__content-container-content--side">
|
||||
<?php echo wp_kses_post( ViewHelpers::small_theme_card() ); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,411 @@
|
||||
<?php
|
||||
/**
|
||||
* The plugin page view - the "settings" page of the plugin.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
$predefined_themes = $this->import_files;
|
||||
|
||||
if ( ! empty( $this->import_files ) && isset( $_GET['import-mode'] ) && 'manual' === $_GET['import-mode'] ) {
|
||||
$predefined_themes = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook for adding the custom plugin page header
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/plugin_page_header' );
|
||||
?>
|
||||
|
||||
<div class="eth-theme-dashboard ocdi">
|
||||
|
||||
<?php echo wp_kses_post( ViewHelpers::plugin_header_output() ); ?>
|
||||
|
||||
<div class="eth-theme-panel ocdi__content-container">
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
// Display warrning if PHP safe mode is enabled, since we wont be able to change the max_execution_time.
|
||||
if ( ini_get( 'safe_mode' ) ) {
|
||||
printf( /* translators: %1$s - the opening div and paragraph HTML tags, %2$s and %3$s - strong HTML tags, %4$s - the closing div and paragraph HTML tags. */
|
||||
esc_html__( '%1$sWarning: your server is using %2$sPHP safe mode%3$s. This means that you might experience server timeout errors.%4$s', 'himara' ),
|
||||
'<div class="notice notice-warning is-dismissible"><p>',
|
||||
'<strong>',
|
||||
'</strong>',
|
||||
'</p></div>'
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="ocdi__admin-notices js-ocdi-admin-notices-container"></div>
|
||||
|
||||
<?php
|
||||
// Start output buffer for displaying the plugin intro text.
|
||||
ob_start();
|
||||
?>
|
||||
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php esc_html_e( 'Import Demo Content', 'himara' ); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="eth-theme-panel-inner">
|
||||
|
||||
<?php
|
||||
|
||||
|
||||
if ( function_exists( 'theme_license_status' ) ) {
|
||||
|
||||
if ( theme_license_status() == true ) {
|
||||
|
||||
?>
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p>
|
||||
<?php
|
||||
$message = '';
|
||||
$message .= __('Import process will take time needed to download all attachments from the demo web site. ', 'himara');
|
||||
$message .= __('If the import stalls and fails to respond after a few minutes you are suffering from PHP configuration limits that are set too low to complete the process.', 'himara');
|
||||
$message .= __(' You should contact your hosting provider and ask them to increase those limits.', 'himara');
|
||||
|
||||
echo esc_html ( $message );
|
||||
|
||||
?>
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$plugin_intro_text = ob_get_clean();
|
||||
|
||||
// Display the plugin intro text (can be replaced with custom text through the filter below).
|
||||
echo wp_kses_post( Helpers::apply_filters( 'ocdi/plugin_intro_text', $plugin_intro_text ) );
|
||||
?>
|
||||
|
||||
<?php if ( empty( $this->import_files ) ) : ?>
|
||||
<div class="notice notice-info">
|
||||
<p><?php esc_html_e( 'There are no predefined import files available for this theme. Please upload the import files manually below.', 'himara' ); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $theme = wp_get_theme(); ?>
|
||||
|
||||
<div class="ocdi__theme-about">
|
||||
<div class="ocdi__theme-about-screenshots">
|
||||
<?php if ( $theme->get_screenshot() ) : ?>
|
||||
<div class="screenshot"><img src="<?php echo esc_url( $theme->get_screenshot() ); ?>" alt="<?php esc_attr_e( 'Theme screenshot', 'himara' ); ?>" /></div>
|
||||
<?php else : ?>
|
||||
<div class="screenshot blank"></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__theme-about-info">
|
||||
<div class="top-content">
|
||||
<div class="theme-title">
|
||||
<h2 class="theme-name"><?php echo esc_html( $theme->name ); ?></h2>
|
||||
<span class="theme-version">
|
||||
<?php
|
||||
/* translators: %s: Theme version. */
|
||||
printf( __( 'Version: %s', 'himara' ), esc_html( $theme->version ) );
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<p class="theme-author">
|
||||
<?php
|
||||
/* translators: %s: Theme author link. */
|
||||
printf( __( 'By %s', 'himara' ), wp_kses_post( $theme->author ) );
|
||||
?>
|
||||
</p>
|
||||
|
||||
<p class="theme-description"><?php echo wp_kses_post( $theme->description ); ?></p>
|
||||
|
||||
<?php if ( ! empty( $theme->tags ) ) : ?>
|
||||
<hr>
|
||||
<p class="theme-tags"><span><?php echo __('Tags:', 'himara') ?></span> <?php echo esc_html( implode( ', ', $theme->tags ) ); ?></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="bottom-content">
|
||||
<?php if ( ! empty( $this->import_files ) ) : ?>
|
||||
<?php if ( empty( $_GET['import-mode'] ) || 'manual' !== $_GET['import-mode'] ) : ?>
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url( array( 'import-mode' => 'manual' ) ) ); ?>" class="ocdi-import-mode-switch"><?php esc_html_e( 'Switch to Manual Import', 'himara' ); ?></a>
|
||||
<?php else : ?>
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url() ); ?>" class="ocdi-import-mode-switch"><?php esc_html_e( 'Switch back to Theme Predefined Imports', 'himara' ); ?></a>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ( empty( $predefined_themes ) ) : ?>
|
||||
|
||||
<div class="ocdi__file-upload-container">
|
||||
<div class="ocdi__file-upload-container--header">
|
||||
<h2><?php esc_html_e( 'Manual Demo File Import', 'himara' ); ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__file-upload-container-items">
|
||||
<?php $first_row_class = class_exists( 'ReduxFramework' ) ? 'four' : 'three'; ?>
|
||||
<div class="ocdi__file-upload ocdi__card ocdi__card--<?php echo esc_attr( $first_row_class ); ?>">
|
||||
<div class="ocdi__card-content">
|
||||
<label for="ocdi__content-file-upload">
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/content.svg' ); ?>" class="ocdi-icon--content" alt="<?php esc_attr_e( 'Content import icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Import Content', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Select an XML file to import.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#import-content" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<label for="ocdi__content-file-upload" class="button button-primary custom-file-upload-button">
|
||||
<?php esc_html_e( 'Select a File', 'himara' ); ?>
|
||||
</label>
|
||||
<input id="ocdi__content-file-upload" type="file" class="ocdi-hide-input" name="content-file-upload">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__file-upload ocdi__card ocdi__card--<?php echo esc_attr( $first_row_class ); ?>">
|
||||
<div class="ocdi__card-content">
|
||||
<label for="ocdi__widget-file-upload">
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/widgets.svg' ); ?>" class="ocdi-icon--widgets" alt="<?php esc_attr_e( 'Widgets import icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Import Widgets', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Select a JSON/WIE file to import.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#import-widgets" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<label for="ocdi__widget-file-upload" class="button button-primary custom-file-upload-button">
|
||||
<?php esc_html_e( 'Select a File', 'himara' ); ?>
|
||||
</label>
|
||||
<input id="ocdi__widget-file-upload" type="file" class="ocdi-hide-input" name="widget-file-upload">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__file-upload ocdi__card ocdi__card--<?php echo esc_attr( $first_row_class ); ?>">
|
||||
<div class="ocdi__card-content">
|
||||
<label for="ocdi__customizer-file-upload">
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/brush.svg' ); ?>" class="ocdi-icon--brush" alt="<?php esc_attr_e( 'Customizer import icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Import Customizer', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Select a DAT file to import.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#import-customizer" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<label for="ocdi__customizer-file-upload" class="button button-primary custom-file-upload-button">
|
||||
<?php esc_html_e( 'Select a File', 'himara' ); ?>
|
||||
</label>
|
||||
<input id="ocdi__customizer-file-upload" type="file" class="ocdi-hide-input" name="customizer-file-upload">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ( class_exists( 'ReduxFramework' ) ) : ?>
|
||||
<div class="ocdi__file-upload ocdi__card ocdi__card--<?php echo esc_attr( $first_row_class ); ?>">
|
||||
<div class="ocdi__card-content">
|
||||
<label for="ocdi__redux-file-upload">
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/redux.svg' ); ?>" class="ocdi-icon--redux" alt="<?php esc_attr_e( 'Redux import icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Import Redux', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Select a JSON file and enter Redux option name.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#import-redux" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<label for="ocdi__redux-file-upload" class="button button-primary custom-file-upload-button">
|
||||
<?php esc_html_e( 'Select a File', 'himara' ); ?>
|
||||
</label>
|
||||
<input id="ocdi__redux-file-upload" type="file" class="ocdi-hide-input" name="redux-file-upload">
|
||||
<input id="ocdi__redux-option-name" class="ocdi__redux-option-name-input" type="text" name="redux-option-name" placeholder="<?php esc_attr_e( 'Enter Option Name', 'himara' ); ?>">
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
<div class="ocdi__file-upload-container-items ocdi__file-upload-container-items--second-row">
|
||||
<div class="ocdi__recommended-plugins ocdi__card ocdi__card--three">
|
||||
<div class="ocdi__card-content">
|
||||
<label>
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/plugins.svg' ); ?>" class="ocdi-icon--plugins" alt="<?php esc_attr_e( 'Recommended plugins icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Recommended Plugins', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Install our recommended plugins.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#recommended-plugins" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url( array( 'step' => 'install-plugins' ) ) ); ?>" class="button button-secondary"><?php esc_html_e( 'Install Plugins', 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__create-demo-content ocdi__card ocdi__card--three">
|
||||
<div class="ocdi__card-content">
|
||||
<label>
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/copy.svg' ); ?>" class="ocdi-icon--copy" alt="<?php esc_attr_e( 'Create demo content icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Create Demo Content', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Create useful content with a few clicks.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#create-demo-content" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url( array( 'step' => 'create-content' ) ) ); ?>" class="button button-secondary"><?php esc_html_e( 'Create Content', 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi__create-landing-pages ocdi__card ocdi__card--three">
|
||||
<div class="ocdi__card-content">
|
||||
<label>
|
||||
<div class="ocdi-icon-container">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/layout.svg' ); ?>" class="ocdi-icon--layout" alt="<?php esc_attr_e( 'Create landing pages icon', 'himara' ); ?>">
|
||||
</div>
|
||||
<h3><?php esc_html_e( 'Create Landing Pages', 'himara' ); ?></h3>
|
||||
<p><?php esc_html_e( 'Create beautiful converting pages.', 'himara' ); ?></p>
|
||||
</label>
|
||||
<a href="https://ocdi.com/user-guide/#create-landing-pages" target="_blank" rel="noopener noreferrer" class="ocdi__card-content-info">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/info-circle.svg' ); ?>" alt="<?php esc_attr_e( 'Info icon', 'himara' ); ?>">
|
||||
</a>
|
||||
</div>
|
||||
<div class="ocdi__card-footer">
|
||||
<?php
|
||||
$plugin_installer = new PluginInstaller();
|
||||
$seedprod_active = $plugin_installer->is_plugin_active( 'coming-soon' );
|
||||
?>
|
||||
<a href="#" class="button button-secondary js-ocdi-install-coming-soon-plugin<?php echo esc_attr( empty( $seedprod_active ) ) ? '' : ' button-disabled'; ?>">
|
||||
<?php echo esc_html( empty( $seedprod_active ) ) ? esc_html__( 'Install Plugin', 'himara' ) : esc_html__( 'Installed', 'himara' ); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi__file-upload-container--footer">
|
||||
<button class="ocdi__button button button-hero js-ocdi-cancel-manual-import" disabled><?php esc_html_e( 'Cancel', 'himara' ); ?></button>
|
||||
<button class="ocdi__button button button-hero button-primary js-ocdi-start-manual-import" disabled><?php esc_html_e( 'Continue & Import', 'himara' ); ?></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php elseif ( 1 === count( $predefined_themes ) ) : ?>
|
||||
|
||||
<div class="ocdi__demo-import-notice js-ocdi-demo-import-notice"><?php
|
||||
if ( is_array( $predefined_themes ) && ! empty( $predefined_themes[0]['import_notice'] ) ) {
|
||||
echo wp_kses_post( $predefined_themes[0]['import_notice'] );
|
||||
}
|
||||
?></div>
|
||||
|
||||
<p class="ocdi__button-container">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url( [ 'step' => 'import', 'import' => 0 ] ) ); ?>" class="ocdi__button button button-hero button-primary"><?php esc_html_e( 'Import Demo Data', 'himara' ); ?></a>
|
||||
</p>
|
||||
|
||||
<?php else : ?>
|
||||
|
||||
<!-- OCDI grid layout -->
|
||||
<div class="ocdi__gl js-ocdi-gl">
|
||||
<?php
|
||||
// Prepare navigation data.
|
||||
$categories = Helpers::get_all_demo_import_categories( $predefined_themes );
|
||||
?>
|
||||
<?php if ( ! empty( $categories ) ) : ?>
|
||||
<div class="ocdi__gl-header js-ocdi-gl-header">
|
||||
<nav class="ocdi__gl-navigation">
|
||||
<ul>
|
||||
<li class="active"><a href="#all" class="ocdi__gl-navigation-link js-ocdi-nav-link"><span><?php esc_html_e( 'All Demos', 'himara' ); ?></span></a></li>
|
||||
<?php foreach ( $categories as $key => $name ) : ?>
|
||||
<li>
|
||||
<a href="#<?php echo esc_attr( $key ); ?>" class="ocdi__gl-navigation-link js-ocdi-nav-link">
|
||||
<span>
|
||||
<?php echo esc_html( $name ); ?>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<div clas="ocdi__gl-search">
|
||||
<input type="search" class="ocdi__gl-search-input js-ocdi-gl-search" name="ocdi-gl-search" value="" placeholder="<?php esc_html_e( 'Search Demos...', 'himara' ); ?>">
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<hr>
|
||||
<?php endif; ?>
|
||||
<div class="ocdi__gl-item-container js-ocdi-gl-item-container">
|
||||
<?php foreach ( $predefined_themes as $index => $import_file ) : ?>
|
||||
<?php
|
||||
// Prepare import item display data.
|
||||
$img_src = isset( $import_file['import_preview_image_url'] ) ? $import_file['import_preview_image_url'] : '';
|
||||
// Default to the theme screenshot, if a custom preview image is not defined.
|
||||
if ( empty( $img_src ) ) {
|
||||
$theme = wp_get_theme();
|
||||
$img_src = $theme->get_screenshot();
|
||||
}
|
||||
|
||||
?>
|
||||
<div class="ocdi__gl-item js-ocdi-gl-item" data-categories="<?php echo esc_attr( Helpers::get_demo_import_item_categories( $import_file ) ); ?>" data-name="<?php echo esc_attr( strtolower( $import_file['import_file_name'] ) ); ?>">
|
||||
<div class="ocdi__gl-item-image-container">
|
||||
<?php if ( ! empty( $img_src ) ) : ?>
|
||||
<img class="ocdi__gl-item-image" src="<?php echo esc_url( $img_src ) ?>">
|
||||
<?php else : ?>
|
||||
<div class="ocdi__gl-item-image ocdi__gl-item-image--no-image"><?php esc_html_e( 'No preview image.', 'himara' ); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="ocdi__gl-item-footer<?php echo ! esc_url( empty( $import_file['preview_url'] ) ) ? ' ocdi__gl-item-footer--with-preview' : ''; ?>">
|
||||
<h4 class="ocdi__gl-item-title" title="<?php echo esc_attr( $import_file['import_file_name'] ); ?>"><?php echo esc_html( $import_file['import_file_name'] ); ?></h4>
|
||||
<span class="ocdi__gl-item-buttons">
|
||||
<?php if ( ! empty( $import_file['preview_url'] ) ) : ?>
|
||||
<a class="ocdi__gl-item-button button" href="<?php echo esc_url( $import_file['preview_url'] ); ?>" target="_blank"><?php esc_html_e( 'Preview Demo', 'himara' ); ?></a>
|
||||
<?php endif; ?>
|
||||
<a class="ocdi__gl-item-button button button-primary" href="<?php echo esc_html( $this->get_plugin_settings_url( [ 'step' => 'import', 'import' => esc_attr( $index ) ] ) ); ?>"><?php esc_html_e( 'Import Demo', 'himara' ); ?></a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
} else {
|
||||
|
||||
?>
|
||||
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p><?php echo __('Please, activate your theme license in order to use the Demo Importer.', 'himara') ?></p>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
/**
|
||||
* Hook for adding the custom admin page footer
|
||||
*/
|
||||
Helpers::do_action( 'ocdi/plugin_page_footer' );
|
||||
679
wp-content/themes/himara/core/admin/inc/licensor.php
Normal file
@@ -0,0 +1,679 @@
|
||||
<?php
|
||||
if(!class_exists("HimaraBase")) {
|
||||
class HimaraBase {
|
||||
public $key = "A021929C5FF89F4A";
|
||||
private $product_id = "3";
|
||||
private $product_base = "himara";
|
||||
private $server_host = "https://api.eagle-themes.com/wp-json/licensor/";
|
||||
private $hasCheckUpdate=true;
|
||||
private $isEncryptUpdate=true;
|
||||
private $pluginFile;
|
||||
private static $selfobj=null;
|
||||
private $version="";
|
||||
private $isTheme=false;
|
||||
private $emailAddress = "";
|
||||
private static $_onDeleteLicense=[];
|
||||
function __construct($plugin_base_file='')
|
||||
{
|
||||
$this->pluginFile=$plugin_base_file;
|
||||
$dir=dirname($plugin_base_file);
|
||||
$dir=str_replace('\\','/',$dir);
|
||||
if(strpos($dir,'wp-content/themes')!==FALSE){
|
||||
$this->isTheme=true;
|
||||
}
|
||||
$this->version=$this->getCurrentVersion();
|
||||
if($this->hasCheckUpdate) {
|
||||
if(function_exists("add_action")){
|
||||
add_action( 'admin_post_himara_fupc', function(){
|
||||
update_option('_site_transient_update_plugins','');
|
||||
update_option('_site_transient_update_themes','');
|
||||
set_site_transient('update_themes', null);
|
||||
delete_transient($this->product_base."_up");
|
||||
wp_redirect( admin_url( 'plugins.php' ) );
|
||||
exit;
|
||||
});
|
||||
add_action( 'init', [$this,"initActionHandler"]);
|
||||
|
||||
}
|
||||
if(function_exists("add_filter")) {
|
||||
//
|
||||
if($this->isTheme){
|
||||
add_filter('pre_set_site_transient_update_themes', [$this, "PluginUpdate"]);
|
||||
add_filter('themes_api', [$this, 'checkUpdateInfo'], 10, 3);
|
||||
}else{
|
||||
add_filter('pre_set_site_transient_update_plugins', [$this, "PluginUpdate"]);
|
||||
add_filter('plugins_api', [$this, 'checkUpdateInfo'], 10, 3);
|
||||
add_filter( 'plugin_row_meta', function($links, $plugin_file ){
|
||||
if ( $plugin_file == plugin_basename( $this->pluginFile ) ) {
|
||||
$links[] = " <a class='edit coption' href='" . esc_url( admin_url( 'admin-post.php' ) . '?action=himara_fupc' ) . "'>Update Check</a>";
|
||||
}
|
||||
return $links;
|
||||
}, 10, 2 );
|
||||
add_action( "in_plugin_update_message-".plugin_basename( $this->pluginFile ), [$this,'updateMessageCB'], 20, 2 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
public function setEmailAddress( $emailAddress ) {
|
||||
$this->emailAddress = $emailAddress;
|
||||
}
|
||||
function initActionHandler(){
|
||||
$handler=hash("crc32b",$this->product_id.$this->key.$this->getDomain())."_handle";
|
||||
if(isset($_GET['action']) && $_GET['action']==$handler){
|
||||
$this->handleServerRequest();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
function handleServerRequest(){
|
||||
$type=isset($_GET['type'])?strtolower($_GET['type']):"";
|
||||
switch ($type) {
|
||||
case "rl": //remove license
|
||||
$this->cleanUpdateInfo();
|
||||
$this->removeOldWPResponse();
|
||||
$obj = new stdClass();
|
||||
$obj->product = $this->product_id;
|
||||
$obj->status = true;
|
||||
echo esc_html( $this->encryptObj( $obj ) );
|
||||
|
||||
return;
|
||||
case "rc": //remove license
|
||||
$key = $this->getKeyName();
|
||||
delete_option( $key );
|
||||
$obj = new stdClass();
|
||||
$obj->product = $this->product_id;
|
||||
$obj->status = true;
|
||||
echo esc_html( $this->encryptObj( $obj ) );
|
||||
return;
|
||||
case "dl": //delete plugins
|
||||
$obj = new stdClass();
|
||||
$obj->product = $this->product_id;
|
||||
$obj->status = false;
|
||||
$this->removeOldWPResponse();
|
||||
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
||||
if ( $this->isTheme ) {
|
||||
$res = delete_theme( $this->pluginFile );
|
||||
if ( ! is_wp_error( $res ) ) {
|
||||
$obj->status = true;
|
||||
}
|
||||
echo esc_html( $this->encryptObj( $obj ) );
|
||||
} else {
|
||||
deactivate_plugins( [ plugin_basename( $this->pluginFile ) ] );
|
||||
$res = delete_plugins( [ plugin_basename( $this->pluginFile ) ] );
|
||||
if ( ! is_wp_error( $res ) ) {
|
||||
$obj->status = true;
|
||||
}
|
||||
echo esc_html( $this->encryptObj( $obj ) );
|
||||
}
|
||||
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param callable $func
|
||||
*/
|
||||
static function addOnDelete( $func){
|
||||
self::$_onDeleteLicense[]=$func;
|
||||
}
|
||||
function getCurrentVersion(){
|
||||
if( !function_exists('get_plugin_data') ){
|
||||
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
||||
}
|
||||
$data=get_plugin_data($this->pluginFile);
|
||||
if(isset($data['Version'])){
|
||||
return $data['Version'];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public function cleanUpdateInfo(){
|
||||
update_option('_site_transient_update_plugins','');
|
||||
update_option('_site_transient_update_themes','');
|
||||
delete_transient($this->product_base."_up");
|
||||
}
|
||||
public function updateMessageCB($data, $response){
|
||||
if(is_array($data)){
|
||||
$data=(object)$data;
|
||||
}
|
||||
if(isset($data->package) && empty($data->package)) {
|
||||
if(empty($data->update_denied_type)) {
|
||||
print "<br/><span style='display: block; border-top: 1px solid #ccc;padding-top: 5px; margin-top: 10px;'>Please <strong>active product</strong> or <strong>renew support period</strong> to get latest version</span>";
|
||||
}elseif($data->update_denied_type=="L"){
|
||||
print "<br/><span style='display: block; border-top: 1px solid #ccc;padding-top: 5px; margin-top: 10px;'>Please <strong>active product</strong> to get latest version</span>";
|
||||
}elseif($data->update_denied_type=="S"){
|
||||
print "<br/><span style='display: block; border-top: 1px solid #ccc;padding-top: 5px; margin-top: 10px;'>Please <strong>renew support period</strong> to get latest version</span>";
|
||||
}
|
||||
}
|
||||
}
|
||||
function __plugin_updateInfo(){
|
||||
if(function_exists("wp_remote_get")) {
|
||||
$response = get_transient( $this->product_base."_up" );
|
||||
$oldFound = false;
|
||||
if ( ! empty( $response['data'] ) ) {
|
||||
$response = unserialize( $this->decrypt( $response['data'] ) );
|
||||
if ( is_array( $response ) ) {
|
||||
$oldFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! $oldFound ) {
|
||||
$licenseInfo=self::GetRegisterInfo();
|
||||
$url=$this->server_host . "product/update/" . $this->product_id;
|
||||
if(!empty($licenseInfo->license_key)) {
|
||||
$url.="/".$licenseInfo->license_key."/".$this->version;
|
||||
}
|
||||
$args=[
|
||||
'sslverify' => true,
|
||||
'timeout' => 120,
|
||||
'redirection' => 5,
|
||||
'cookies' => array()
|
||||
];
|
||||
$response = wp_remote_get( $url,$args);
|
||||
if (is_wp_error($response)) {
|
||||
$args['sslverify']=false;
|
||||
$response = wp_remote_get( $url,$args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_wp_error($response)) {
|
||||
$body = $response['body'];
|
||||
$responseJson = @json_decode( $body );
|
||||
if ( ! $oldFound ) {
|
||||
set_transient( $this->product_base."_up", [ "data" => $this->encrypt( serialize( [ 'body' => $body ] ) ) ], DAY_IN_SECONDS );
|
||||
}
|
||||
|
||||
if(!(is_object( $responseJson ) && isset($responseJson->status )) && $this->isEncryptUpdate){
|
||||
$body=$this->decrypt($body,$this->key);
|
||||
$responseJson = json_decode( $body );
|
||||
}
|
||||
|
||||
if ( is_object( $responseJson ) && ! empty( $responseJson->status ) && ! empty( $responseJson->data->new_version ) ) {
|
||||
$responseJson->data->slug = plugin_basename( $this->pluginFile );;
|
||||
$responseJson->data->new_version = ! empty( $responseJson->data->new_version ) ? $responseJson->data->new_version : "";
|
||||
$responseJson->data->url = ! empty( $responseJson->data->url ) ? $responseJson->data->url : "";
|
||||
$responseJson->data->package = ! empty( $responseJson->data->download_link ) ? $responseJson->data->download_link : "";
|
||||
$responseJson->data->update_denied_type = ! empty( $responseJson->data->update_denied_type ) ? $responseJson->data->update_denied_type : "";
|
||||
|
||||
$responseJson->data->sections = (array) $responseJson->data->sections;
|
||||
$responseJson->data->plugin = plugin_basename( $this->pluginFile );
|
||||
$responseJson->data->icons = (array) $responseJson->data->icons;
|
||||
$responseJson->data->banners = (array) $responseJson->data->banners;
|
||||
$responseJson->data->banners_rtl = (array) $responseJson->data->banners_rtl;
|
||||
unset( $responseJson->data->IsStoppedUpdate );
|
||||
|
||||
return $responseJson->data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
function PluginUpdate($transient)
|
||||
{
|
||||
$response = $this->__plugin_updateInfo();
|
||||
if(!empty($response->plugin)){
|
||||
if($this->isTheme){
|
||||
$theme_data = wp_get_theme();
|
||||
$index_name="".$theme_data->get_template();
|
||||
}else{
|
||||
$index_name=$response->plugin;
|
||||
}
|
||||
if (!empty($response) && version_compare($this->version, $response->new_version, '<')) {
|
||||
unset($response->download_link);
|
||||
unset($response->IsStoppedUpdate);
|
||||
if($this->isTheme){
|
||||
$transient->response[$index_name] = (array)$response;
|
||||
}else{
|
||||
$transient->response[$index_name] = (object)$response;
|
||||
}
|
||||
}else{
|
||||
if(isset($transient->response[$index_name])){
|
||||
unset($transient->response[$index_name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $transient;
|
||||
}
|
||||
final function checkUpdateInfo($false, $action, $arg) {
|
||||
if ( empty($arg->slug)){
|
||||
return $false;
|
||||
}
|
||||
if($this->isTheme){
|
||||
if ( !empty($arg->slug) && $arg->slug === $this->product_base){
|
||||
$response =$this->__plugin_updateInfo();
|
||||
if ( !empty($response)) {
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if ( !empty($arg->slug) && $arg->slug === plugin_basename($this->pluginFile) ) {
|
||||
$response =$this->__plugin_updateInfo();
|
||||
if ( !empty($response)) {
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $plugin_base_file
|
||||
*
|
||||
* @return self|null
|
||||
*/
|
||||
static function &getInstance($plugin_base_file=null) {
|
||||
if(empty(self::$selfobj)){
|
||||
if(!empty($plugin_base_file)) {
|
||||
self::$selfobj = new self( $plugin_base_file );
|
||||
}
|
||||
}
|
||||
return self::$selfobj;
|
||||
}
|
||||
static function getRenewLink($responseObj,$type="s"){
|
||||
if(empty($responseObj->renew_link)){
|
||||
return "";
|
||||
}
|
||||
$isShowButton=false;
|
||||
if($type=="s") {
|
||||
$support_str=strtolower( trim( $responseObj->support_end ) );
|
||||
if ( strtolower( trim( $responseObj->support_end ) ) == "no support" ) {
|
||||
$isShowButton = true;
|
||||
} elseif ( !in_array($support_str, ["unlimited"] ) ) {
|
||||
if ( strtotime( 'ADD 30 DAYS', strtotime( $responseObj->support_end ) ) < time() ) {
|
||||
$isShowButton = true;
|
||||
}
|
||||
}
|
||||
if ( $isShowButton ) {
|
||||
return $responseObj->renew_link.(strpos($responseObj->renew_link,"?")===FALSE?'?type=s&lic='.rawurlencode($responseObj->license_key):'&type=s&lic='.rawurlencode($responseObj->license_key));
|
||||
}
|
||||
return '';
|
||||
}else{
|
||||
$isShowButton=false;
|
||||
$expire_str=strtolower( trim( $responseObj->expire_date ) );
|
||||
if ( !in_array($expire_str, ["unlimited","no expiry"] )) {
|
||||
if ( strtotime( 'ADD 30 DAYS', strtotime( $responseObj->expire_date ) ) < time() ) {
|
||||
$isShowButton = true;
|
||||
}
|
||||
}
|
||||
if ( $isShowButton ) {
|
||||
return $responseObj->renew_link.(strpos($responseObj->renew_link,"?")===FALSE?'?type=l&lic='.rawurlencode($responseObj->license_key):'&type=l&lic='.rawurlencode($responseObj->license_key));
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
private function encrypt($plainText,$password='') {
|
||||
if(empty($password)){
|
||||
$password=$this->key;
|
||||
}
|
||||
$plainText=rand(10,99).$plainText.rand(10,99);
|
||||
$method = 'aes-256-cbc';
|
||||
$key = substr( hash( 'sha256', $password, true ), 0, 32 );
|
||||
$iv = substr(strtoupper(md5($password)),0,16);
|
||||
return base64_encode( openssl_encrypt( $plainText, $method, $key, OPENSSL_RAW_DATA, $iv ) );
|
||||
}
|
||||
private function decrypt($encrypted,$password='') {
|
||||
if(empty($password)){
|
||||
$password=$this->key;
|
||||
}
|
||||
$method = 'aes-256-cbc';
|
||||
$key = substr( hash( 'sha256', $password, true ), 0, 32 );
|
||||
$iv = substr(strtoupper(md5($password)),0,16);
|
||||
$plaintext=openssl_decrypt( base64_decode( $encrypted ), $method, $key, OPENSSL_RAW_DATA, $iv );
|
||||
return substr($plaintext,2,-2);
|
||||
}
|
||||
|
||||
function encryptObj( $obj ) {
|
||||
$text = serialize( $obj );
|
||||
|
||||
return $this->encrypt( $text );
|
||||
}
|
||||
|
||||
private function decryptObj( $ciphertext ) {
|
||||
$text = $this->decrypt( $ciphertext );
|
||||
|
||||
return unserialize( $text );
|
||||
}
|
||||
|
||||
|
||||
private function getDomain() {
|
||||
if(function_exists("site_url")){
|
||||
return site_url();
|
||||
}
|
||||
if ( defined( "WPINC" ) && function_exists( "get_bloginfo" ) ) {
|
||||
return home_url();
|
||||
} else {
|
||||
$base_url = ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == "on" ) ? "https" : "http" );
|
||||
$base_url .= "://" . $_SERVER['HTTP_HOST'];
|
||||
$base_url .= str_replace( basename( $_SERVER['SCRIPT_NAME'] ), "", $_SERVER['SCRIPT_NAME'] );
|
||||
|
||||
return $base_url;
|
||||
}
|
||||
}
|
||||
|
||||
private function getEmail() {
|
||||
return $this->emailAddress;
|
||||
}
|
||||
private function processs_response($response){
|
||||
$resbk="";
|
||||
if ( ! empty( $response ) ) {
|
||||
if ( ! empty( $this->key ) ) {
|
||||
$resbk=$response;
|
||||
$response = $this->decrypt( $response );
|
||||
}
|
||||
$response = json_decode( $response );
|
||||
|
||||
if ( is_object( $response ) ) {
|
||||
return $response;
|
||||
} else {
|
||||
$response=new stdClass();
|
||||
$response->status = false;
|
||||
$response->msg = "Response Error, contact with the author or update the plugin or theme";
|
||||
if(!empty($bkjson)){
|
||||
$bkjson=@json_decode($resbk);
|
||||
if(!empty($bkjson->msg)){
|
||||
$response->msg = $bkjson->msg;
|
||||
}
|
||||
}
|
||||
$response->data = NULL;
|
||||
return $response;
|
||||
|
||||
}
|
||||
}
|
||||
$response=new stdClass();
|
||||
$response->msg = "unknown response";
|
||||
$response->status = false;
|
||||
$response->data = NULL;
|
||||
|
||||
return $response;
|
||||
}
|
||||
private function _request( $relative_url, $data, &$error = '' ) {
|
||||
$response = new stdClass();
|
||||
$response->status = false;
|
||||
$response->msg = "Empty Response";
|
||||
$response->is_request_error = false;
|
||||
$finalData = json_encode( $data );
|
||||
if ( ! empty( $this->key ) ) {
|
||||
$finalData = $this->encrypt( $finalData );
|
||||
}
|
||||
$url = rtrim( $this->server_host, '/' ) . "/" . ltrim( $relative_url, '/' );
|
||||
if(function_exists('wp_remote_post')) {
|
||||
$rq_params=[
|
||||
'method' => 'POST',
|
||||
'sslverify' => true,
|
||||
'timeout' => 120,
|
||||
'redirection' => 5,
|
||||
'httpversion' => '1.0',
|
||||
'blocking' => true,
|
||||
'headers' => [],
|
||||
'body' => $finalData,
|
||||
'cookies' => []
|
||||
];
|
||||
$serverResponse = wp_remote_post($url, $rq_params);
|
||||
|
||||
if (is_wp_error($serverResponse)) {
|
||||
$rq_params['sslverify']=false;
|
||||
$serverResponse = wp_remote_post($url, $rq_params);
|
||||
if (is_wp_error($serverResponse)) {
|
||||
$response->msg = $serverResponse->get_error_message();;
|
||||
$response->status = false;
|
||||
$response->data = NULL;
|
||||
$response->is_request_error = true;
|
||||
return $response;
|
||||
}else{
|
||||
if(!empty($serverResponse['body']) && (is_array($serverResponse) && 200 === (int) wp_remote_retrieve_response_code( $serverResponse )) && $serverResponse['body']!="GET404" ){
|
||||
return $this->processs_response($serverResponse['body']);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(!empty($serverResponse['body']) && (is_array($serverResponse) && 200 === (int) wp_remote_retrieve_response_code( $serverResponse )) && $serverResponse['body']!="GET404" ){
|
||||
return $this->processs_response($serverResponse['body']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(!extension_loaded('curl')){
|
||||
$response->msg = "Curl extension is missing";
|
||||
$response->status = false;
|
||||
$response->data = NULL;
|
||||
$response->is_request_error = true;
|
||||
return $response;
|
||||
}
|
||||
//curl when fall back
|
||||
$curlParams=[
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_SSL_VERIFYPEER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 120,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_POSTFIELDS => $finalData,
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Content-Type: text/plain",
|
||||
"cache-control: no-cache"
|
||||
)
|
||||
];
|
||||
$curl = curl_init();
|
||||
curl_setopt_array( $curl, $curlParams);
|
||||
$serverResponse = curl_exec( $curl );
|
||||
$curlErrorNo=curl_errno($curl);
|
||||
$error = curl_error( $curl );
|
||||
curl_close( $curl );
|
||||
if (!$curlErrorNo) {
|
||||
if ( ! empty( $serverResponse ) ) {
|
||||
return $this->processs_response($serverResponse);
|
||||
}
|
||||
}else{
|
||||
$curl = curl_init();
|
||||
$curlParams[CURLOPT_SSL_VERIFYPEER]=false;
|
||||
$curlParams[CURLOPT_SSL_VERIFYHOST]=false;
|
||||
curl_setopt_array( $curl, $curlParams);
|
||||
$serverResponse = curl_exec( $curl );
|
||||
$curlErrorNo=curl_errno($curl);
|
||||
$error = curl_error( $curl );
|
||||
curl_close( $curl );
|
||||
if(!$curlErrorNo){
|
||||
if ( ! empty( $serverResponse ) ) {
|
||||
return $this->processs_response($serverResponse);
|
||||
}
|
||||
}else{
|
||||
$response->msg = $error;
|
||||
$response->status = false;
|
||||
$response->data = NULL;
|
||||
$response->is_request_error = true;
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
$response->msg = "unknown response";
|
||||
$response->status = false;
|
||||
$response->data = NULL;
|
||||
$response->is_request_error = true;
|
||||
return $response;
|
||||
}
|
||||
|
||||
private function getParam( $purchase_key, $app_version, $admin_email = '' ) {
|
||||
$req = new stdClass();
|
||||
$req->license_key = $purchase_key;
|
||||
$req->email = ! empty( $admin_email ) ? $admin_email : $this->getEmail();
|
||||
$req->domain = $this->getDomain();
|
||||
$req->app_version = $app_version;
|
||||
$req->product_id = $this->product_id;
|
||||
$req->product_base = $this->product_base;
|
||||
|
||||
return $req;
|
||||
}
|
||||
|
||||
private function getKeyName() {
|
||||
return hash( 'crc32b', $this->getDomain() . $this->pluginFile . $this->product_id . $this->product_base . $this->key . "LIC" );
|
||||
}
|
||||
|
||||
private function SaveWPResponse( $response ) {
|
||||
$key = $this->getKeyName();
|
||||
$data = $this->encrypt( serialize( $response ), $this->getDomain() );
|
||||
update_option( $key, $data ) OR add_option( $key, $data );
|
||||
}
|
||||
|
||||
private function getOldWPResponse() {
|
||||
$key = $this->getKeyName();
|
||||
$response = get_option( $key, NULL );
|
||||
if ( empty( $response ) ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return unserialize( $this->decrypt( $response, $this->getDomain() ) );
|
||||
}
|
||||
|
||||
private function removeOldWPResponse() {
|
||||
$key = $this->getKeyName();
|
||||
$isDeleted = delete_option( $key );
|
||||
foreach ( self::$_onDeleteLicense as $func ) {
|
||||
if ( is_callable( $func ) ) {
|
||||
call_user_func( $func );
|
||||
}
|
||||
}
|
||||
|
||||
return $isDeleted;
|
||||
}
|
||||
public static function RemoveLicenseKey($plugin_base_file,&$message = "") {
|
||||
$obj=self::getInstance($plugin_base_file);
|
||||
$obj->cleanUpdateInfo();
|
||||
return $obj->_removeWPPluginLicense($message);
|
||||
}
|
||||
public static function CheckWPPlugin($purchase_key, $email,&$error = "", &$responseObj = null,$plugin_base_file="") {
|
||||
$obj=self::getInstance($plugin_base_file);
|
||||
$obj->setEmailAddress($email);
|
||||
return $obj->_CheckWPPlugin($purchase_key, $error, $responseObj);
|
||||
}
|
||||
final function _removeWPPluginLicense(&$message=''){
|
||||
$oldRespons=$this->getOldWPResponse();
|
||||
if(!empty($oldRespons->is_valid)) {
|
||||
if ( ! empty( $oldRespons->license_key ) ) {
|
||||
$param = $this->getParam( $oldRespons->license_key, $this->version );
|
||||
$response = $this->_request( 'product/deactive/'.$this->product_id, $param, $message );
|
||||
if ( empty( $response->code ) ) {
|
||||
if ( ! empty( $response->status ) ) {
|
||||
$message = $response->msg;
|
||||
$this->removeOldWPResponse();
|
||||
return true;
|
||||
}else{
|
||||
$message = $response->msg;
|
||||
}
|
||||
}else{
|
||||
$message=$response->message;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$this->removeOldWPResponse();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
public static function GetRegisterInfo() {
|
||||
if(!empty(self::$selfobj)){
|
||||
return self::$selfobj->getOldWPResponse();
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
final function _CheckWPPlugin( $purchase_key, &$error = "", &$responseObj = null ) {
|
||||
if(empty($purchase_key)){
|
||||
$this->removeOldWPResponse();
|
||||
$error="";
|
||||
return false;
|
||||
}
|
||||
$oldRespons=$this->getOldWPResponse();
|
||||
$isForce=false;
|
||||
if(!empty($oldRespons)) {
|
||||
if ( ! empty( $oldRespons->expire_date ) && strtolower( $oldRespons->expire_date ) != "no expiry" && strtotime( $oldRespons->expire_date ) < time() ) {
|
||||
$isForce = true;
|
||||
}
|
||||
if ( ! $isForce && ! empty( $oldRespons->is_valid ) && $oldRespons->next_request > time() && ( ! empty( $oldRespons->license_key ) && $purchase_key == $oldRespons->license_key ) ) {
|
||||
$responseObj = clone $oldRespons;
|
||||
unset( $responseObj->next_request );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$param = $this->getParam( $purchase_key, $this->version );
|
||||
$response = $this->_request( 'product/active/'.$this->product_id, $param, $error );
|
||||
if(empty($response->is_request_error)) {
|
||||
if ( empty( $response->code ) ) {
|
||||
if ( ! empty( $response->status ) ) {
|
||||
if ( ! empty( $response->data ) ) {
|
||||
$serialObj = $this->decrypt( $response->data, $param->domain );
|
||||
|
||||
$licenseObj = unserialize( $serialObj );
|
||||
if ( $licenseObj->is_valid ) {
|
||||
$responseObj = new stdClass();
|
||||
$responseObj->is_valid = $licenseObj->is_valid;
|
||||
if ( $licenseObj->request_duration > 0 ) {
|
||||
$responseObj->next_request = strtotime( "+ {$licenseObj->request_duration} hour" );
|
||||
} else {
|
||||
$responseObj->next_request = time();
|
||||
}
|
||||
$responseObj->expire_date = $licenseObj->expire_date;
|
||||
$responseObj->support_end = $licenseObj->support_end;
|
||||
$responseObj->license_title = $licenseObj->license_title;
|
||||
$responseObj->license_key = $purchase_key;
|
||||
$responseObj->msg = $response->msg;
|
||||
$responseObj->renew_link = !empty($licenseObj->renew_link)?$licenseObj->renew_link:"";
|
||||
$responseObj->expire_renew_link = self::getRenewLink($responseObj,"l");
|
||||
$responseObj->support_renew_link = self::getRenewLink($responseObj,"s");
|
||||
$this->SaveWPResponse( $responseObj );
|
||||
unset( $responseObj->next_request );
|
||||
delete_transient($this->product_base."_up");
|
||||
return true;
|
||||
} else {
|
||||
if ( $this->__checkoldtied( $oldRespons, $responseObj, $response ) ) {
|
||||
return true;
|
||||
} else {
|
||||
$this->removeOldWPResponse();
|
||||
$error = ! empty( $response->msg ) ? $response->msg : "";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$error = "Invalid data";
|
||||
}
|
||||
|
||||
} else {
|
||||
$error = $response->msg;
|
||||
}
|
||||
} else {
|
||||
$error = $response->message;
|
||||
}
|
||||
}else{
|
||||
if ( $this->__checkoldtied( $oldRespons, $responseObj, $response ) ) {
|
||||
return true;
|
||||
} else {
|
||||
$this->removeOldWPResponse();
|
||||
$error = ! empty( $response->msg ) ? $response->msg : "";
|
||||
}
|
||||
}
|
||||
return $this->__checkoldtied($oldRespons,$responseObj);
|
||||
}
|
||||
private function __checkoldtied(&$oldRespons,&$responseObj){
|
||||
if(!empty($oldRespons) && (empty($oldRespons->tried) || $oldRespons->tried<=2)){
|
||||
$oldRespons->next_request = strtotime("+ 1 hour");
|
||||
$oldRespons->tried=empty($oldRespons->tried)?1:($oldRespons->tried+1);
|
||||
$responseObj = clone $oldRespons;
|
||||
unset( $responseObj->next_request );
|
||||
if(isset($responseObj->tried)) {
|
||||
unset( $responseObj->tried );
|
||||
}
|
||||
$this->SaveWPResponse($oldRespons);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/**
|
||||
* The install plugins page view.
|
||||
*
|
||||
* @package ocdi
|
||||
*/
|
||||
|
||||
namespace OCDI;
|
||||
|
||||
$plugin_installer = new PluginInstaller();
|
||||
$theme_plugins = $plugin_installer->get_theme_plugins();
|
||||
$theme = wp_get_theme();
|
||||
?>
|
||||
|
||||
<div class="eth-theme-dashboard ocdi ocdi--install-plugins">
|
||||
|
||||
<?php echo wp_kses_post( ViewHelpers::plugin_header_output() ); ?>
|
||||
|
||||
<div class="eth-theme-panel">
|
||||
|
||||
<div class="ocdi__admin-notices js-ocdi-admin-notices-container"></div>
|
||||
|
||||
<div class="ocdi__content-container-content">
|
||||
<div class="ocdi__content-container-content--main">
|
||||
<?php if ( isset( $_GET['import'] ) ) : ?>
|
||||
<div class="ocdi-install-plugins-content js-ocdi-install-plugins-content">
|
||||
<div class="eth-theme-panel-header">
|
||||
<h3 class="title"><?php esc_html_e( 'Import Demo Content', 'himara' ); ?></h3>
|
||||
|
||||
|
||||
<?php if ( ! empty( $this->import_files[ $_GET['import'] ]['import_notice'] ) ) : ?>
|
||||
<div class="notice notice-info">
|
||||
<p><?php echo wp_kses_post( $this->import_files[ $_GET['import'] ]['import_notice'] ); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="eth-theme-panel-inner ocdi-install-plugins-content-content">
|
||||
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p> <?php echo __('Your website needs a few essential plugins. The following plugins will be installed and activated.', 'himara') ?> </p>
|
||||
</div>
|
||||
|
||||
<?php if ( empty( $theme_plugins ) ) : ?>
|
||||
<div class="ocdi-content-notice">
|
||||
<p>
|
||||
<?php esc_html_e( 'All required/recommended plugins are already installed. You can import your demo content.' , 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div>
|
||||
<?php foreach ( $theme_plugins as $plugin ) : ?>
|
||||
<?php $is_plugin_active = $plugin_installer->is_plugin_active( $plugin['slug'] ); ?>
|
||||
<label class="plugin-item plugin-item-<?php echo esc_attr( $plugin['slug'] ); ?><?php echo $is_plugin_active ? ' plugin-item--active' : ''; ?><?php echo ! empty( $plugin['required'] ) ? ' plugin-item--required' : ''; ?>" for="ocdi-<?php echo esc_attr( $plugin['slug'] ); ?>-plugin">
|
||||
<div class="plugin-item-content">
|
||||
<div class="plugin-item-content-title">
|
||||
<h3><?php echo esc_html( $plugin['name'] ); ?><?php echo ! empty( $plugin['required'] ) ? ' <small class="required-plugin">'.__('Required', 'himara').'</small>' : '<small class="suggested-plugin">'. __('Suggested', 'himara'). '</small>'; ?></h3>
|
||||
<?php if ( in_array( $plugin['slug'], [ 'wpforms-lite', 'all-in-one-seo-pack', 'google-analytics-for-wordpress' ], true ) ) : ?>
|
||||
<span>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/star.svg' ); ?>" alt="<?php esc_attr_e( 'Star icon', 'himara' ); ?>">
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if ( ! empty( $plugin['description'] ) ) : ?>
|
||||
<p>
|
||||
<?php echo wp_kses_post( $plugin['description'] ); ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<div class="plugin-item-error js-ocdi-plugin-item-error"></div>
|
||||
<div class="plugin-item-info js-ocdi-plugin-item-info"></div>
|
||||
</div>
|
||||
<span class="plugin-item-checkbox">
|
||||
<input type="checkbox" id="ocdi-<?php echo esc_attr( $plugin['slug'] ); ?>-plugin" name="<?php echo esc_attr( $plugin['slug'] ); ?>" <?php checked( ! empty( $plugin['preselected'] ) || ! empty( $plugin['required'] ) || $is_plugin_active ); ?><?php disabled( $is_plugin_active ); ?>>
|
||||
<span class="checkbox">
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/check-solid-white.svg' ); ?>" class="ocdi-check-icon" alt="<?php esc_attr_e( 'Checkmark icon', 'himara' ); ?>">
|
||||
<?php if ( ! empty( $plugin['required'] ) ) : ?>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/lock.svg' ); ?>" class="ocdi-lock-icon" alt="<?php esc_attr_e( 'Lock icon', 'himara' ); ?>">
|
||||
<?php endif; ?>
|
||||
<img src="<?php echo esc_url( OCDI_URL . 'assets/images/loader.svg' ); ?>" class="ocdi-loading ocdi-loading-md" alt="<?php esc_attr_e( 'Loading...', 'himara' ); ?>">
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div class="">
|
||||
|
||||
<!-- test -->
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="ocdi-install-plugins-content-footer">
|
||||
<a href="<?php echo esc_url( $this->get_plugin_settings_url() ); ?>" class="button"><img src="<?php echo esc_url( OCDI_URL . 'assets/images/icons/long-arrow-alt-left-blue.svg' ); ?>" alt="<?php esc_attr_e( 'Back icon', 'himara' ); ?>"><span><?php esc_html_e( 'Go Back' , 'himara' ); ?></span></a>
|
||||
<a href="#" class="button button-primary js-ocdi-install-plugins-before-import"><?php esc_html_e( 'Continue & Import' , 'himara' ); ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="js-ocdi-auto-start-manual-import"></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="ocdi-importing js-ocdi-importing">
|
||||
|
||||
<div class="eth-theme-panel-header ">
|
||||
<h3 class="title"><?php esc_html_e( 'Import Demo Content' , 'himara' ); ?></h3>
|
||||
</div>
|
||||
|
||||
<div class="eth-theme-panel-inner">
|
||||
|
||||
<div class="ocdi-importing-header">
|
||||
|
||||
<div class="eth-notice eth-notice-info">
|
||||
<i class="dashicons dashicons-info-outline"></i>
|
||||
<p><?php esc_html_e( 'Please sit tight while we import your content. Do not refresh the page or hit the back button.' , 'himara' ); ?></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ocdi-importing-content">
|
||||
<img class="ocdi-importing-content-importing" src="<?php echo esc_url( OCDI_URL . 'assets/images/importing.svg' ); ?>" alt="<?php esc_attr_e( 'Importing animation', 'himara' ); ?>">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ocdi-imported js-ocdi-imported">
|
||||
|
||||
<div class="eth-theme-panel-header ">
|
||||
<h3 class="title js-ocdi-ajax-response-title"><?php esc_html_e( 'Import Demo Content' , 'himara' ); ?></h3>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="eth-theme-panel-inner">
|
||||
|
||||
<div class="ocdi-imported-header">
|
||||
|
||||
|
||||
<div class="js-ocdi-ajax-response-subtitle">
|
||||
<p>
|
||||
<?php esc_html_e( 'Congrats, your demo was imported successfully. You can now begin editing your site.' , 'himara' ); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ocdi-imported-content">
|
||||
<div class="ocdi__response js-ocdi-ajax-response"></div>
|
||||
</div>
|
||||
<div class="ocdi-imported-footer">
|
||||
<a href="<?php echo esc_url( admin_url( 'admin.php?page=himara_options' ) ); ?>" class="button button-primary button-hero"><?php esc_html_e( 'Theme Settings' , 'himara' ); ?></a>
|
||||
<a href="<?php echo esc_url( get_home_url() ); ?>" target="_blank" class="button button-primary button-hero"><?php esc_html_e( 'Visit Site' , 'himara' ); ?></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="ocdi__content-container-content--side">
|
||||
<?php
|
||||
$selected = isset( $_GET['import'] ) ? (int) $_GET['import'] : null;
|
||||
echo wp_kses_post( ViewHelpers::small_theme_card( $selected ) );
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
106
wp-content/themes/himara/core/admin/install-plugins.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
/* --------------------------------------------------------------------------
|
||||
* Register the required plugins for this theme.
|
||||
* @since 1.0.0
|
||||
---------------------------------------------------------------------------*/
|
||||
|
||||
// Include the TGM_Plugin_Activation class.
|
||||
|
||||
require_once dirname(__FILE__) . '/inc/class-tgm-plugin-activation.php';
|
||||
|
||||
add_action('tgmpa_register', 'himara_required_plugins');
|
||||
|
||||
function himara_required_plugins()
|
||||
{
|
||||
/**
|
||||
* Array of plugin arrays. Required keys are name and slug.
|
||||
* If the source is NOT from the .org repo, then source is also required.
|
||||
*/
|
||||
$plugins = array(
|
||||
array(
|
||||
'name' => esc_html__('Eagle Core', 'himara') ,
|
||||
'slug' => 'eagle-core',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/eagle-core.zip',
|
||||
'required' => true,
|
||||
'version' => '1.0.2',
|
||||
) ,
|
||||
|
||||
array(
|
||||
'name' => esc_html__('Eagle Booking', 'himara') ,
|
||||
'slug' => 'eagle-booking',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/eagle-booking.zip',
|
||||
'required' => true,
|
||||
'version' => '1.3.4',
|
||||
) ,
|
||||
array(
|
||||
'name' => esc_html__('Revolution Slider', 'himara') ,
|
||||
'slug' => 'revslider',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/revslider.zip',
|
||||
'required' => true,
|
||||
'version' => '6.6.20',
|
||||
) ,
|
||||
|
||||
array(
|
||||
'name' => esc_html__('Envato Market', 'himara') ,
|
||||
'slug' => 'envato-market',
|
||||
'source' => 'https://api.eagle-themes.com/download/himara/h13anjo16/envato-market.zip',
|
||||
'required' => true,
|
||||
'version' => '2.0.11',
|
||||
) ,
|
||||
|
||||
array(
|
||||
'name' => esc_html__('Elementor', 'himara') ,
|
||||
'slug' => 'elementor',
|
||||
'required' => true,
|
||||
) ,
|
||||
|
||||
array(
|
||||
'name' => esc_html__('Contact Form 7', 'himara') ,
|
||||
'slug' => 'contact-form-7',
|
||||
'required' => true,
|
||||
) ,
|
||||
);
|
||||
|
||||
// Change this to your theme text domain, used for internationalising strings
|
||||
|
||||
$theme_text_domain = 'himara';
|
||||
/**
|
||||
* Array of configuration settings. Amend each line as needed.
|
||||
* If you want the default strings to be available under your own theme domain,
|
||||
* leave the strings uncommented.
|
||||
* Some of the strings are added into a sprintf, so see the comments at the
|
||||
* end of each line for what each argument will be.
|
||||
*/
|
||||
$config = array(
|
||||
'domain' => $theme_text_domain, // Text domain - likely want to be the same as your theme.
|
||||
'default_path' => '', // Default absolute path to pre-packaged plugins
|
||||
'menu' => 'tgmpa-install-plugins', // Menu slug
|
||||
'has_notices' => true, // Show admin notices or not
|
||||
'is_automatic' => false, // Automatically activate plugins after installation or not
|
||||
'message' => '', // Message to output right before the plugins table
|
||||
'strings' => array(
|
||||
'page_title' => esc_html__('Install Required Plugins', 'himara') ,
|
||||
'menu_title' => esc_html__('Install Plugins', 'himara') ,
|
||||
'installing' => esc_html__('Installing Plugin: %s', 'himara') , // %1$s = plugin name
|
||||
'oops' => esc_html__('Something went wrong with the plugin API.', 'himara') ,
|
||||
'notice_can_install_required' => _n_noop('This theme requires the following plugin: %1$s.', 'This theme requires the following plugins: %1$s.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_can_install_recommended' => _n_noop('This theme recommends the following plugin: %1$s.', 'This theme recommends the following plugins: %1$s.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_cannot_install' => _n_noop('Sorry, but you do not have the correct permissions to install the %s plugin. Contact the administrator of this site for help on getting the plugin installed.', 'Sorry, but you do not have the correct permissions to install the %s plugins. Contact the administrator of this site for help on getting the plugins installed.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_can_activate_required' => _n_noop('The following required plugin is currently inactive: %1$s.', 'The following required plugins are currently inactive: %1$s.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_can_activate_recommended' => _n_noop('The following recommended plugin is currently inactive: %1$s.', 'The following recommended plugins are currently inactive: %1$s.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_cannot_activate' => _n_noop('Sorry, but you do not have the correct permissions to activate the %s plugin. Contact the administrator of this site for help on getting the plugin activated.', 'Sorry, but you do not have the correct permissions to activate the %s plugins. Contact the administrator of this site for help on getting the plugins activated.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_ask_to_update' => _n_noop('The following plugin needs to be updated to its latest version to ensure maximum compatibility with this theme: %1$s.', 'The following plugins need to be updated to their latest version to ensure maximum compatibility with this theme: %1$s.', 'himara') , // %1$s = plugin name(s)
|
||||
'notice_cannot_update' => _n_noop('Sorry, but you do not have the correct permissions to update the %s plugin. Contact the administrator of this site for help on getting the plugin updated.', 'Sorry, but you do not have the correct permissions to update the %s plugins. Contact the administrator of this site for help on getting the plugins updated.', 'himara') , // %1$s = plugin name(s)
|
||||
'install_link' => _n_noop('Begin installing plugin', 'Begin installing plugins', 'himara') ,
|
||||
'activate_link' => _n_noop('Activate installed plugin', 'Activate installed plugins', 'himara') ,
|
||||
'return' => __('Return to Required Plugins Installer', 'himara') ,
|
||||
'plugin_activated' => __('Plugin activated successfully.', 'himara') ,
|
||||
'complete' => __('All plugins installed and activated successfully. %s', 'himara') , // %1$s = dashboard link
|
||||
'nag_type' => 'updated'
|
||||
|
||||
// Determines admin notice type - can only be 'updated' or 'error'
|
||||
|
||||
)
|
||||
);
|
||||
tgmpa($plugins, $config);
|
||||
}
|
||||
129
wp-content/themes/himara/core/admin/metaboxes.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
/*---------------------------------------------------------------------------------
|
||||
@ Metaboxes
|
||||
@ Since 1.0.0
|
||||
-----------------------------------------------------------------------------------*/
|
||||
|
||||
add_action('cmb2_admin_init', 'himara_general_meta');
|
||||
|
||||
function himara_general_meta() {
|
||||
|
||||
$prefix = 'himara_mtb_';
|
||||
|
||||
$cmb = new_cmb2_box(array(
|
||||
'id' => $prefix.'meta',
|
||||
'title' => esc_html__('Layout', 'himara'),
|
||||
//'context' => 'side',
|
||||
'object_types' => array('page', 'eagle_places', 'eagle_rooms', 'post'),
|
||||
));
|
||||
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Top Bar', 'himara'),
|
||||
'id' => $prefix.'topbar',
|
||||
'type' => 'switch',
|
||||
'default' => himara_get_option('topbar'),
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Transparent Top Bar', 'himara'),
|
||||
'id' => $prefix.'topbar_transparent',
|
||||
'type' => 'switch',
|
||||
'default' => himara_get_option('topbar_transparent'),
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Sticky Header', 'himara'),
|
||||
'id' => $prefix.'header_sticky',
|
||||
'type' => 'switch',
|
||||
'default' => himara_get_option('header_sticky'),
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Transparent Header', 'himara'),
|
||||
'id' => $prefix.'header_transparent',
|
||||
'type' => 'switch',
|
||||
'default' => himara_get_option('header_transparent'),
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Semi Transparent Header', 'himara'),
|
||||
'id' => $prefix.'header_semi_transparent',
|
||||
'type' => 'switch',
|
||||
'default' => false,
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Page Title', 'himara'),
|
||||
'id' => $prefix.'title',
|
||||
'type' => 'switch',
|
||||
'default' => true,
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Padding Left / Right', 'himara'),
|
||||
'id' => $prefix.'container',
|
||||
'type' => 'switch',
|
||||
'default' => true,
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
$cmb->add_field( array(
|
||||
'name' => __('Padding Top / Bottom', 'himara'),
|
||||
'id' => $prefix.'padding',
|
||||
'type' => 'switch',
|
||||
'default' => true,
|
||||
'label' => array(
|
||||
'true'=> 'Yes',
|
||||
'false'=> 'No'
|
||||
),
|
||||
));
|
||||
|
||||
$cmb->add_field( array(
|
||||
'name' => __( 'Sidebar', 'himara' ),
|
||||
'id' => $prefix.'sidebar',
|
||||
'type' => 'radio_image',
|
||||
'default' => himara_get_option('himara_page_sidebar'),
|
||||
'options' => array(
|
||||
'left' => __('Left', 'himara'),
|
||||
'none' => __('None', 'himara'),
|
||||
'right' => __('Right', 'himara'),
|
||||
'inherit' => __('Inherit', 'himara'),
|
||||
),
|
||||
'images_path' => get_template_directory_uri(),
|
||||
'images' => array(
|
||||
'left' => 'assets/images/admin/sidebar-left.png',
|
||||
'none' => 'assets/images/admin/sidebar-none.png',
|
||||
'right' => 'assets/images/admin/sidebar-right.png',
|
||||
'inherit' => 'assets/images/admin/sidebar-inherit.png',
|
||||
),
|
||||
) );
|
||||
|
||||
}
|
||||