Добавить пользовательскую кнопку «Добавить в корзину» на основе поля ACF на страницу отдельного продукта WooCommerce

#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 );