我正在尝试显示可变产品的常规价格和销售价格。我知道它可以通过 get_post_meta( $post->ID, '_regular_price', true); 但它不是在可变产品中工作的,只是一个简单的产品。
我查看了这些类,还看到 woocommerce 在存储可变产品价格时更新了 _regular_price 本身的帖子元。
有什么我想念的吗?
谢谢
我正在尝试显示可变产品的常规价格和销售价格。我知道它可以通过 get_post_meta( $post->ID, '_regular_price', true); 但它不是在可变产品中工作的,只是一个简单的产品。
我查看了这些类,还看到 woocommerce 在存储可变产品价格时更新了 _regular_price 本身的帖子元。
有什么我想念的吗?
谢谢
解决这个问题的最佳代码是:
#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;
这是因为可变产品本身不保留任何价格信息,而是另一种子帖子的父级,"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 />";
}
如果您的产品没有任何变化,您可以使用产品 ID 简单地获取产品价格,例如:-
add_action('init', 'test');
function test() {
global $woocommerce;
$product = new WC_Product(268);
echo $product->get_price();
}
如果产品有变体并且每个变体都有不同的价格,则需要使用变体 ID 获取价格。