在循环外获取Woocommerce产品变体

Bob*_*obz 2 wordpress woocommerce

我试图列出woocommerce模板之外的每个变体的产品变化和价格.任何人都可以建议我如何访问该信息?

我试图做这样的事情:

$tickets = new WC_Product( $product_id);
$variables = $tickets->get_available_variations();
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它在循环之外,它返回错误.

理想我想得到像阵列一样的所有变化:

$vars = array(
 array('name' => 'My var name', 'price' => '123'),
 array('name' => 'My var name', 'price' => '123'),
);
Run Code Online (Sandbox Code Playgroud)

也许即使这可以在'save_post'上为每个产品创建新的post_meta并保存以供将来使用,这样就可以得到:

$meta = get_post_meta( $product_id, '_my_variations' );
Run Code Online (Sandbox Code Playgroud)

任何建议都是受欢迎的.

小智 8

要在循环外获得产品变体,您需要创建WC_Product_Variable类的新实例,这是一个示例:

$tickets = new WC_Product_Variable( $product_id);
$variables = $tickets->get_available_variations();
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将获得$ variables数组中变体的所有必需信息.


小智 5

这是使用产品ID,循环外和woocommerce模板获取产品变量的最简单的解决方案

$args = array(
'post_type'     => 'product_variation',
'post_status'   => array( 'private', 'publish' ),
'numberposts'   => -1,
'orderby'       => 'menu_order',
'order'         => 'asc',
'post_parent'   => $product_id // $post->ID 
);
$variations = get_posts( $args ); 
echo "<pre>"; print_r($variations); echo "</pre>"; 
Run Code Online (Sandbox Code Playgroud)

  • @Bobz这对你来说很棒*,但对其他人没有帮助.*你是如何创建一个新循环的?你把它放在哪里了?你能发布解决问题的代码吗?请尽量记住SO也适用于其他可以通过您的问题(以及您的解决方案!)帮助的用户,所以简单地说'我解决了'并且消失并不是很有帮助.该链接的某些上下文也会有所帮助:"鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户能够了解它是什么以及它为什么存在." - http://stackoverflow.com/help/how-to-answer (11认同)