【问题标题】:Using wc_get_product() with a PHP variable for product ID将 wc_get_product() 与产品 ID 的 PHP 变量一起使用
【发布时间】:2017-06-03 11:13:12
【问题描述】:

我正在为 WooCommerce 中的产品构建自定义登录页面,我想获取产品价格等信息,以便在登录页面上显示它们。

每个着陆页都有一些自定义字段,允许 WP 管理员添加内容,用于着陆页以及产品 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 ... 

【问题讨论】:

    标签: php wordpress woocommerce advanced-custom-fields product


    【解决方案1】:

    更新与您最近的评论相关。 两种探索方式:

    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>
    

    这一次您应该使用一种或其他解决方案显示价格。


    更新:可能您还需要将 $courseID 转换为整数变量。

    因为您需要以这种方式在 wc_get_product() 中使用变量 $courseID(没有 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>
    

    现在应该可以了。

    【讨论】:

    • 我应该提到我已经在没有'' 的情况下尝试了这个,它会在调用非对象时产生错误。 Fatal error: Call to a member function get_regular_price() on a non-object in ...
    • 感谢您的帮助!没有它,我将无法消除其他选项。非常感谢!
    【解决方案2】:

    你可以试试这个:

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

    【讨论】:

    • 使用旧的get_product(); 函数在删除引号时仍然不起作用。请参阅下面我对@LoicTheAztec 的回复
    【解决方案3】:

    在浏览了@LoicTheAztec 在他的回复中提供的可能的解决方案路线后,我找到了答案。这些都不起作用,所以我认为还有其他问题。

    我使用高级自定义字段在后端添加自定义字段,并且我使用 ACF 的the_field() 来创建我的变量。这是该函数的不正确用法,因为它旨在显示该字段(它基本上是使用 php 的回显)。要使用这些自定义字段,您需要使用 ACf 的 get_field(),即 use it to store a value, echo a value and interact with a value.

    一旦我切换到将我的 $courseID 设置为此..

    $courseID = get_field('course_id'); 
    

    一切正常。我的代码有效,@LoicTheAztec 的所有代码方法也有效。

    【讨论】:

    • 嗬嗬!!!太明显了,这次没看到……我已经用ACF get_field()/the_field()做出了回答……这是一个很常见的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多