111 lines
3.9 KiB
PHP
111 lines
3.9 KiB
PHP
<?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;
|
|
|
|
// WooCommerce product attributes registration.
|
|
if ( class_exists( 'WooCommerce' ) ) {
|
|
add_filter( 'wxr_importer.pre_process.term', array( $this, 'woocommerce_product_attributes_registration' ), 10, 1 );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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'];
|
|
}
|
|
|
|
/**
|
|
* Hook into the pre-process term filter of the content import and register the
|
|
* custom WooCommerce product attributes, so that the terms can then be imported normally.
|
|
*
|
|
* This should probably be removed once the WP importer 2.0 support is added in WooCommerce.
|
|
*
|
|
* Fixes: [WARNING] Failed to import pa_size L warnings in content import.
|
|
* Code from: woocommerce/includes/admin/class-wc-admin-importers.php (ver 2.6.9).
|
|
*
|
|
* Github issue: https://github.com/proteusthemes/one-click-demo-import/issues/71
|
|
*
|
|
* @param array $date The term data to import.
|
|
* @return array The unchanged term data.
|
|
*/
|
|
public function woocommerce_product_attributes_registration( $data ) {
|
|
global $wpdb;
|
|
|
|
if ( strstr( $data['taxonomy'], 'pa_' ) ) {
|
|
if ( ! taxonomy_exists( $data['taxonomy'] ) ) {
|
|
$attribute_name = wc_sanitize_taxonomy_name( str_replace( 'pa_', '', $data['taxonomy'] ) );
|
|
|
|
// Create the taxonomy
|
|
if ( ! in_array( $attribute_name, wc_get_attribute_taxonomies() ) ) {
|
|
$attribute = array(
|
|
'attribute_label' => $attribute_name,
|
|
'attribute_name' => $attribute_name,
|
|
'attribute_type' => 'select',
|
|
'attribute_orderby' => 'menu_order',
|
|
'attribute_public' => 0
|
|
);
|
|
$wpdb->insert( $wpdb->prefix . 'woocommerce_attribute_taxonomies', $attribute );
|
|
delete_transient( 'wc_attribute_taxonomies' );
|
|
}
|
|
|
|
// Register the taxonomy now so that the import works!
|
|
register_taxonomy(
|
|
$data['taxonomy'],
|
|
apply_filters( 'woocommerce_taxonomy_objects_' . $data['taxonomy'], array( 'product' ) ),
|
|
apply_filters( 'woocommerce_taxonomy_args_' . $data['taxonomy'], array(
|
|
'hierarchical' => true,
|
|
'show_ui' => false,
|
|
'query_var' => true,
|
|
'rewrite' => false,
|
|
) )
|
|
);
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
}
|