Verwendung von wc_get_product() mit einer PHP-Variablen für die Produkt-ID

Lesezeit: 4 Minuten

Benutzeravatar von Andrew-ThinkUp
Andrew-ThinkUp

Ich baue benutzerdefinierte Landingpages für Produkte in WooCommerce und möchte unter anderem den Produktpreis erhalten, um sie auf der Landingpage anzuzeigen.

Jede Zielseite verfügt über einige benutzerdefinierte Felder, die es dem WP-Administrator ermöglichen, Inhalte für die Zielseite sowie die Produkt-ID hinzuzufügen, die dann zum Generieren des Produktpreises, der Checkout-URL usw. verwendet werden.

Ich kann die nicht bekommen wc_get_product(); um mit meinem benutzerdefinierten Feld oder einer darauf aufbauenden Variablen zu arbeiten. Es funktioniert nur, wenn ich eine direkte ID verwende. Ich glaube, es gibt etwas, das 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>

Aktualisieren

Ich bekomme den folgenden Fehler mit wc_get_product( $courseID ); oder get_product( $courseID );:

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

Benutzeravatar von LoicTheAztec
LoicTheAztec

Aktualisieren im Zusammenhang mit Ihrem letzten Kommentar. Die 2 Wege zum Erkunden:

1) Stattdessen sollten Sie versuchen, das Produktobjekt zu verwenden (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 versuchen, zu verwenden get_post_meta() Funktion, um den Produktpreis zu erhalten (oder Produktmetadaten) Hier entlang:

<?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 sollte Ihnen bei der einen oder anderen Lösung der Preis angezeigt werden.


Aktualisieren: Möglicherweise müssen Sie auch $courseID in eine Integer-Variable konvertieren.

Weil Sie Ihre Variable verwenden müssen $courseID Innerhalb wc_get_product() (ohne 2 ') funktionieren so:

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

  • Ich hätte erwähnen sollen, dass ich das schon ohne probiert habe '' und es erzeugt einen Fehler bei einem Aufruf eines Nicht-Objekts. Fatal error: Call to a member function get_regular_price() on a non-object in ...

    – Andrew-ThinkUp

    19. Januar 2017 um 15:06 Uhr


  • Danke für Ihre Hilfe! Ohne sie hätte ich die anderen Optionen nicht ausschließen können. Sehr geschätzt!

    – Andrew-ThinkUp

    20. Januar 2017 um 20:55 Uhr

Das kannst du ausprobieren:

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

  • Ältere verwenden get_product(); Funktion funktioniert immer noch nicht, wenn die Anführungszeichen entfernt werden. Siehe meine Antwort an @LoicTheAztec unten

    – Andrew-ThinkUp

    19. Januar 2017 um 15:08 Uhr

Ich habe die Antwort herausgefunden, nachdem ich die möglichen Lösungswege durchgegangen bin, die @LoicTheAztec in seiner Antwort angegeben hat. Nichts davon funktionierte und so nahm ich an, dass etwas anderes los war.

Ich verwende Advanced Custom Fields, um benutzerdefinierte Felder im Backend hinzuzufügen, und ich habe ACFs verwendet the_field() um meine Variable zu erstellen. Das ist eine falsche Verwendung dieser Funktion, da sie das Feld anzeigen soll (es verwendet im Grunde das Echo von PHP). Um mit diesen benutzerdefinierten Feldern zu arbeiten, müssen Sie ACfs verwenden get_field() was soll Verwenden Sie es, um einen Wert zu speichern, einen Wert wiederzugeben und mit einem Wert zu interagieren.

Nachdem ich dazu übergegangen bin, meine $courseID darauf zu setzen.

$courseID = get_field('course_id'); 

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

  • Ho ja!!! das war so offensichtlich, dass ich es diesmal nicht gesehen habe… Ich habe bereits mit ACF get_field() / the_field() geantwortet… Dies ist ein sehr häufiger Fehler.

    – LoicTheAztec

    21. Januar 2017 um 2:14 Uhr

1396090cookie-checkVerwendung von wc_get_product() mit einer PHP-Variablen für die Produkt-ID

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy