на сайте WordPress сделана корзина. Там, нажав на кнопку, на сервер отправляется запрос ajax, обработка проходит PHP. Корзина для хранения - повар ie. Время показывает, что основной тормоз возникает именно при передаче данных с js на PHP и наоборот. Js и PHP работают нормально. Отправляет форму на PHP. Назад - JSON строка.
Я читаю следующие темы:
Но я уже подготовил сайт и боюсь использовать SHORTIN, потому что я не знаю, что может произойти с другими функциями wp. Я пытался использовать themes / my-theme / custom. php вместо admin- ajax. php, но у него нет контекста. Мой повар ie не работает правильно без COOKIEPATH.
Я думаю, может быть, я боюсь SHORTINT из ничего? Или что я делаю неправильно во втором варианте?
Мой код: function.php
add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
function myajax_data(){
wp_localize_script('main', 'myajax',
array(
'url' => admin_url('admin-ajax.php'),
'testurl' => get_home_url(null, 'wp-content/themes/my-theme/test.php')
)
);
}
main.js
$('.bars-addproduct').on('submit', function (e) {
e.preventDefault();
$form = $(this).serializeArray();
$.ajax({
url: myajax.testurl,
type: 'POST',
data: {
action: "addProduct",
form: $form,
},
success: function (res) {
console.log(res);
}
});
});
test.php
<?php
$name_cookie_basket = 'users_basket';
$cookies_time = time() + 60*24; //24min
$res = '';
$form = $_POST['form'];
foreach ($form as $field) {
switch ($field['name']) {
case 'productID':
$productID = $field['value'];
break;
case 'name':
$name = $field['value'];
break;
case 'price':
$price = $field['value'];
break;
case 'count':
$count = $field['value'];
break;
case 'amount':
$amount = $field['value'];
break;
case 'ownerID':
$ownerID = $field['value'];
break;
}
}
$cookie_basket = json_decode(stripslashes($_COOKIE[$name_cookie_basket]), true);
$products = $cookie_basket['products'];
$isModify = false;
$i = 0;
if (!$isModify) {
// если это не редактирование, а добавление
//Сначала проверим данные
if (((is_numeric($productID)) || ($productID == '')) &&
((is_numeric($price)) || ($price == '')) &&
((is_numeric($count)) || ($count == '')) &&
((is_numeric($amount)) || ($amount == '')) &&
((is_numeric($ownerID))) &&
((($amount != '') && (intval($amount) >= 0) && ($count == '')) || //это пополнение депозита
(($productID != '') && (intval($count) >= 0) && ($amount == ''))
)
){
//если все ок, добавляем
$newProduct = [
'productID' => $productID,
'name' => $name,
'price' => $price,
'count' => intval($count),
'amount' => intval($amount),
'ownerID' => $ownerID,
];
// add_row('bars_products', $newProduct, 'user_' . strval($current_user->ID));
array_push($products, $newProduct);
$res .= 'success added'."\n";
} else {
//если не ок
$res = 'fail';
}
}
$cookie_basket['products'] = $products;
$success = setcookie($name_cookie_basket, json_encode($cookie_basket), $cookies_time, '/');
if ($success) {
$res = json_encode([$products]);
} else {
$res = 'fail';
}
echo $res;
wp_die();
// }