• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Обновление текста на кнопке "в корзину" после нажатия, в реальном времени

Romakod

Новичок
Здравствуйте! Прошу помощи у тех кто сечёт в коде. Я к моему большому сожалению этими навыками не обладаю.

Задача состоит в следующем. Нужно чтобы текст на кнопке "заказать" (обычная кнопка woocomerce "в корзину") после нажатия на неё менялся на "в корзине" на страницах отдельных товаров и страниц магазина-категорий.

На данный момент у меня есть код (прикладываю) который осуществляет эту функцию но не в реальном времени. Текст меняется после обновления страницы. Как сделать чтобы текст после нажатия на кнопку менялся в реальном времени я так понимаю нужен код или может быть есть плагин (хотя мои поиски не дали результата). Тема ASTRA

PHP:
// для страницы самого товара
add_filter( 'woocommerce_product_single_add_to_cart_text', 'truemisha_single_product_btn_text' );
 
function truemisha_single_product_btn_text( $text ) {
 
    if( WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( get_the_ID() ) ) ) {
        $text = 'Уже в корзине';
    }
 
    return $text;
 
}
 
// для страниц каталога товаров, категорий товаров и т д
add_filter( 'woocommerce_product_add_to_cart_text', 'truemisha_product_btn_text', 20, 2 );
 
function truemisha_product_btn_text( $text, $product ) {
 
    if(
       $product->is_type( 'simple' )
       && $product->is_purchasable()
       && $product->is_in_stock()
       && WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product->get_id() ) )
    ) {
 
        $text = 'В корзине';
 
    }
 
    return $text;
 
}
 

marr

Специалист
Местный

Romakod

Новичок
К сожалению вы неправильно поняли мою проблему. Мне не надо чтобы после нажатия кнопки был переход на какую-либо другую страницу. Мне надо чтобы после нажатия кнопки "в корзину" менялся только текст на этой кнопке в режиме Ajax
 

Romakod

Новичок
В продолжение моей проблемы. Нашёл код на буржуйском форуме для изменения аяксом текста кнопки после нажатия на страницах отдельных товаров. Может быть кто знает как сделать чтобы работала и на страницах магазина и категорий товаров?

Код:
add_action( 'wp_footer', 'single_add_to_cart_event_text_replacement' );
function single_add_to_cart_event_text_replacement() {
    global $product;

    if( ! is_product() ) return; // Only single product pages
    if( $product->is_type('variable') ) return; // Not variable products
    ?>
        <script type="text/javascript">
            (function($){
                $('button.single_add_to_cart_button').click( function(){
                    $(this).text('<?php _e( "В корзине", "woocommerce" ); ?>');
                });
            })(jQuery);
        </script>
    <?php
}
 

joy66

Опытный
никакого тут аякса нету, буржуи вас обманули ))
Чтобы на странице категорий менялся текст кнопки

Код:
add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
    if ( is_shop() || is_product_category()):
        ?>
            <script type="text/javascript">
jQuery(document).ready(function($) {
    $(document.body).on('added_to_cart', function(event, fragments, cart_hash, button) {
        button.text("В корзине");
    });
  
});
            </script>
        <?php
    endif;
}

PS Этот код будет работать если добавление в корзину на архивных страницах сделано через ajax и после добавления срабатывает штатное JS событие woo added_to_cart
 
Последнее редактирование:

Romakod

Новичок
никакого тут аякса нету, буржуи вас обманули ))
Чтобы на странице категорий менялся текст кнопки

Код:
add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
    if ( is_shop() || is_product_category()):
        ?>
            <script type="text/javascript">
jQuery(document).ready(function($) {
    $(document.body).on('added_to_cart', function(event, fragments, cart_hash, button) {
        button.text("В корзине");
    });

});
            </script>
        <?php
    endif;
}

PS Этот код будет работать если добавление в корзину на архивных страницах сделано через ajax и после добавления срабатывает штатное JS событие woo
 

Romakod

Новичок
Здравствуйте! Прошу прощения за небыстрый ответ. Спасибо вам за помощь! Дело в том что я использую тему Астра+Elementor. Ваш код работает на страницах магазина в теме Астра, но на страницах сделанных с помощью архива продуктов Elementor он не работает

В теме Астра https://cv87810-wordpress-5gfbk.tw1.ru/shop/
В Elementor https://cv87810-wordpress-5gfbk.tw1.ru/

В чём причина не пойму?
 

joy66

Опытный
Здравствуйте! Прошу прощения за небыстрый ответ. Спасибо вам за помощь! Дело в том что я использую тему Астра+Elementor. Ваш код работает на страницах магазина в теме Астра, но на страницах сделанных с помощью архива продуктов Elementor он не работает

В теме Астра https://cv87810-wordpress-5gfbk.tw1.ru/shop/
В Elementor https://cv87810-wordpress-5gfbk.tw1.ru/

В чём причина не пойму?

Вы просили чтоб код работал на странице архивов и категорий.
Это условие и задано. Сам код работает http://c2n.me/4kBxcq8
Но очевидно, что страница с elemrntor это просто страница и JS код не загружается.
Уберите проверку is_shop() || is_product_category()) и все заработает
Код:
add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(document.body).on('added_to_cart', function(event, fragments, cart_hash, button) {
button.text("В корзине");
});
});
</script>
<?php

}
 

Romakod

Новичок
Вы просили чтоб код работал на странице архивов и категорий.
Это условие и задано. Сам код работает http://c2n.me/4kBxcq8
Но очевидно, что страница с elemrntor это просто страница и JS код не загружается.
Уберите проверку is_shop() || is_product_category()) и все заработает
Код:
add_action('wp_footer','custom_jquery_add_to_cart_script');
function custom_jquery_add_to_cart_script(){
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(document.body).on('added_to_cart', function(event, fragments, cart_hash, button) {
button.text("В корзине");
});
});
</script>
<?php

}
Спасибо большое! Да, всё работает. Извиняюсь за моё категорическое незнание языков программирования. С помощью интернета какую-то функцию могу допилить но в целом код не пишу и учиться уже слишком поздно в мои 43. Хотя может быть я не прав. Ну да ладно это всё лирика. Ещё раз спасибо!
 
Сверху Снизу