Отображение значения пользовательского поля на страницах отдельных товаров WooCommerce с помощью hook

#php #function #woocommerce #hook-woocommerce #custom-fields

#php #функция #woocommerce #крючок-woocommerce #пользовательские поля

Вопрос:

Я пока мало что знаю о PHP, но я пытаюсь разместить некоторый контент на страницах моих отдельных продуктов с помощью woocommerce_before_add_to_cart_form hook.

Мне удалось создать код, который печатает мой текст и общий объем продаж моих продуктов. Код выглядит следующим образом:

 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>';
}
 

Но вместо общего объема продаж продукта я хочу, чтобы отображалось значение пользовательского поля моего продукта.

Это настраиваемое поле, которое я добавил 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>';
}
 

Любой совет?

Ответ №1:

В вашем коде ошибка при 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>';
    }
}
 
  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>';
    }
}
 
  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>';
    }
}