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

问题描述 投票:0回答:1

在 WooCommerce,我想:

  1. 获取特定产品属性的唯一值(从我的所有产品中),假设所有产品都将该特定属性设置为某物。

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

例如:

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

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

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

预期结果(数组):

绿色:100 美元
红色:$50

关于如何编码以使其返回数组有什么想法吗?

php sql wordpress woocommerce product-price
1个回答
2
投票

对于数组中具有最高变体价格的可变产品及其变体属性名称和术语值名称,您将尝试以下自定义函数:

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

© www.soinside.com 2019 - 2024. All rights reserved.