在WooCommerce中以最高价格获取一系列独特的产品属性/值

时间:2018-01-30 00:24:25

标签: php sql wordpress woocommerce price

在WooCommerce中,我想:

  1. 获取特定产品属性的唯一值(来自我的所有产品),假设所有产品都将该特定属性设置为某种东西。

  2. 获取具有最高产品价格的唯一属性值列表。

  3. 例如:

    产品1:
    产品属性=绿色
    价格= 100美元

    产品2:
    产品属性=红色
    价格= 50美元

    产品3:
    产品属性=绿色
    价格= 50美元

      

    预期结果(数组):

         

    绿色:100美元   红色:50美元

    关于如何对其进行编码以使其返回数组的任何想法?

1 个答案:

答案 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的蜂蜜) ......