Using wc_get_product() with a PHP variable for product ID

Andrew-ThinkUp picture Andrew-ThinkUp · Jan 18, 2017 · Viewed 27.9k times · Source

I'm building out custom landing pages for products in WooCommerce and I'd like to get the product price amongst other things in order to display them on the landing page.

Each landing page has some custom fields which allow the WP Admin to add in content, for the landing page as well as the product ID, which will then be used to generate the product price, checkout URL etc..

I can't get the wc_get_product(); to work with my custom field or a variable built off that. It only works when I use a straight ID. I think there's something I'm not understanding about how variables work within PHP. Here's my code.

<?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>

Update

I get the following error using wc_get_product( $courseID ); or get_product( $courseID );:

Fatal error: Call to a member function get_regular_price() on a non-object in ... 

Answer

LoicTheAztec picture LoicTheAztec · Jan 18, 2017

Update related to your recent comment. The 2 ways to explore:

1) Instead of you should try to use to get the product object (avoiding the error):

$courseID = the_field('course_id');

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

// Get an instance of the product object
$_product = new WC_Product($courseID);

2) Alternatively if this doesn't work, you should try to use get_post_meta() function to get the product price (or any product meta data) this way:

<?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>

This time you should get displayed the price with one or the other solutions.


Update: May be Also you need to convert $courseID to an integer variable.

Because you need to use your variable $courseID inside wc_get_product() (without the 2 ') function this way:

<?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>

This should work now.