1

我正在尝试显示可变产品的常规价格和销售价格。我知道它可以通过 get_post_meta( $post->ID, '_regular_price', true); 但它不是在可变产品中工作的,只是一个简单的产品。

我查看了这些类,还看到 woocommerce 在存储可变产品价格时更新了 _regular_price 本身的帖子元。

有什么我想念的吗?

谢谢

4

3 回答 3

4

解决这个问题的最佳代码是:

    #Step 1: Get product varations
$available_variations = $product->get_available_variations();

#Step 2: Get product variation id
$variation_id=$available_variations[0]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.

#Step 3: Create the variable product object
$variable_product1= new WC_Product_Variation( $variation_id );

#Step 4: You have the data. Have fun :)
$regular_price = $variable_product1 ->regular_price;
$sales_price = $variable_product1 ->sale_price;
于 2015-03-26T20:40:03.547 回答
0

这是因为可变产品本身不保留任何价格信息,而是另一种子帖子的父级,"product_variation"每个子帖子都有自己的价格和变化信息。因此,如果您想在WP_Query循环中对可变产品的价格做一些事情,您必须过滤您的循环post_type => 'product_variation',然后您可以从其post_parent属性中访问其父 ID,以获取这些可变产品变体的其他相关信息,例如名称、描述、图像, ...

这是一个例子:

$query = new WP_Query(array(
    'post_type' => 'product_variation', // <<== here is the answer
    'posts_per_page' => 5,
        'post_status' => 'publish',
        'orderby' => 'meta_value_num',
        'meta_key' => '_price',
        'order' => 'asc',
        ));

while ($query->have_posts()) {
    $query->the_post();
    $pid = $query->post->ID;
    $parent = $query->post->post_parent;
    $price = get_post_meta($pid, '_price', true);
    $regular_price = get_post_meta($pid, '_regular_price', true);
    $sale_price = get_post_meta($pid, '_sale_price', true);
    $title_product = get_the_title($parent);
    $title_variation = get_the_title($pid);
    echo "$title_variation: $price <br />";
}
于 2018-12-30T02:13:52.840 回答
0

如果您的产品没有任何变化,您可以使用产品 ID 简单地获取产品价格,例如:-

add_action('init', 'test');

function test() {
    global $woocommerce;

    $product = new WC_Product(268);
    echo $product->get_price();
} 

如果产品有变体并且每个变体都有不同的价格,则需要使用变体 ID 获取价格。

于 2017-08-18T14:10:21.253 回答