Automattic\WooCommerce\Internal\Admin\Reports
HposLegacyOrderReportQueryBuilder::build_where_meta_predicates
Build the WHERE fragment for caller-supplied where_meta predicates.
Method of the class: HposLegacyOrderReportQueryBuilder{}
No Hooks.
Returns
string. WHERE fragment.
Usage
// private - for code of main (parent) class only $result = $this->build_where_meta_predicates( $where_meta );
- $where_meta(array) (required)
- The original
where_metaargument.
HposLegacyOrderReportQueryBuilder::build_where_meta_predicates() HposLegacyOrderReportQueryBuilder::build where meta predicates code WC 11.2.1
private function build_where_meta_predicates( $where_meta ) {
$schema = $this->get_report_schema();
$relation = $where_meta['relation'] ?? 'AND';
$clause = ' AND (';
$first = true;
foreach ( $where_meta as $value ) {
if ( ! is_array( $value ) ) {
continue;
}
$where_value = $this->prepare_predicate_value( $value, 'meta_value' );
if ( '' === $where_value ) {
continue;
}
if ( ! $first ) {
$clause .= ' ' . $relation;
}
$first = false;
$meta_key = $value['meta_key'];
$key = sanitize_key( is_array( $meta_key ) ? $meta_key[0] . '_array' : $meta_key );
if ( isset( $value['type'] ) && 'order_item_meta' === $value['type'] ) {
if ( is_array( $meta_key ) ) {
$clause .= " ( order_item_meta_{$key}.meta_key IN ('" . implode( "','", $meta_key ) . "')";
} else {
$clause .= " ( order_item_meta_{$key}.meta_key = '{$meta_key}'";
}
$clause .= " AND order_item_meta_{$key}.meta_value {$where_value} )";
} elseif ( ! is_array( $meta_key ) && isset( $schema['where_meta_column'][ $meta_key ] ) ) {
$clause .= ' ( ' . $schema['where_meta_column'][ $meta_key ] . " {$where_value} )";
} elseif ( ! is_array( $meta_key ) && isset( $schema['address_column'][ $meta_key ] ) ) {
list( $address_type, $column ) = $schema['address_column'][ $meta_key ];
$clause .= " ( address_{$address_type}.{$column} {$where_value} )";
} else {
if ( is_array( $meta_key ) ) {
$clause .= " ( meta_{$key}.meta_key IN ('" . implode( "','", $meta_key ) . "')";
} else {
$clause .= " ( meta_{$key}.meta_key = '{$meta_key}'";
}
$clause .= " AND meta_{$key}.meta_value {$where_value} )";
}
}
return $clause . ')';
}