split updates
This commit is contained in:
parent
663f724bdd
commit
f0037ea643
|
@ -1278,62 +1278,88 @@ function wc_deferred_product_sync( $product_id ) {
|
||||||
function wc_update_product_lookup_tables() {
|
function wc_update_product_lookup_tables() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
// Move meta data into the lookup table.
|
// Make a row per product in lookup table.
|
||||||
$wpdb->query(
|
$wpdb->query(
|
||||||
"
|
"
|
||||||
INSERT IGNORE INTO {$wpdb->wc_product_meta_lookup} (`product_id`, `min_price`, `max_price`, `average_rating`, `total_sales`, `sku`, `stock_status`)
|
INSERT IGNORE INTO {$wpdb->wc_product_meta_lookup} (`product_id`)
|
||||||
SELECT
|
SELECT
|
||||||
posts.ID, MIN(meta1.meta_value), MAX(meta1.meta_value), meta2.meta_value, meta3.meta_value, meta4.meta_value, meta5.meta_value
|
posts.ID
|
||||||
FROM {$wpdb->posts} posts
|
FROM {$wpdb->posts} posts
|
||||||
LEFT JOIN {$wpdb->postmeta} meta1 ON posts.ID = meta1.post_id AND meta1.meta_key = '_price'
|
|
||||||
LEFT JOIN {$wpdb->postmeta} meta2 ON posts.ID = meta2.post_id AND meta2.meta_key = '_wc_average_rating'
|
|
||||||
LEFT JOIN {$wpdb->postmeta} meta3 ON posts.ID = meta3.post_id AND meta3.meta_key = 'total_sales'
|
|
||||||
LEFT JOIN {$wpdb->postmeta} meta4 ON posts.ID = meta4.post_id AND meta4.meta_key = '_sku'
|
|
||||||
LEFT JOIN {$wpdb->postmeta} meta5 ON posts.ID = meta5.post_id AND meta5.meta_key = '_stock_status'
|
|
||||||
WHERE
|
WHERE
|
||||||
posts.post_type IN ('product', 'product_variation')
|
posts.post_type IN ('product', 'product_variation')
|
||||||
AND meta1.meta_value <> ''
|
|
||||||
GROUP BY
|
|
||||||
posts.ID, meta2.meta_value, meta3.meta_value, meta4.meta_value, meta5.meta_value
|
|
||||||
"
|
"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Move stock data into the lookup table.
|
WC()->queue()->add(
|
||||||
$wpdb->query(
|
'wc_update_product_lookup_tables_column',
|
||||||
"
|
array(
|
||||||
UPDATE
|
'column' => 'min_price',
|
||||||
{$wpdb->wc_product_meta_lookup} lookup_table
|
),
|
||||||
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_manage_stock'
|
'wc_update_product_lookup_tables'
|
||||||
LEFT JOIN {$wpdb->postmeta} meta2 ON lookup_table.product_id = meta2.post_id AND meta2.meta_key = '_stock'
|
|
||||||
SET
|
|
||||||
lookup_table.stock_quantity = meta2.meta_value
|
|
||||||
WHERE
|
|
||||||
meta1.meta_value = 'yes'
|
|
||||||
"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Move type data into table.
|
WC()->queue()->add(
|
||||||
$wpdb->query(
|
'wc_update_product_lookup_tables_column',
|
||||||
"
|
array(
|
||||||
UPDATE
|
'column' => 'max_price',
|
||||||
{$wpdb->wc_product_meta_lookup} lookup_table
|
),
|
||||||
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_downloadable'
|
'wc_update_product_lookup_tables'
|
||||||
SET
|
|
||||||
lookup_table.downloadable = 1
|
|
||||||
WHERE
|
|
||||||
meta1.meta_value = 'yes'
|
|
||||||
"
|
|
||||||
);
|
);
|
||||||
$wpdb->query(
|
|
||||||
"
|
WC()->queue()->add(
|
||||||
UPDATE
|
'wc_update_product_lookup_tables_column',
|
||||||
{$wpdb->wc_product_meta_lookup} lookup_table
|
array(
|
||||||
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_virtual'
|
'column' => 'stock_quantity',
|
||||||
SET
|
),
|
||||||
lookup_table.virtual = 1
|
'wc_update_product_lookup_tables'
|
||||||
WHERE
|
);
|
||||||
meta1.meta_value = 'yes'
|
|
||||||
"
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'sku',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'stock_status',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'average_rating',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'total_sales',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'downloadable',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
|
);
|
||||||
|
|
||||||
|
WC()->queue()->add(
|
||||||
|
'wc_update_product_lookup_tables_column',
|
||||||
|
array(
|
||||||
|
'column' => 'virtual',
|
||||||
|
),
|
||||||
|
'wc_update_product_lookup_tables'
|
||||||
);
|
);
|
||||||
|
|
||||||
// Rating counts are serialised so add them gradually using queue.
|
// Rating counts are serialised so add them gradually using queue.
|
||||||
|
@ -1362,6 +1388,102 @@ function wc_update_product_lookup_tables() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate lookup table column data.
|
||||||
|
*
|
||||||
|
* @since 3.6.0
|
||||||
|
* @param string $column Column name to set.
|
||||||
|
*/
|
||||||
|
function wc_update_product_lookup_tables_column( $column ) {
|
||||||
|
if ( empty( $column ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
global $wpdb;
|
||||||
|
// phpcs:disable WordPress.DB.PreparedSQL.NotPrepared
|
||||||
|
switch ( $column ) {
|
||||||
|
case 'min_price':
|
||||||
|
$wpdb->query(
|
||||||
|
"
|
||||||
|
UPDATE
|
||||||
|
{$wpdb->wc_product_meta_lookup} lookup_table
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_price'
|
||||||
|
SET
|
||||||
|
lookup_table.min_price = meta1.meta_value
|
||||||
|
WHERE
|
||||||
|
meta1.meta_value <> ''
|
||||||
|
ORDER BY
|
||||||
|
meta1.meta_value+0 ASC
|
||||||
|
"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'max_price':
|
||||||
|
$wpdb->query(
|
||||||
|
"
|
||||||
|
UPDATE
|
||||||
|
{$wpdb->wc_product_meta_lookup} lookup_table
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_price'
|
||||||
|
SET
|
||||||
|
lookup_table.max_price = meta1.meta_value
|
||||||
|
WHERE
|
||||||
|
meta1.meta_value <> ''
|
||||||
|
ORDER BY
|
||||||
|
meta1.meta_value+0 DESC
|
||||||
|
"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'stock_quantity':
|
||||||
|
$wpdb->query(
|
||||||
|
"
|
||||||
|
UPDATE
|
||||||
|
{$wpdb->wc_product_meta_lookup} lookup_table
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_manage_stock'
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta2 ON lookup_table.product_id = meta2.post_id AND meta2.meta_key = '_stock'
|
||||||
|
SET
|
||||||
|
lookup_table.stock_quantity = meta2.meta_value
|
||||||
|
WHERE
|
||||||
|
meta1.meta_value = 'yes'
|
||||||
|
"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'sku':
|
||||||
|
case 'stock_status':
|
||||||
|
case 'average_rating':
|
||||||
|
case 'total_sales':
|
||||||
|
$meta_key = 'total_sales' === $column ? $column : '_' . $column;
|
||||||
|
$column = esc_sql( $column );
|
||||||
|
$wpdb->query(
|
||||||
|
$wpdb->prepare(
|
||||||
|
"
|
||||||
|
UPDATE
|
||||||
|
{$wpdb->wc_product_meta_lookup} lookup_table
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta ON lookup_table.product_id = meta.post_id AND meta.meta_key = %s
|
||||||
|
SET
|
||||||
|
lookup_table.`{$column}` = meta.meta_value
|
||||||
|
",
|
||||||
|
$meta_key
|
||||||
|
)
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case 'downloadable':
|
||||||
|
case 'virtual':
|
||||||
|
$column = esc_sql( $column );
|
||||||
|
$wpdb->query(
|
||||||
|
"
|
||||||
|
UPDATE
|
||||||
|
{$wpdb->wc_product_meta_lookup} lookup_table
|
||||||
|
LEFT JOIN {$wpdb->postmeta} meta1 ON lookup_table.product_id = meta1.post_id AND meta1.meta_key = '_virtual'
|
||||||
|
SET
|
||||||
|
lookup_table.`{$column}` = 1
|
||||||
|
WHERE
|
||||||
|
meta1.meta_value = 'yes'
|
||||||
|
"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// phpcs:enable WordPress.DB.PreparedSQL.NotPrepared
|
||||||
|
}
|
||||||
|
add_action( 'wc_update_product_lookup_tables_column', 'wc_update_product_lookup_tables_column' );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populate rating count lookup table data for products.
|
* Populate rating count lookup table data for products.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue