通过挂钩在 WooCommerce 单个产品页面中显示自定义字段值

Tom*_*324 2 php function custom-fields woocommerce hook-woocommerce

我对 PHP 还不太了解,但我正在尝试使用钩子在我的单个产品页面中放置一些内容woocommerce_before_add_to_cart_form

我成功地编写了一个代码来打印我的文本和我的产品的总销售额。代码如下所示:

add_action( 'woocommerce_before_add_to_cart_form', 'production_time', 11 );
  
function production_time() {
   global $product;
   $production_time = $product->get_total_sales();
   if ( $production_time ) echo '<p class="ri ri-clock">' . sprintf( __( ' Productietijd: %s', 'woocommerce' ), $production_time ) . '</p>';
}
Run Code Online (Sandbox Code Playgroud)

但我希望显示我的产品自定义字段值,而不是产品总销售额。

这是我添加的自定义字段fullfilment_production_time

自定义字段

我尝试将 更改get_total_sales()get_fullfilment_production_time()但没有成功。

我也尝试过这个:

add_action( 'woocommerce_before_add_to_cart_form', 'production_time', 11 );
  
function production_time() {
   global $product;
   $production_time = $product->get_post_meta( get_the_ID(), 'fullfilment_production_time', true );
   if ( $production_time ) echo '<p class="ri ri-clock">' . sprintf( __( ' Productietijd: %s', 'woocommerce' ), $production_time ) . '</p>';
}
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Loi*_*tec 5

get_post_meta()以错误的方式使用函数时,您的代码中存在错误。您可以使用不同的方式来获取产品自定义字段值:

  1. WooCommerce 使用WC_Data方法get_meta()如下:
add_action( 'woocommerce_before_add_to_cart_form', 'production_time', 11 ); 
function production_time() {
    global $product;

    $production_time = $product->get_meta( 'fullfilment_production_time' );

    if ( ! empty($production_time) ) {
        echo '<p class="ri ri-clock">' . sprintf( __( ' Productietijd: %s', 'woocommerce' ), $production_time ) . '</p>';
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 旧的 WordPress 方式使用get_post_meta()函数是这样的:
add_action( 'woocommerce_before_add_to_cart_form', 'production_time', 11 ); 
function production_time() {
    global $product;

    $production_time = get_post_meta( $product->get_id(), 'fullfilment_production_time', true ); 
   
    if ( ! empty($production_time) ) {
        echo '<p class="ri ri-clock">' . sprintf( __( ' Productietijd: %s', 'woocommerce' ), $production_time ) . '</p>';
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 对于高级自定义字段插件,使用get_field()以下方式的函数:
add_action( 'woocommerce_before_add_to_cart_form', 'production_time', 11 ); 
function production_time() {
    global $product;

    $production_time = get_field( 'fullfilment_production_time', $product->get_id() ); 
   
    if ( ! empty($production_time) ) {
        echo '<p class="ri ri-clock">' . sprintf( __( ' Productietijd: %s', 'woocommerce' ), $production_time ) . '</p>';
    }
}
Run Code Online (Sandbox Code Playgroud)