web-dev-qa-db-fra.com

Utiliser wc_get_product () avec un PHP variable pour l'ID de produit

Je construis des pages de destination personnalisées pour les produits dans WooCommerce et j'aimerais obtenir le prix du produit, entre autres choses, afin de les afficher sur la page de destination. 

Chaque page d'arrivée contient des champs personnalisés permettant à l'administrateur WP d'ajouter du contenu, pour la page d'arrivée ainsi que l'ID du produit, qui seront ensuite utilisés pour générer le prix du produit, l'URL de paiement, etc. 

Je n'arrive pas à faire en sorte que wc_get_product(); fonctionne avec mon champ personnalisé ou avec une variable créée à partir de cela. Cela ne fonctionne que lorsque j'utilise un identifiant direct. Je ne comprends pas quelque chose que je ne comprends pas sur le fonctionnement des variables dans PHP. Voici mon 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>

Mettre à jour  

J'obtiens l'erreur suivante en utilisantwc_get_product( $courseID );ouget_product( $courseID );:

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

J'ai compris la réponse après avoir parcouru les solutions possibles proposées par @LoicTheAztec dans sa réponse. Aucun de ceux-ci n'a fonctionné et j'ai donc supposé que quelque chose d'autre était en place. 

J'utilise Advanced Custom Fields pour ajouter des champs personnalisés dans le back-end et j'utilisais la fonction the_field() d'ACF afin de créer ma variable. C'est une utilisation incorrecte de cette fonction car elle est conçue pour afficher le champ (elle utilise essentiellement l'écho de php). Pour travailler avec ces champs personnalisés, vous devez utiliser la fonction get_field() d'ACf qui consiste à utilisez-la pour stocker une valeur, renvoyer une valeur et interagir avec une valeur.

Une fois que je suis passé à définir mon $ courseID à cela ..

$courseID = get_field('course_id'); 

Tout a fonctionné. Mon code a fonctionné et toutes les approches de code de @ LoicTheAztec ont également fonctionné. 

1
Andrew-ThinkUp

Mise à jour liée à votre commentaire récent. Les 2 façons d'explorer:

1) Au lieu de vous devriez essayer d'utiliser pour obtenir l'objet du produit (en évitant l'erreur):

$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) Alternativement, si cela ne fonctionne pas, vous devriez essayer d'utiliser get_post_meta() function pour obtenir le prix du produit (ou toute métadonnée du produit)} de cette façon:

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

Cette fois, vous devriez obtenir le prix affiché avec l’une ou l’autre des solutions.


Update: Peut-être aussi. Vous devez également convertir $ courseID en une variable entière.

Parce que vous devez utiliser votre variable $courseID dans wc_get_product() (sans le 2 '), procédez comme suit:

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

Cela devrait fonctionner maintenant.

4
LoicTheAztec

Vous pouvez essayer ceci:

$courseID = the_field('course_id');
$product = get_product( $courseID );
1
Tristup

Vous pouvez également utiliser cette méthode

$_product = wc_get_product( id );

Documentation officielle de l'API: wc_get_product

0
Owais Alam