PHP-скрипт WooCommerce иногда работает, иногда нетPhp

Кемеровские программисты php общаются здесь
Ответить
Гость
 PHP-скрипт WooCommerce иногда работает, иногда нет

Сообщение Гость »

Я создал плагин WooCommerce, который, помимо прочего, позволяет покупателю заказать образец продукта, который он просматривает в данный момент. Иногда эта функция работает, иногда нет. Я вижу, как данные поступают в файл function.php, но не могу понять, почему некоторые продукты добавляют образец в корзину, а другие — нет. Прежде чем я поделюсь соответствующим кодом, имейте в виду, что образец — это реальный продукт в области администрирования WooCommerce. Артикул образца основан на артикуле продукта.

Код: Выделить всё

functions.php

Код: Выделить всё

add_action('wp_ajax_order_sample', 'order_sample');
add_action('wp_ajax_nopriv_order_sample', 'order_sample');

function order_sample() {
$cart_item_key = null;

if ((isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'nonce_custom_atc'))
&& (isset($_POST['product_id']) && $_POST['product_id'] > 0)
&& (isset($_POST['quantity']) && $_POST['quantity'] > 0)
&& (isset($_POST['cost']) && $_POST['cost'] > 0)) {
$cart_item_key = wc()->cart->add_to_cart(
intval($_POST['product_id']),
intval($_POST['quantity']),
0,
array(),
array(
'cost'=>isset($_POST['cost']) ? floatval($_POST['cost']) : '',
'thumbnail_url'=>isset($_POST['thumbnail_url']) ? esc_attr($_POST['thumbnail_url']) : '',
'sku'=>isset($_POST['product_sku']) ? sanitize_text_field($_POST['product_sku']) : '', // we do this to specifically set the sku on the order to the sample sku and NOT the product sku
)
);
}
write_log(create_message('sku: ' . $_POST['sku'])); // lets us confirm that the info came through from the AJAX call
wp_die(isset($cart_item_key) && $cart_item_key ? "Added to cart!" : "Error: not added!");
}

function write_log($message) {
$logger = wc_get_logger();
$logger->debug($message, array('source' => 'visualizer'));
}

function create_message($item) {
return boolval(!empty($item)) ? print_r($item, true) : 'nothing to see here!';
}

Код: Выделить всё

visualizer-modal.php

Код: Выделить всё

global $product;
$id = trim($product->get_id());

$sku = trim($product->get_sku());
$sample_sku = "";
$product_sku = "";

if (str_starts_with($sku, "S-")) {
$sample_sku = $sku;
$product_sku = str_replace("S-", "", $sku);
} else {
$product_sku = $sku;
$sample_sku = "S-" . $sku;
}
// this lets us make sure that we get the sample sku and the product sku into the right places

$sample_id = trim($GLOBALS['wpdb']->get_results("SELECT `product_id` FROM `wp_wc_product_meta_lookup` WHERE `sku` = '" . $sample_sku .  "'")[0]->product_id);







Код: Выделить всё

js/order-sample.js

Код: Выделить всё

document.addEventListener('DOMContentLoaded', () => {
if (typeof wc_params_custom === 'undefined') {
return false;
}

const ORDER_SAMPLE_BUTTON = document.getElementById('order-sample');
const SAMPLE_SKU = document.getElementById('sample-sku').innerHTML.trim();
const SAMPLE_ID = document.getElementById('sample-id').innerHTML.trim();
const CART_THUMBNAIL_URL = document.getElementById('thumbnail-url').innerHTML.trim();
const GOLD_COLOR = '#DEC48D';
const COST = 5;

ORDER_SAMPLE_BUTTON.addEventListener('click', (e) => {
e.preventDefault();

const ORDER = {
action: 'order_sample',
nonce: wc_params_custom.nonce,
product_id: SAMPLE_ID,
product_sku: SAMPLE_SKU,
quantity: 1,
cost: COST.toFixed(2),
thumbnail_url: CART_THUMBNAIL_URL,
};

$.ajax({
type: 'POST',
url: wc_params_custom.ajax_url,
data: ORDER,
success: (response) => {
console.log('response: ', response);
ORDER_SAMPLE_BUTTON.innerHTML = 'Added to Cart!';
ORDER_SAMPLE_BUTTON.style.backgroundColor = GOLD_COLOR;
setTimeout(() => {
location.reload();
}, 1000);
},
error: (error) => {
console.error('error: ', error);
},
});
});
});
Я также проверил и перепроверил образцы продуктов в области администрирования WooCommerce и не вижу никакой разницы в том, как настроены нерабочие образцы по сравнению с рабочими образцами. Заполнены одни и те же поля, нажаты одни и те же переключатели и т. д. Однако что-то явно не так, потому что один и тот же код добавит в корзину одни образцы, а другие нет.
Есть ли у кого-нибудь идеи, что здесь не совсем так? Спасибо за ваше время!

Подробнее здесь: https://stackoverflow.com/questions/783 ... etimes-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»