/**
* Avada Studio
*
* @package Avada-Builder
* @since 3.5
*/
// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
exit( 'Direct script access denied.' );
}
/**
* AWB Studio class.
*
* @since 3.5
*/
class AWB_Studio_Remove {
/**
* The one, true instance of this object.
*
* @static
* @access private
* @since 3.0
* @var object
*/
private static $instance;
/**
* Class constructor.
*
* @since 3.0
* @access private
*/
private function __construct() {
if ( ! class_exists( 'AWB_Studio' ) || ! AWB_Studio::is_studio_enabled() ) {
return;
}
// Import Studio Media from Builder (both live and backend).
add_action( 'wp_ajax_awb_studio_remove_content', [ $this, 'ajax_remove_all_content' ] );
}
/**
* Creates or returns an instance of this class.
*
* @static
* @access public
* @since 3.5
*/
public static function get_instance() {
// If an instance hasn't been created and set to $instance create an instance and set it to $instance.
if ( null === self::$instance ) {
self::$instance = new AWB_Studio_Remove();
}
return self::$instance;
}
/**
* AJAX callback for removing all studio content.
*
* @since 3.5
* @access public
* @return void
*/
public function ajax_remove_all_content() {
check_ajax_referer( 'awb_remove_studio_content', 'nonce' );
$response = [];
$this->remove_all_content();
wp_send_json( $response, 200 );
}
/**
* Deletes all imported studio content.
*
* @since 3.5
* @access protected
* @return void
*/
protected function remove_all_content() {
if ( ! current_user_can( 'delete_posts' ) ) {
return;
}
// Delete all content from wp_posts table, except attachments.
$args = [
'post_type' => [ 'fusion_element', 'fusion_template', 'fusion_tb_section', 'fusion_icons', 'fusion_form', 'nav_menu_item' ],
'fields' => 'ids',
'posts_per_page' => -1,
'meta_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
[
'key' => '_avada_studio_post',
'compare' => 'EXISTS',
],
],
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
$posts_number = count( $query->posts );
for ( $i = 0; $i < $posts_number; $i++ ) {
// Remove menu term as well.
if ( 'nav_menu_item' === get_post_type( $query->posts[ $i ] ) ) {
$parent_menu = wp_get_object_terms( $query->posts[ $i ], 'nav_menu' );
if ( is_array( $parent_menu ) && ! empty( $parent_menu ) && isset( $parent_menu[0]->term_id ) ) {
wp_delete_term( $parent_menu[0]->term_id, 'nav_menu' );
}
}
wp_delete_post( $query->posts[ $i ], true );
}
}
// Delete attachments.
$args = [
'post_type' => [ 'attachment' ],
'post_status' => 'inherit',
'fields' => 'ids',
'posts_per_page' => -1,
'meta_query' => [ // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
[
'key' => '_avada_studio_media',
'compare' => 'EXISTS',
],
],
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
$posts_number = count( $query->posts );
for ( $i = 0; $i < $posts_number; $i++ ) {
wp_delete_attachment( $query->posts[ $i ], true );
}
}
}
}
/**
* Instantiates the AWB_Studio_Remove class.
* Make sure the class is properly set-up.
*
* @since object 3.5
* @return object AWB_Studio_Remove
*/
function AWB_Studio_Remove() { // phpcs:ignore WordPress.NamingConventions
return AWB_Studio_Remove::get_instance();
}
AWB_Studio_Remove();