prefix . 'acscw_access'; // テーブル名は $wpdb->prefix から自前で組み立てた識別子で、外部入力を含まない。 $sql = "DROP TABLE IF EXISTS `{$table}`"; // phpcs:disable PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- Table name is a fixed value from ACSCW_Install, not user input; every value is bound through $wpdb->prepare(). Direct query is required and results are intentionally uncached. $wpdb->query( $sql ); // phpcs:enable PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared // 2) 投稿メタ(_acscw_ で始まるものすべて)。 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s", $wpdb->esc_like( '_acscw_' ) . '%' ) ); // 3) オプション(acscw_ で始まるものすべて。transient を含む)。 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $option_names = $wpdb->get_col( $wpdb->prepare( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( 'acscw_' ) . '%', $wpdb->esc_like( '_transient_acscw_' ) . '%', $wpdb->esc_like( '_transient_timeout_acscw_' ) . '%' ) ); if ( ! empty( $option_names ) ) { foreach ( $option_names as $option_name ) { delete_option( $option_name ); } } // 4) ユーザーメタ(画面ごとの表示件数など。フェーズ5で使う想定)。 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE %s", $wpdb->esc_like( 'acscw_' ) . '%' ) ); // オブジェクトキャッシュに残った値を捨てる。 wp_cache_flush(); } if ( is_multisite() ) { $acscw_site_ids = get_sites( array( 'fields' => 'ids', 'number' => 0, ) ); foreach ( $acscw_site_ids as $acscw_site_id ) { switch_to_blog( (int) $acscw_site_id ); acscw_uninstall_site(); restore_current_blog(); } unset( $acscw_site_ids, $acscw_site_id ); } else { acscw_uninstall_site(); }