Automattic\WooCommerce\Internal\DataStores\Orders
OrdersTableFieldQuery::generate_where_for_clause()
Generates an SQL WHERE clause for a given field_query atomic clause.
Метод класса: OrdersTableFieldQuery{}
Хуков нет.
Возвращает
Строку
. An SQL WHERE clause or an empty string if $clause is invalid.
Использование
// private - только в коде основоного (родительского) класса $result = $this->generate_where_for_clause( $clause ): string;
- $clause(массив) (обязательный)
- An atomic field_query clause.
Код OrdersTableFieldQuery::generate_where_for_clause() OrdersTableFieldQuery::generate where for clause WC 8.7.0
private function generate_where_for_clause( $clause ): string { global $wpdb; $clause_value = $clause['value'] ?? ''; if ( in_array( $clause['compare'], array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ), true ) ) { if ( ! is_array( $clause_value ) ) { $clause_value = preg_split( '/[,\s]+/', $clause_value ); } } elseif ( is_string( $clause_value ) ) { $clause_value = trim( $clause_value ); } $clause_compare = $clause['compare']; switch ( $clause_compare ) { case 'IN': case 'NOT IN': $where = $wpdb->prepare( '(' . substr( str_repeat( ',%s', count( (array) $clause_value ) ), 1 ) . ')', $clause_value ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared break; case 'BETWEEN': case 'NOT BETWEEN': $where = $wpdb->prepare( '%s AND %s', $clause_value[0], $clause_value[1] ?? $clause_value[0] ); break; case 'LIKE': case 'NOT LIKE': $where = $wpdb->prepare( '%s', '%' . $wpdb->esc_like( $clause_value ) . '%' ); break; case 'EXISTS': // EXISTS with a value is interpreted as '='. if ( $clause_value ) { $clause_compare = '='; $where = $wpdb->prepare( '%s', $clause_value ); } else { $clause_compare = 'IS NOT'; $where = 'NULL'; } break; case 'NOT EXISTS': // 'value' is ignored for NOT EXISTS. $clause_compare = 'IS'; $where = 'NULL'; break; default: $where = $wpdb->prepare( '%s', $clause_value ); break; } if ( ! empty( $where ) ) { if ( 'CHAR' === $clause['cast'] ) { return "`{$clause['alias']}`.`{$clause['column']}` {$clause_compare} {$where}"; } else { return "CAST(`{$clause['alias']}`.`{$clause['column']}` AS {$clause['cast']}) {$clause_compare} {$where}"; } } return ''; }