#php #wordpress #woocommerce #product #advanced-custom-fields
#php #wordpress #woocommerce #продукт #дополнительно-пользовательские поля
Вопрос:
Я хочу добавить дополнительную пользовательскую кнопку «Добавить в корзину» на странице одного продукта условно, используя этот код:
add_action( 'woocommerce_product_meta_end' , 'add_to_cart_custom', 10 );
function add_to_cart_custom() {
$mamut = get_field('mamut');
$stockstatus = get_post_meta( get_the_ID(), '_stock_status', true );
$id = $product->get_id();
if ($mamut) {
echo 'Send request';
}elseif(!$mamut and $stockstatus === 'outofstock'){
echo 'Send request - Mamut';
}elseif(!$mamut and $stockstatus === "instock" ) {
echo 'Add to cart';
}
}
Эта переменная является полем из ACF $mamut = get_field('mamut');
Однако, когда я помещаю этот код в свой functions.php
файл, происходит сбой страницы одного продукта
Я использую тему Twenty nineteen и Elementor Pro.
Я пытался удалить действия, а затем добавить другое, но это не работает. Также я попытался создать шорткоды и ввести их с помощью Elementor, но затем шорткоды отображались в виде текста.
Комментарии:
1. Ваше использование
$product->get_id();
while$product
не определено2. Но даже когда я определяю $product, это все тот же вид.
Ответ №1:
- Ваше использование
$product->get_id();
while$product
не определено - Вы могли бы использовать
$product->get_stock_status();
вместоget_post_meta( get_the_ID(), '_stock_status', true );
Таким образом, вы получаете
function add_to_cart_custom() {
global $product;
// Is a WC product
if ( is_a( $product, 'WC_Product' ) ) {
// Get field - function from ACF plugin, plugin must be actived for this
$mamut = get_field( 'mamut' );
// Get stock status
$stock_status = $product->get_stock_status();
// If value exists
if ( $mamut ) {
echo 'Send request';
} elseif( ! $mamut amp;amp; $stock_status === 'outofstock' ) {
echo 'Send request - Mamut';
} elseif( ! $mamut amp;amp; $stock_status === 'instock' ) {
echo 'Add to cart';
}
}
}
add_action( 'woocommerce_product_meta_end' , 'add_to_cart_custom', 10, 0 );