post_type && preg_match( '/^\s*(?:)?\s*\[paygrab_[a-z_]+\]\s*(?:)?\s*$/', (string) $paygrab_page->post_content ) ) { wp_delete_post( $paygrab_page->ID, true ); } } // Products (their meta goes with them). $paygrab_products = get_posts( array( 'post_type' => 'paygrab_product', 'post_status' => 'any', 'posts_per_page' => -1, 'fields' => 'ids', ) ); foreach ( $paygrab_products as $paygrab_id ) { wp_delete_post( (int) $paygrab_id, true ); } // The uploaded sales files: only the folder PAYGRAB made under the uploads folder. $paygrab_uploads = wp_get_upload_dir(); $paygrab_dir = trailingslashit( $paygrab_uploads['basedir'] ) . 'paygrab-private'; if ( is_dir( $paygrab_dir ) && ! is_link( $paygrab_dir ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; if ( WP_Filesystem() ) { global $wp_filesystem; $wp_filesystem->delete( $paygrab_dir, true ); } } // The order tables. foreach ( array( 'paygrab_order_events', 'paygrab_downloads', 'paygrab_order_items', 'paygrab_orders' ) as $paygrab_table ) { $wpdb->query( 'DROP TABLE IF EXISTS `' . esc_sql( $wpdb->prefix . $paygrab_table ) . '`' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- fixed names of this plugin's own tables. } // Options, temporary data and the marks kept on members (the users themselves stay). foreach ( array( 'paygrab_settings', 'paygrab_db_version', 'paygrab_mypage_moved', 'paygrab_mypage_moved_by', 'paygrab_test_mail_sent', 'paygrab_private_sub', 'paygrab_protect_check', 'paygrab_ready_seen' ) as $paygrab_option ) { delete_option( $paygrab_option ); } $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( '_transient_paygrab_' ) . '%', $wpdb->esc_like( '_transient_timeout_paygrab_' ) . '%' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery foreach ( array( 'paygrab_registered', 'paygrab_source', 'paygrab_new_email' ) as $paygrab_meta ) { delete_metadata( 'user', 0, $paygrab_meta, '', true ); } wp_clear_scheduled_hook( 'paygrab_hourly' );