647 lines
16 KiB
PHP
647 lines
16 KiB
PHP
|
<?php
|
||
|
class OpalEstate_Command {
|
||
|
|
||
|
public $path;
|
||
|
|
||
|
/**
|
||
|
* Constructor
|
||
|
*/
|
||
|
public function __construct(){
|
||
|
|
||
|
$this->path = OPALESTATE_PLUGIN_DIR;
|
||
|
|
||
|
// $this->cfg = json_decode( file get contents( $this->path.'project.json' ) );
|
||
|
$this->cfg = json_decode( wp_remote_get( $this->path.'project.json' ) );
|
||
|
|
||
|
$this->server = $this->cfg->server;
|
||
|
$this->oldurl = $this->cfg->oldurl;
|
||
|
$this->theme = $this->cfg->theme;
|
||
|
$this->name = $this->cfg->name;
|
||
|
$this->subpath = $this->cfg->subpath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Write data in file
|
||
|
*/
|
||
|
private function output_file_content( $file_path, $output ) {
|
||
|
$fp = fopen( $file_path, 'w+' );
|
||
|
fwrite( $fp, $output );
|
||
|
fclose( $fp );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get more options
|
||
|
*/
|
||
|
public function get_more_options(){
|
||
|
$data = array(
|
||
|
'header' => 'header-1',
|
||
|
'footer' => 'footer-1',
|
||
|
'page' => 'home-1'
|
||
|
);
|
||
|
|
||
|
if( isset($this->cfg->active) && $this->cfg->active ) {
|
||
|
$data = (array) $this->cfg->active;
|
||
|
}
|
||
|
|
||
|
return array(
|
||
|
'active' => $data,
|
||
|
'oldurl' => $this->oldurl,
|
||
|
'server' => $this->server,
|
||
|
"samples" => array(
|
||
|
'post' => array(),
|
||
|
'product' => array()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Export theme options in customizer
|
||
|
*/
|
||
|
public function options(){
|
||
|
return array();
|
||
|
$thememods = get_option( 'theme_mods_' . $this->theme );
|
||
|
$file = $this->path.'/sample/thememods.json';
|
||
|
$ids = array();
|
||
|
foreach( $thememods as $key => $mod ){
|
||
|
|
||
|
|
||
|
if( is_string($mod) ){
|
||
|
// $thememods[$key] = $this->_replace_uri( $mod, $this->oldurl, "SITE_URL_HERE");
|
||
|
if( preg_match( "#jpg|png|gif|svg#", $mod) && $mod ){
|
||
|
$ids[$key] = $this->find_image_id_byguid( $mod );
|
||
|
}
|
||
|
}
|
||
|
if( isset($thememods['wpopal_customize_css']) ){
|
||
|
unset( $thememods['wpopal_customize_css'] );
|
||
|
}
|
||
|
|
||
|
if( isset($thememods['osf_theme_custom_style']) ){
|
||
|
unset( $thememods['osf_theme_custom_style'] );
|
||
|
}
|
||
|
|
||
|
if( isset($thememods['sidebars_widgets']) ){
|
||
|
unset( $thememods['sidebars_widgets'] );
|
||
|
}
|
||
|
|
||
|
///
|
||
|
if( $key == 'custom_logo' && $mod ){
|
||
|
$ids[$key] = $mod;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
$attachments = array();
|
||
|
|
||
|
if( $ids ){
|
||
|
foreach( $ids as $id ) {
|
||
|
$post = get_post( $id );
|
||
|
if( $post ) {
|
||
|
$attachments[$post->ID] = array(
|
||
|
'id' => $post->ID,
|
||
|
'guid' => wp_get_attachment_url( $post->ID ),
|
||
|
'post_parent' => $post->post_parent,
|
||
|
'post_name' => $post->post_name,
|
||
|
'post_date' => $post->post_date );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$options = array(
|
||
|
'woocommerce_single_image_width' => '',
|
||
|
'woocommerce_thumbnail_image_width' => '',
|
||
|
'woocommerce_thumbnail_cropping' => '',
|
||
|
'woocommerce_thumbnail_cropping_custom_height' => '',
|
||
|
'woocommerce_thumbnail_cropping_custom_width' => '',
|
||
|
"woocommerce_shop_page_id" => '',
|
||
|
"woocommerce_cart_page_id" => '',
|
||
|
'woocommerce_checkout_page_id' => '',
|
||
|
'woocommerce_myaccount_page_id' => '',
|
||
|
'woocommerce_terms_page_id' => '',
|
||
|
'yith_wcwl_wishlist_page_id' => ''
|
||
|
|
||
|
);
|
||
|
|
||
|
foreach( $options as $key => $value ){
|
||
|
$value = get_option( $key );
|
||
|
if( empty($value) ) {
|
||
|
unset( $options[$key] );
|
||
|
continue;
|
||
|
}
|
||
|
$options[$key] = $value;
|
||
|
}
|
||
|
|
||
|
$options['page_for_posts'] = 'Blog';
|
||
|
if( function_exists( 'wp_get_custom_css_post' ) ) {
|
||
|
$options['wp_css'] = wp_get_custom_css();
|
||
|
}
|
||
|
$data = array( 'thememods' => $thememods, 'attachments' => $attachments, "options" => $options );
|
||
|
|
||
|
|
||
|
|
||
|
// $this->output_file_content( $file, wp_json_encode($data ,JSON_PRETTY_PRINT ) );
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Replace URI in xml
|
||
|
*/
|
||
|
public function _replace_uri( $str, $oldurl, $server ){
|
||
|
$str = str_replace( str_replace("/","\/", $oldurl ), str_replace("/","\/", $server ), $str );
|
||
|
$str = str_replace( $oldurl, $server, $str );
|
||
|
$str = str_replace( str_replace("/","\\\\\\/", $oldurl ), str_replace("/","\\\\\\/", $server ), $str );
|
||
|
return $str;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Export config samples
|
||
|
*/
|
||
|
public function config_samples( $dev=0 ){
|
||
|
|
||
|
|
||
|
$data['samples'] = array();
|
||
|
|
||
|
|
||
|
$file = $this->path.$this->cfg->folder_source.'/samples.json';
|
||
|
|
||
|
|
||
|
$niches = $this->cfg->niches;
|
||
|
|
||
|
$single = $this->cfg->single;
|
||
|
|
||
|
$key = 0;
|
||
|
$data['samples'][] = array(
|
||
|
"name" => isset($single->name)?$single->name:"Sample",
|
||
|
"key" => "niche-".$key,
|
||
|
"url" => isset($single->url)?$single->url:"",
|
||
|
"demo" => isset($single->demo)?$single->demo:"",
|
||
|
"preview" => $this->cfg->server_source.'/screenshot.png',
|
||
|
"sample" => $this->cfg->server_source.'/data.zip'
|
||
|
);
|
||
|
|
||
|
$this->output_file_content( $file, wp_json_encode($data ) );
|
||
|
///
|
||
|
//$file = $this->path.'/wp-content/themes/'.$this->cfg->theme.'/project.json';
|
||
|
//$data = $this->cfg->themeinfo;
|
||
|
//$this->output_file_content( $file, json_encode($data , JSON_PRETTY_PRINT ) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Export all pages
|
||
|
*/
|
||
|
public function pages(){
|
||
|
|
||
|
return array();
|
||
|
$excludes = array();
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$post_type = 'page';
|
||
|
/// items
|
||
|
|
||
|
$where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s and {$wpdb->posts}.post_content LIKE '%opalestate_%'", $post_type );
|
||
|
|
||
|
|
||
|
// grab a snapshot of post IDs, just in case it changes during the export
|
||
|
$post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE $where" );
|
||
|
|
||
|
$data = $this->export_json_ids( $post_ids, $excludes, $isattachement );
|
||
|
|
||
|
echo '<pre>' . print_r( $data ,1 );die;
|
||
|
|
||
|
//$file = $this->path.'sample/pages.json';
|
||
|
// $this->output_file_content( $file, wp_json_encode($data ) );
|
||
|
return $data;
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Export all pages
|
||
|
*/
|
||
|
public function data_posttypes(){
|
||
|
|
||
|
$excludes = array();
|
||
|
|
||
|
$data = $this->export_posttype( array(
|
||
|
'opalestate_agent',
|
||
|
'opalestate_agency',
|
||
|
'opalestate_agent_ft',
|
||
|
'opalestate_agency_ft',
|
||
|
'opalestate_rating_ft',
|
||
|
'opalestate_property'
|
||
|
), $excludes );
|
||
|
|
||
|
// $file = ABSPATH.'src/json/elementor.json';
|
||
|
// $this->output_file_content( $file, wp_json_encode($data ) );
|
||
|
|
||
|
return $data;
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get all attachments by post ids
|
||
|
*/
|
||
|
protected function get_attachment( $post_ids ) {
|
||
|
$attachments = array();
|
||
|
foreach ( $post_ids as $post_id) {
|
||
|
|
||
|
$value = get_post_meta($post_id, '_thumbnail_id', true);
|
||
|
if ( $value ) {
|
||
|
$attachments = array_merge( $attachments, array($value) );
|
||
|
}
|
||
|
|
||
|
|
||
|
$attachArgs = array(
|
||
|
'post_parent' => $post_id,
|
||
|
'post_type' => 'attachment',
|
||
|
'numberposts' => -1,
|
||
|
'post__not_in' => $attachments, //To skip duplicates
|
||
|
);
|
||
|
$attachList = get_children($attachArgs, ARRAY_A);
|
||
|
$attachments = array_merge($attachments, array_keys($attachList));
|
||
|
}
|
||
|
|
||
|
$ids = $this->get_images_posts( $post_ids );
|
||
|
if( $ids ){
|
||
|
$attachments = array_merge( $ids, $attachments );
|
||
|
}
|
||
|
|
||
|
return $attachments;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Export data posts by post type with attachments
|
||
|
*/
|
||
|
protected function export_posttype( $post_type, $excludes=array(), $isattachement=true ) {
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
/// items
|
||
|
|
||
|
if( is_array($post_type) ){
|
||
|
$tmp = "'".implode( "','", $post_type )."'";
|
||
|
$where = "{$wpdb->posts}.post_type IN( ".$tmp ." )";
|
||
|
} else {
|
||
|
$where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s", $post_type );
|
||
|
}
|
||
|
|
||
|
// grab a snapshot of post IDs, just in case it changes during the export
|
||
|
$post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE $where" );
|
||
|
|
||
|
return $this->export_json_ids( $post_ids, $excludes, $isattachement );
|
||
|
|
||
|
}
|
||
|
|
||
|
public function aa(){
|
||
|
global $wpdb;
|
||
|
$postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", 240) );
|
||
|
|
||
|
$exls = array(
|
||
|
'_edit_last',
|
||
|
'_edit_lock',
|
||
|
'_elementor_version',
|
||
|
'_menu_item_type',
|
||
|
'_menu_item_menu_item_parent',
|
||
|
'_menu_item_object_id',
|
||
|
'_menu_item_object',
|
||
|
'_menu_item_target',
|
||
|
'_menu_item_classes',
|
||
|
'_menu_item_xfn',
|
||
|
'_menu_item_url',
|
||
|
'_elementor_css'
|
||
|
);
|
||
|
|
||
|
$tmp = array();
|
||
|
foreach( $postmeta as $key => $meta ){
|
||
|
unset( $postmeta[$key]->post_id );
|
||
|
unset( $postmeta[$key]->meta_id );
|
||
|
foreach( $exls as $exl ){
|
||
|
if( $meta->meta_key == $exl ){
|
||
|
unset( $postmeta[$key] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
foreach( $postmeta as $key => $meta ){
|
||
|
$tmp[$meta->meta_key] = $meta->meta_value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* export json data by ids
|
||
|
*/
|
||
|
protected function export_json_ids( $post_ids , $excludes, $isattachement ){
|
||
|
global $wpdb;
|
||
|
|
||
|
$output = array();
|
||
|
|
||
|
$export = array();
|
||
|
|
||
|
if( $isattachement ){
|
||
|
$ids = $this->get_attachment( $post_ids );
|
||
|
|
||
|
|
||
|
if( $ids ){
|
||
|
|
||
|
$where = 'WHERE ID IN (' . join( ',', $ids ) . ')';
|
||
|
$posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" );
|
||
|
|
||
|
$export['attachments'] = array();
|
||
|
foreach( $posts as $post ) {
|
||
|
$export['attachments'][$post->ID] = array(
|
||
|
'id' => $post->ID,
|
||
|
'guid'=> wp_get_attachment_url( $post->ID ),
|
||
|
'post_parent' => $post->post_parent,
|
||
|
'post_name' => $post->post_name,
|
||
|
'post_date' => $post->post_date );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) {
|
||
|
|
||
|
$where = 'ID IN (' . join( ',', $next_posts ) . ')';
|
||
|
$posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} WHERE post_status='publish' and $where" );
|
||
|
|
||
|
// Begin Loop.
|
||
|
foreach ( $posts as $post ) {
|
||
|
|
||
|
if( in_array($post->ID , $excludes) ){
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
setup_postdata( $post );
|
||
|
$data = array();
|
||
|
if ( get_post_meta( $post->ID, '_elementor_edit_mode', true ) === 'builder' ) {
|
||
|
$post->post_content = "";
|
||
|
}
|
||
|
|
||
|
$post->guid = $this->_replace_uri( $post->guid, $this->oldurl, "SITE_URL_HERE" );
|
||
|
|
||
|
$excludes = array(
|
||
|
'guid',
|
||
|
'to_ping',
|
||
|
'pinged',
|
||
|
'post_content_filtered',
|
||
|
'post_mime_type',
|
||
|
'comment_count',
|
||
|
'filter',
|
||
|
'post_modified',
|
||
|
'post_modified_gmt'
|
||
|
);
|
||
|
|
||
|
foreach( $excludes as $exl ){
|
||
|
if( isset($post->$exl) ){
|
||
|
unset( $post->$exl );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$data['post'] = $post;
|
||
|
// meta data
|
||
|
$postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) );
|
||
|
|
||
|
$exls = array(
|
||
|
'_edit_last',
|
||
|
'_edit_lock',
|
||
|
'_elementor_version',
|
||
|
'_menu_item_type',
|
||
|
'_menu_item_menu_item_parent',
|
||
|
'_menu_item_object_id',
|
||
|
'_menu_item_object',
|
||
|
'_menu_item_target',
|
||
|
'_menu_item_classes',
|
||
|
'_menu_item_xfn',
|
||
|
'_menu_item_url',
|
||
|
'_elementor_css'
|
||
|
);
|
||
|
|
||
|
$tmp = array();
|
||
|
foreach( $postmeta as $key => $meta ){
|
||
|
unset( $postmeta[$key]->post_id );
|
||
|
unset( $postmeta[$key]->meta_id );
|
||
|
foreach( $exls as $exl ){
|
||
|
if( $meta->meta_key == $exl ){
|
||
|
unset( $postmeta[$key] );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
foreach( $postmeta as $key => $meta ){
|
||
|
$tmp[$meta->meta_key] = $meta->meta_value;
|
||
|
}
|
||
|
|
||
|
$data['postmeta'] = $tmp;
|
||
|
|
||
|
|
||
|
|
||
|
if ( $post->post_type == 'attachment' ){
|
||
|
$data['attachment_url'] = wp_get_attachment_url( $post->ID );
|
||
|
}
|
||
|
|
||
|
|
||
|
$data['thumbnail_id'] = get_post_meta( $post->ID, '_thumbnail_id', true );
|
||
|
|
||
|
// taxonomy
|
||
|
$taxonomies = get_object_taxonomies( $post->post_type );
|
||
|
|
||
|
if ( !empty( $taxonomies ) ) {
|
||
|
|
||
|
$data['taxonomy'] = array();
|
||
|
$terms = wp_get_object_terms( $post->ID, $taxonomies );
|
||
|
|
||
|
foreach ( (array) $terms as $term ) {
|
||
|
|
||
|
if( $term->taxonomy == 'nav_menu' ){
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$t = array(
|
||
|
$term->taxonomy => array (
|
||
|
$term->slug => $term->name
|
||
|
)
|
||
|
);
|
||
|
$data['taxonomy'][] = $t;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$output [] = $data;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$export['posts'] = $output;
|
||
|
return $export;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* find attachment post id by guid
|
||
|
*/
|
||
|
private function find_image_id_byguid( $image_url ) {
|
||
|
global $wpdb;
|
||
|
$attachment = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE guid LIKE '%".$image_url."%';" );
|
||
|
|
||
|
return isset($attachment[0])?$attachment[0]:0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* find all images:svg,git,png,jpg in data setting of elementor
|
||
|
*/
|
||
|
private function get_images_posts( $ids ){
|
||
|
$mids = array();
|
||
|
$images = array();
|
||
|
foreach( $ids as $id ){
|
||
|
if ( get_post_meta( $id, '_elementor_edit_mode', true ) === 'builder' ) {
|
||
|
$data = json_decode( get_post_meta( $id, '_elementor_data', true ), ARRAY_A );
|
||
|
if( $data ){
|
||
|
$string = "start".print_r( $data , true )."end";
|
||
|
$pattern = '~(http.*\.)(jpe?g|png|svg|gif|[tg]iff?|svg)~i';
|
||
|
$m = preg_match_all($pattern,$string,$matches);
|
||
|
if( $matches[0] ){
|
||
|
foreach( $matches[0] as $img ){
|
||
|
$pattern = '#(/\d+/\d+/(.*))$#';
|
||
|
$a = preg_match( $pattern , $img, $m );
|
||
|
if( isset($m[1]) ){ ///echo '<Pre>' . print_r( $data, 1 );die;
|
||
|
$_id = $this->find_image_id_byguid( $m[1] );
|
||
|
if( $_id ) {
|
||
|
$mids[$_id] = $_id;
|
||
|
} else {
|
||
|
$images[] = $img;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
echo '<Pre> Missing Images:' . print_r( $images , 1 ); //die;
|
||
|
return $mids;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function sample(){
|
||
|
$data = array();
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function download_images( $attachments, $jcontent ){
|
||
|
|
||
|
$folder = $this->path .'/'.$this->cfg->folder_source.'/images';
|
||
|
|
||
|
if( is_dir($folder) ){
|
||
|
$file = new Filesystem();
|
||
|
$file->deleteDirectory( $folder );
|
||
|
}
|
||
|
|
||
|
if( !is_dir($folder) ){
|
||
|
mkdir( $folder );
|
||
|
}
|
||
|
|
||
|
$url = $this->cfg->server_source.'/images/';
|
||
|
|
||
|
$replaces = array();
|
||
|
foreach( $attachments as $attachment ){
|
||
|
$guid = str_replace( $this->server , $this->oldurl, $attachment['guid'] ) ;
|
||
|
// $image = file get contents( $guid );
|
||
|
$image = wp_remote_get( $guid );
|
||
|
$name = basename( $attachment['guid'] );
|
||
|
$path = $folder.'/'.$name;
|
||
|
file_put_contents( $path, $image );
|
||
|
|
||
|
$guid = $attachment['guid'];
|
||
|
$newurl = $url.$name;
|
||
|
$replaces[$guid] = $newurl;
|
||
|
}
|
||
|
|
||
|
foreach( $replaces as $key => $replace ){
|
||
|
$jcontent = $this->_replace_uri( $jcontent, $key, $replace);
|
||
|
}
|
||
|
|
||
|
return $jcontent;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* export all sample data
|
||
|
*/
|
||
|
public function source(){
|
||
|
|
||
|
// $content = file get contents( $this->path.'/sample/data.json' );
|
||
|
$content = wp_remote_get( $this->path.'/sample/data.json' );
|
||
|
|
||
|
$data = json_decode( $content, true );
|
||
|
|
||
|
$file = new Filesystem();
|
||
|
|
||
|
$content = $this->download_images( $data['attachments'], $content );
|
||
|
|
||
|
$file = $this->path.'/'.$this->cfg->folder_source.'/data.json';
|
||
|
$this->output_file_content( $file, $content );
|
||
|
|
||
|
$zip = new ZipArchive;
|
||
|
if ($zip->open( $this->path.'/'.$this->cfg->folder_source .'/data.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
|
||
|
$zip->addFile( $file, 'data.json');
|
||
|
$zip->close();
|
||
|
echo 'ok';
|
||
|
} else {
|
||
|
echo 'failed';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* export all sample data
|
||
|
*/
|
||
|
public function data(){
|
||
|
|
||
|
$this->fix_images_parents();
|
||
|
$data = $this->pages();
|
||
|
|
||
|
$data = array_merge_recursive(
|
||
|
$data,
|
||
|
$this->data_posttypes(),
|
||
|
$this->options(),
|
||
|
$this->get_more_options(),
|
||
|
$this->sample()
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
$data = apply_filters( 'opaltools_single_wp_cli_exporter', $data , $this->cfg );
|
||
|
|
||
|
$file = $this->path.'sample/data.json';
|
||
|
|
||
|
|
||
|
///
|
||
|
$attachments = array();
|
||
|
foreach ( $data['attachments'] as $key => $value ) {
|
||
|
$attachments[$value['id']] = $value;
|
||
|
}
|
||
|
|
||
|
$data['attachments'] = $attachments;
|
||
|
|
||
|
$content = $this->_replace_uri( json_encode($data , JSON_PRETTY_PRINT ), $this->oldurl, $this->server );
|
||
|
$content = str_replace( $this->cfg->theme, $this->cfg->domain, $content );
|
||
|
|
||
|
$this->output_file_content( $file, $content );
|
||
|
|
||
|
$this->config_samples();
|
||
|
$this->source();
|
||
|
}
|
||
|
|
||
|
public function fix_images_parents(){
|
||
|
global $wpdb;
|
||
|
|
||
|
$fixs = array(
|
||
|
'product-',
|
||
|
'bg-slider',
|
||
|
'slide-',
|
||
|
'bg-slide'
|
||
|
);
|
||
|
|
||
|
foreach( $fixs as $fix ) {
|
||
|
$wpdb->query( "UPDATE wp_posts SET post_parent=0 WHERE post_title LIKE '".$fix."%'" );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
WP_CLI::add_command( 'opalestate', new OpalEstate_Command );
|
||
|
?>
|