Woocommerce Добавить в корзину ссылка Ajax включен в другой пост или страницы

В Woocommerce я хотел бы создать ссылку "добавить в корзину" на простой странице сайта WordPress (а не на странице продукта).

Итак, я попробовал этот код (где 123 - идентификатор продукта):

<a href="http://example.com/cart/?add-to-cart=123">Buy</a>

Я включил добавление AJAX в корзину на страницах архивов.

Но это не работает, и функциональность Ajax не включена в моей пользовательской ссылке "Добавить в корзину".

Как включить ajax add-to-cart по пользовательской ссылке (на других страницах, кроме woocommerce)?

3 ответа

Решение

Чтобы включить добавление ajax в корзину, попробуйте один из следующих способов:

  1. Простой HTML Ajax добавить в корзину ссылку:

    <a rel="nofollow" href="/?add-to-cart=37" data-quantity="1" data-product_id="123" data-product_sku="" class="add_to_cart_button ajax_add_to_cart">Add to cart</a>
    
  2. Пользовательский шорткод [ajax_add_to_cart id='123'] без учета цены:
    настраиваемые параметры, такие как текст кнопки, дополнительные классы, количество)

    if( ! function_exists('custom_ajax_add_to_cart_button') && class_exists('WooCommerce') ) {
        function custom_ajax_add_to_cart_button( $atts ) {
            // Shortcode attributes
            $atts = shortcode_atts( array(
                'id' => '0', // Product ID
                'qty' => '1', // Product quantity
                'text' => '', // Text of the button
                'class' => '', // Additional classes
            ), $atts, 'ajax_add_to_cart' );
    
            if( esc_attr( $atts['id'] ) == 0 ) return; // Exit when no Product ID
    
            if( get_post_type( esc_attr( $atts['id'] ) ) != 'product' ) return; // Exit if not a Product
    
            $product = wc_get_product( esc_attr( $atts['id'] ) );
    
            if ( ! $product ) return; // Exit when if not a valid Product
    
            $classes = implode( ' ', array_filter( array(
                'button',
                'product_type_' . $product->get_type(),
                $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
                $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
            ) ) ).' '.$atts['class'];
    
            $add_to_cart_button = sprintf( '<a rel="nofollow" href="%s" %s %s %s class="%s">%s</a>',
                esc_url( $product->add_to_cart_url() ),
                'data-quantity="' . esc_attr( $atts['qty'] ) .'"',
                'data-product_id="' . esc_attr( $atts['id'] ) .'"',
                'data-product_sku="' . esc_attr( $product->get_sku() ) .'"',
                esc_attr( isset( $classes ) ? $classes : 'button' ),
                esc_html( empty( esc_attr( $atts['text'] ) ) ? $product->add_to_cart_text() : esc_attr( $atts['text'] ) )
            );
    
            return $add_to_cart_button;
        }
        add_shortcode('ajax_add_to_cart', 'custom_ajax_add_to_cart_button');
    }
    

    Этот код помещается в файл function.php вашей активной дочерней темы (или темы). Проверено и работает.

    ИСПОЛЬЗОВАНИЕ:

    В постах и ​​страницах текстового редактора:

    [ajax_add_to_cart id='123' text='Buy']
    

    В PHP-файлах или шаблонах:

    echo do_shortcode( "[ajax_add_to_cart id='123' text='Buy']" );
    

    Вставлено в HTML-код на странице php:

    <?php echo do_shortcode( "[ajax_add_to_cart id='123' text='Buy']" ); ?>
    

    Скрыть Ajax "Просмотр корзины"

    Для пользовательского шорткода, чтобы скрыть поведение Ajax "просмотр корзины", вы можете добавить в код перед return $add_to_cart_button; следующие:

    $style = '<style>a.added_to_cart.wc-forward { display:none !important; }</style>';
    
    $add_to_cart_button = $style . $add_to_cart_button ;
    
  3. Использование Woocommerce уже существует [add_to_cart id='123'] короткий номер
    (то же использование, что и выше)


Я предлагаю вам использовать [add_to_cart] Короткий номер.

Простейшее использование с параметрами по умолчанию:

[add_to_cart id="123" /]

Отключает стиль по умолчанию и скрывает цену:

[add_to_cart id="123" style="" show_price="false" /]

Посмотреть пример выходных данных Образец вывода

Я использовал это для моего плагина, и он работает нормально:

function wsb_add_to_cart_button( ) {
    global $product;

    $classes = implode( ' ',  array(
        'button',
        'product_type_' . $product->get_type(),
        $product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
        $product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
    )  );

    return apply_filters( 'woocommerce_loop_add_to_cart_link',
        sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button %s product_type_%s">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( $product->get_id() ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( isset( $classes ) ? $classes : 'button' ),
            esc_attr( $product->get_type() ),
            esc_html( $product->add_to_cart_text() )
        ),
    $product );
} 

для показа кнопки:

<?php echo wsb_add_to_cart_button(); ?>
Другие вопросы по тегам