#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()
неправильном использовании функции. Вы можете использовать разные способы получения значения пользовательского поля продукта:
- Способ 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>';
}
}
- Старый способ 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>';
}
}
- Для расширенных пользовательских полей плагин использует
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>';
}
}