Я создал плагин, который должен обрабатывать веб-крючок 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Кнопка «Корзина» завершит свою работу, визуально заменив две кнопки с надписями: «добавить в корзину» и «просмотреть корзину ->»
Нормальное исполнение на главной странице магазина
Обычное исполнение на странице товара в магазине