wake-up-neo.net

Verwenden von wc_get_product () mit einem PHP Variable für Produkt-ID

Ich baue eigene Landing-Pages für Produkte in WooCommerce aus und möchte unter anderem den Produktpreis erhalten, um sie auf der Landing-Page anzuzeigen. 

Jede Landing Page verfügt über einige benutzerdefinierte Felder, in denen der WP Admin den Inhalt der Landing Page sowie die Produkt-ID hinzufügen kann, die dann zur Generierung des Produktpreises, der Checkout-URL usw. verwendet wird. 

Ich kann wc_get_product(); nicht dazu bringen, mit meinem benutzerdefinierten Feld oder einer darauf aufgebauten Variablen zu arbeiten. Es funktioniert nur, wenn ich eine gerade ID verwende. Ich denke, es gibt etwas, was ich nicht verstehe, wie Variablen in PHP funktionieren. Hier ist mein 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  

Ich erhalte folgende Fehlermeldung mitwc_get_product( $courseID );oderget_product( $courseID );:

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

Ich fand die Antwort heraus, nachdem ich die möglichen Lösungswege durchgegangen war, die @LoicTheAztec in seiner Antwort angegeben hatte. Nichts davon funktionierte, und so nahm ich an, dass etwas anderes vorlag. 

Ich verwende erweiterte benutzerdefinierte Felder, um benutzerdefinierte Felder im Back-End hinzuzufügen, und ich verwendete ACFs the_field(), um meine Variable zu erstellen. Das ist eine falsche Verwendung dieser Funktion, da sie zur Anzeige des Feldes bestimmt ist (es verwendet im Wesentlichen das Echo von PHP). Um mit diesen benutzerdefinierten Feldern arbeiten zu können, müssen Sie die Funktion get_field() von ACf verwenden, um verwenden, um einen Wert zu speichern, einen Wert zu bestätigen und mit einem Wert zu interagieren.

Einmal habe ich gewechselt, um meine $ courseID hier einzustellen.

$courseID = get_field('course_id'); 

Alles hat funktioniert. Mein Code hat funktioniert, und alle Code-Ansätze von @ LoicTheAztec haben auch funktioniert. 

1
Andrew-ThinkUp

Update bezogen auf Ihren letzten Kommentar. Die zwei Wege zu erkunden:

1) Anstelle von sollten Sie versuchen, das Produktobjekt zu erhalten (um den Fehler zu vermeiden):

$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) Wenn dies nicht funktioniert, sollten Sie alternativ die Funktion get_post_meta() verwenden, um den Produktpreis (oder alle Produkt-Metadaten)auf diese Weise zu erhalten:

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

Diesmal sollten Sie den Preis mit der einen oder anderen Lösung angezeigt bekommen.


Update: Möglicherweise müssen Sie auch $ courseID in eine Ganzzahlvariable konvertieren.

Da Sie Ihre Variable$courseIDinnerhalb von wc_get_product() (ohne die 2') - Funktion verwenden müssen, funktionieren Sie folgendermaßen:

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

Das sollte jetzt funktionieren.

4
LoicTheAztec

Sie können dies ausprobieren:

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

Sie können diese Methode auch verwenden

$_product = wc_get_product( id );

Offizielle API-Dokumente: wc_get_product

0
Owais Alam