Использование действия wordpress для изменения содержимого div - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь изменить содержимое div каждый раз, когда что-то добавляется в корзину woocommerce. Для этого примера содержимое будет соответствовать текущей общей стоимости корзины.

Итак, сначала я создал простой плагин под названием «test-cart-value», который содержит следующий код:

<?php

 function test_cart_value() {
    echo "<div>" . WC()->cart->total . "</div>";
}

add_shortcode('test_cart_value_shortcode', 'test_cart_value');

Это прекрасно работает, где бы я ни размещал шорткод, я получаю текущее значение корзины после загрузки страницы.

Итак, теперь я хочу, чтобы это печатное значение обновлялось каждый раз, когда что-то добавлялось в корзину, без перезагрузки страницы. Идея состояла в том, чтобы использовать ловушку действия woocommerce_cart_updated и вызывать функцию - поэтому каждый раз, когда что-то в корзине меняется, отображается новое значение корзины:

function action_woocommerce_cart_updated() { 
    test_cart_value();
}; 

// add the action 
add_action( 'woocommerce_cart_updated', 'action_woocommerce_cart_updated', 10, 0 ); 

Проблема в том, что теперь я не могу динамически добавить товары в корзину. Всякий раз, когда я нажимаю кнопку «Добавить в корзину», анимация загрузки загружается вечно. Как это сделать правильно? Я пробовал разные подходы с Ajax и разными хуками, но пока ничего не получалось.

Есть идеи? Заранее спасибо!

Редактировать:

Так что я попробовал это как мой код плагина

function test_cart_value() { 
    echo "<div id='cart_test'>" . WC()->cart->total . "</div>";
}

add_shortcode('test_cart_value_shortcode', 'test_cart_value');


// define the actions for the two hooks created, first for logged in users and the next for logged out users
add_action("woocommerce_cart_updated", "cart_update");

// define the function to be fired for logged in users
function cart_update() {

    $cart = WC()->cart->total;
    $result['type'] = "success";
    $result['new_cart'] = $cart;

    $result = json_encode($result);
    //if I uncomment the "die" function, the page won't load
//   die();
}

// Fires after WordPress has finished loading, but before any headers are sent.
add_action( 'init', 'script_enqueuer' );

function script_enqueuer() {

   // Register the JS file with a unique handle, file location, and an array of dependencies
   wp_register_script( "test_script", plugin_dir_url(__FILE__).'test_script.js', array('jquery') );

   // localize the script to your domain name, so that you can reference the url to admin-ajax.php file easily
   wp_localize_script( 'test_script', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));        

   // enqueue jQuery library and the script you registered above
   wp_enqueue_script( 'jquery' );
   wp_enqueue_script( 'test_script' );
}

И мой test_script. js код:

jQuery(document).ready( function() {
   jQuery(".ajax_add_to_cart").click( function(e) {
      e.preventDefault(); 
      jQuery.ajax({
         type : "post",
         dataType : "json",
         url : myAjax.ajaxurl,
         data : {action: "cart_update"},
         success: function(response) {
            if(response.type == "success") {
               jQuery("#cart_test").html(response.new_cart);
            }
            else {
               alert("Your like could not be added");
            }
         }
      });
   });
});

Поэтому я подумал, что функция cart_update () должна срабатывать при нажатии кнопки «ajax_add_to_cart», но я получаю ошибку 400.

Есть идеи? Спасибо!

1 Ответ

0 голосов
/ 19 апреля 2020

заставил его работать с woocommerce_add_to_cart_fragments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...