Automattic\WooCommerce\Internal\DataStores\Orders

OrdersTableSearchQuery::get_where_for_customers()privateWC 1.0

Helper function to generate the WHERE clause for customers search. Uses FTS when available.

Метод класса: OrdersTableSearchQuery{}

Хуков нет.

Возвращает

Строку|null. WHERE clause for customers search.

Использование

// private - только в коде основоного (родительского) класса
$result = $this->get_where_for_customers();

Код OrdersTableSearchQuery::get_where_for_customers() WC 9.7.1

private function get_where_for_customers() {
	global $wpdb;
	$order_table   = $this->query->get_table_name( 'orders' );
	$address_table = $this->query->get_table_name( 'addresses' );

	$db_util = wc_get_container()->get( DatabaseUtil::class );

	$fts_enabled = get_option( CustomOrdersTableController::HPOS_FTS_INDEX_OPTION ) === 'yes' && get_option( CustomOrdersTableController::HPOS_FTS_ADDRESS_INDEX_CREATED_OPTION ) === 'yes';

	if ( $fts_enabled ) {
		$matchers = "$address_table.first_name, $address_table.last_name, $address_table.company, $address_table.address_1, $address_table.address_2, $address_table.city, $address_table.state, $address_table.postcode, $address_table.country, $address_table.email";

		// Support for phone was added in 9.4.
		if ( version_compare( get_option( 'woocommerce_db_version' ), '9.4.0', '>=' ) ) {
			$matchers .= ", $address_table.phone";
		}

		// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- $order_table and $address_table are hardcoded.
		return $wpdb->prepare(
			"
$order_table.id IN (
SELECT order_id FROM $address_table WHERE
MATCH( $matchers ) AGAINST ( %s IN BOOLEAN MODE )
)
",
			$wpdb->esc_like( $db_util->sanitise_boolean_fts_search_term( $this->search_term ) )
		);
		// phpcs:enable
	}

	$meta_sub_query = $this->generate_where_for_meta_table();
	return "`$order_table`.id IN ( $meta_sub_query ) ";
}