将wc_get_product()与PHP变量一起用于产品ID

And*_*kUp 6 php wordpress product woocommerce advanced-custom-fields

我正在为WooCommerce中的产品构建自定义目标网页,我希望在其他内容中获取产品价格,以便在目标网页上显示它们.

每个登录页面都有一些自定义字段,允许WP管理员添加内容,登录页面以及产品ID,然后将用于生成产品价格,结帐URL等.

我无法wc_get_product();使用我的自定义字段或内置的变量.它仅在我使用直接ID时有效.我认为我不了解变量如何在PHP中运行.这是我的代码.

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// This line is where the problem is...
$_product = wc_get_product('$courseID');

// If I replace the line above with this line
// $_product = wc_get_product('7217');
//  everything works great, but that does not let 
// each landing page function based on the custom fields where the user determines 
// the product ID they are selling on that landing page.


// Get's the price of the product
$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>
Run Code Online (Sandbox Code Playgroud)

更新

我使用wc_get_product( $courseID );或得到以下错误get_product( $courseID );:

Fatal error: Call to a member function get_regular_price() on a non-object in ... 
Run Code Online (Sandbox Code Playgroud)

Loi*_*tec 5

与您最近评论相关的更新探索的2种方法:

1)而不是您应该尝试使用获取产品对象(避免错误):

$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Get an instance of the product object
$_product = new WC_Product($courseID);
Run Code Online (Sandbox Code Playgroud)

2)或者,如果这不起作用,则应尝试使用get_post_meta()函数以这种方式获取产品价格(或任何产品元数据)

<?php 
//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Get the product price (from this course ID):
$course_price = get_post_meta($courseID, '_regular_price', true); 

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>
Run Code Online (Sandbox Code Playgroud)

这次,您应该使用一种或其他解决方案显示价格。


更新:可能还需要将$ courseID转换为整数变量。

因为您需要以这种方式$courseIDwc_get_product()(不带2的')函数内部使用变量:

<?php 

//Gets the course ID from the custom field entered by user
$courseID = the_field('course_id');

// Optionally try this (uncommenting)
// $courseID = (int)$courseID;

// Here
$_product = wc_get_product( $courseID );

$course_price = $_product->get_regular_price();

// Output the Course price
?>  <span class="coursePrice">$<?php echo $course_price;?></span>
Run Code Online (Sandbox Code Playgroud)

现在应该可以使用了。


And*_*kUp 2

在浏览了 @LoicTheAztec 在他的回复中提供的可能的解决方案路线后,我找到了答案。这些都不起作用,所以我认为还有其他问题。

我使用高级自定义字段在后端添加自定义字段,并且我使用 ACFthe_field()来创建变量。这是该函数的错误用法,因为它旨在显示字段(它基本上使用 php 的 echo)。要使用这些自定义字段,您需要使用 ACf,get_field()使用它来存储值、回显值并与值交互。

一旦我切换到将我的 $courseID 设置为这个..

$courseID = get_field('course_id'); 
Run Code Online (Sandbox Code Playgroud)

一切顺利。我的代码有效,所有 @LoicTheAztec 的代码方法也有效。