Вопрос о плагине: добавление веб-крючка приводит к тому, что «добавить в корзину» визуально застревает с вращающимися точками - PullRequest
0 голосов
/ 17 апреля 2019

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

Тем не менее он ведет себя по-разному, когда нажимают кнопку добавления в корзину на главном экране магазина и настраница продукта.

На главном экране магазина кнопка появляется в нажатом состоянии, и на ней появляются вращающиеся точки, как будто операция AJAX не была завершена.Однако, вопреки тому, что можно сделать вывод, продукт успешно добавлен в корзину, в то время как подключенная функция вообще не выполняется.

На странице продукта, с другой стороны, на которой нет AJAXПри включении в кнопку «Добавить в корзину» все работает нормально, выполняется функция, подключенная к woocommerce_add_to_cart, и ее аргумент выводится на консоль.

Изображение проблемы

a) Я снял галочку «Включить кнопки добавления AJAX в корзину в архивах» в разделе Woocommerce >> Настройки >> Продукты, и это помогло: поведение кнопки «добавить в корзину» на главном экране магазина и на экране продукта былото же самое и подключенная функция была успешно выполнена без кнопки «добавить в корзину», показывающей вращающиеся точки.Тем не менее, мне не нравится это решение, так как я был главным экраном магазина с возможностями AJAX в кнопке «добавить в корзину».

Страница настроек Woocommerce

б) Я деактивировал свой плагин.Очевидно, что это позволило нормальное поведение.Целью этого было просто показать, что причиной проблемы было ее присутствие.

d) Я прокомментировал вызов add_action в моем плагине.Это доказывает, что существует некоторая коллизия между включением подключенной функции и отсутствием нормального отклика на главном экране магазина.

e) Я деактивировал любой активный плагин, кроме WooCommerce и моего плагина, ноэто ничего не изменило в проблемном поведении «добавить в корзину».

f) Я ищу глупую проблему в коде плагина, такую ​​как существование «?>» или его исчезновение что-то изменили.Но нет.Это не помогло.

Вот код моего плагина:

<?php
/**
* @package CartNotifyPlugin
*/
/*
  plugin Name: JustAName
  plugin URI: http://example.com/
  Description: Just a Plugin
  Version: 1.0.0
  Author: Myself
  Author URI: http://example.com
  License: GPLv2 or later
  Text Domain: JustAName
*/

/*
This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

if (! function_exists('add_action'))
{
  echo "Site is incompatible with this plugin";
  exit;
}

function CallAPI($method, $url, $data = false)
{
    $curl = curl_init();

    switch ($method)
    {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, 1);

            if ($data)
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_PUT, 1);
            break;
        default:
            if ($data)
                $url = sprintf("%s?%s", $url, http_build_query($data));
    }

    // Optional Authentication:
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($curl, CURLOPT_USERPWD, "username:password");

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($curl);

    curl_close($curl);

    return $result;
}

/*function crt_display_cart_id($md5,$product_id, $variation_id, $variation, $cart_item_data) {
    echo '<script>console.log("cart_id='.$md5.'");</script>';
  $data_array = array('action' => 'cart_created',
                      'cart_id' => $md5);
  CallAPI("POST","https://webhook.site/e3909f11-5a1e-4330-8cac-263aefe492be",json_encode($data_array));
  return $md5;
}*/

//add_filter('woocommerce_cart_id', crt_display_cart_id, 10, 5);
add_action('woocommerce_add_to_cart', 'crt_add_to_cart',1000,3);
function crt_add_to_cart($array, $int1, $int2)
{
  echo '<script>console.log("cart_id='.$array.'");</script>';
}

?>

Я ожидаю, что запуск моего плагина приведет к консольному журналу перехваченной функции arg, тогда как "add toКнопка «Корзина» завершит свою работу, визуально заменив две кнопки с надписями: «добавить в корзину» и «просмотреть корзину ->»

Нормальное исполнение на главной странице магазина

Обычное исполнение на странице товара в магазине

...