web-dev-qa-db-ja.com

wc_get_product()でPHP変数を製品IDに使用する

WooCommerceで商品のカスタムランディングページを作成しています。ランディングページに表示するために、とりわけ商品価格を取得したいと考えています。

各ランディングページには、WP Adminがコンテンツを追加できるようにするいくつかのカスタムフィールドがあり、ランディングページと製品IDがコンテンツ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>
_

更新

wc_get_product( $courseID );またはget_product( $courseID );を使用して次のエラーが発生します。

_Fatal error: Call to a member function get_regular_price() on a non-object in ... 
_
9
Andrew-ThinkUp

@LoicTheAztecが彼の応答で提供した可能な解決策のルートを実行した後、私は答えを見つけました。これらはどれも機能しなかったので、他に何か問題があると思いました。

Advanced Custom Fieldsを使用してカスタムフィールドをバックエンドに追加し、変数を作成するためにACFのthe_field()を使用していました。それはフィールドを表示するように設計されているため、その関数の誤った使用法です(基本的にはphpのエコーを使用しています)。これらのカスタムフィールドを使用するには、ACfのget_field()を使用する必要があります これを使用して値を格納し、値をエコーし​​、値を操作します。

$ courseIDをこれに設定することに切り替えたら、.

$courseID = get_field('course_id'); 

すべてがうまくいった。私のコードは機能し、@ LoicTheAztecのすべてのコードアプローチも機能しました。

1
Andrew-ThinkUp

更新最近のコメントに関連しています。 探索する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);
_

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

今回は、1つまたは他のソリューションで価格を表示する必要があります。


更新:可能性がありますまた、$ courseIDを整変数に変換する必要があります。

変数を使用する必要があるため_$courseID_内部 wc_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>
_

これで動作するはずです。

5
LoicTheAztec

あなたはこれを試すことができます:

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

この方法も使用できます

$_product = wc_get_product( id );

公式API-docs: wc_get_product

0
Owais Alam