在WooCommerce中,我想:
获取特定产品属性的唯一值(来自我的所有产品),假设所有产品都将该特定属性设置为某种东西。
获取具有最高产品价格的唯一属性值列表。
例如:
产品1:
产品属性=绿色
价格= 100美元
产品2:
产品属性=红色
价格= 50美元
产品3:
产品属性=绿色
价格= 50美元
预期结果(数组):
绿色:100美元 红色:50美元
关于如何对其进行编码以使其返回数组的任何想法?
答案 0 :(得分:1)
对于变量产品及其变体属性名称和术语值名称,数组中的变体价格最高,您将尝试以下自定义函数:
function get_variations_attributes_values_highest_price(){
global $wpdb;
// SQL query
$all_attributes = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}woocommerce_attribute_taxonomies");
$product_attributes = array();
foreach( $all_attributes as $value ){
$product_attributes = 'pa_'.$value->attribute_name;
}
//$pa_taxonomies = "'".implode("','", $product_attributes)."'";
// The 2nd SQL query
$query = $wpdb->get_results( "
SELECT p.ID, pm.meta_key as attr, pm.meta_value as term, pm2.meta_value as price
FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
INNER JOIN {$wpdb->prefix}postmeta as pm2 ON pm.post_id = pm2.post_id
WHERE p.post_type IN ('product_variation','product')
AND p.post_status LIKE 'publish'
AND pm.meta_key LIKE 'attribute_pa_%'
AND pm2.meta_key LIKE '_price'
AND pm2.meta_value != ''
ORDER BY pm.meta_key ASC, pm.meta_value ASC, CAST(replace(pm2.meta_value, 'MDT ', '') AS UNSIGNED) ASC
" );
//print_pr($query);
$ordered_results = $results = array();
// Loop 1: Filtering and removing duplicate terms keeping highest price
foreach( $query as $values ){
if( !empty($values->price)){
$filter_key = $values->attr .' '.$values->term;
$ordered_results[$filter_key] = (object) array( 'attr' => $values->attr,
'term' => $values->term, 'price' => $values->price );
}
}
// Loop 2: Get the real name values, formatting data
foreach( $ordered_results as $result ){
$taxonomy = str_replace('attribute_' , '', $result->attr );
$attr_name = get_taxonomy( $taxonomy )->labels->singular_name; // Attribute name
$value_name = get_term_by( 'slug', $result->term, $taxonomy )->name; // Attribute value term name
$results[$attr_name.' - '.$value_name] = wc_price($result->price);
}
return $results;
}
代码进入活动子主题(或活动主题)的function.php文件。
经过测试和工作。
## --- USAGE --- ##
// RAW ARRAY OUTPUT
echo '<pre>'; print_r(get_variations_attributes_values_highest_price()); echo '</pre>';
您可以轻松地进行一些更改,以满足您的需求(TheBear的蜂蜜) ......