Сделал плагин для добавления монограмм к товарам вукоммерс. Использую хуки для добавления данных монограммы в мета данные товара, товары вариативные. Вот код в functions.php
//Monogramma
add_filter('woocommerce_add_cart_item_data', 'MTWC_add_item_data', 10, 3);
function MTWC_add_item_data($cart_item_data, $product_id, $variation_id)
{
if( isset($_REQUEST['mono_check']))
{
$cart_item_data['mono_check'] = $_REQUEST['mono_check'];
if( isset($_REQUEST['mono_symbols']))
{
$cart_item_data['mono_symbols'] = $_REQUEST['mono_symbols'];
}
if( isset($_REQUEST['mono_type']))
{
$cart_item_data['mono_type'] = $_REQUEST['mono_type'];
}
}
return $cart_item_data;
}
add_filter('woocommerce_get_item_data', 'MTWC_add_item_meta', 10, 2);
function MTWC_add_item_meta($item_data, $cart_item)
{
if(array_key_exists('mono_check', $cart_item))
{
if($cart_item['mono_check'] == "on")
$custom_details = "Есть";
else
$custom_details = "Нет";
$item_data[] = array(
'key' => 'Монограмма',
'value' => $custom_details.", Тип монограммы: ".$cart_item['mono_type'].", Символы: ".$cart_item['mono_symbols'],
);
}
return $item_data;
}
add_action( 'woocommerce_checkout_create_order_line_item', 'MTWC_add_custom_order_line_item_meta', 10, 4 );
function MTWC_add_custom_order_line_item_meta($item, $cart_item_key, $values, $order)
{
if(array_key_exists('mono_check', $values))
{
if($values['mono_check'] == "on")
$custom_details = "Есть";
else
$custom_details= "Нет";
$item->add_meta_data('Монограмма', $custom_details.", Тип монограммы: ".$values['mono_type'].", Символы: ".$values['mono_symbols']);
}
}
Как мне изменить код для изменения цены товара?
И еще не связано с данным вопросом, но все же хотелось бы подсказки в этом...
Данные монограммы иногда не передаются. То есть хук не отлавливает передающиеся данные, касающиеся моего плагина.
Вот код самой области плагина, он добавляется шорткодом прямо перед кнопкой добавления в корзину, то есть находится внутри формы отправки в корзину.
<?php if (count($this->data['preview']) != 0): ?>
<div class="adv preview">
<input type="checkbox" name="mono_check" onclick="isChecked(this)"/>
<label for="mono_check">Добавить монограмму</label>
<div class="hidden overlay" onclick="overlayShowHide()"
style="position: fixed; background: rgba(0, 0, 0, 0.5); top: 0; bottom: 0; left: 0; right: 0; z-index: 9999; ">
<div class="prev-panel" onclick="event.stopPropagation()">
<div class="close_btn" onclick="overlayShowHide()">X</div>
<h2>Предпросмотр</h2>
<div class="monos">
<div class="mono_btn mono_btn_1"
style="background-image: url('<? echo $this->plugin_url ?>/monos/1.png')"
onclick="selectMono(this)" data-count="2" data-type="1"><p>R</p>
<p>A</p></div>
<div class="mono_btn mono_btn_2"
style="background-image: url('<? echo $this->plugin_url ?>/monos/2.png')"
onclick="selectMono(this)" data-count="2" data-type="2"><p>A</p>
<p>B</p></div>
<div class="mono_btn mono_btn_3"
style="background-image: url('<? echo $this->plugin_url ?>/monos/3.png')"
onclick="selectMono(this)" data-count="1" data-type="3"><p>M</p></div>
<div class="mono_btn mono_btn_4"
style="background-image: url('<? echo $this->plugin_url ?>/monos/4.png')"
onclick="selectMono(this)" data-count="1" data-type="4"><p>M</p></div>
<div class="mono_btn mono_btn_5"
style="background-image: url('<? echo $this->plugin_url ?>/monos/5.png')"
onclick="selectMono(this)" data-count="3" data-type="5"><p>M</p>
<p>A</p>
<p>G</p></div>
<div class="mono_btn mono_btn_6" onclick="selectMono(this)" data-count="2" data-type="6"><p>S&P</p>
</div>
<div class="mono_btn mono_btn_7" onclick="selectMono(this)" data-count="1" data-type="7"><p>A</p>
</div>
</div>
<p class="input_text">Введите 1 символ</p>
<input name="mono_symbols" class="symbols"
type="text" onchange="symbol(this)"
onkeyup="this.value = this.value.toUpperCase();"
maxlength="3"/> <input name="mono_type"
class="mono_type hidden"
type="text"/>
<div class="prev_image" style="background-image: url(<? echo $this->data['preview']['prev_src'] ?> )"
onclick="look(this)">
<div style="background-image: url('<? echo $this->plugin_url ?>monos/2.png'); left: <?php echo $this->data['preview']['prev_X'] ?>; top: <?php echo $this->data['preview']['prev_Y'] ?>; width: <?php echo $this->data['preview']['preview_size'] ?>px" class="draggable"/>
</div>
</div>
</div>
</div>
</div>
А вот ниже будет код внутри шаблона "variation-add-to-cart-button.php".
На моем сайте все нормально работает, но на сайте, в который закинул плагин, отказывается нормально работать. У меня сайт по минимум загружен плагинами, стоит только вукомерс и пару вспомогательных плагинов, не касающихся вукоммерс, а вот сайт друга использует кучу плагинов, которые напрямую связаны с вукоммерс. Как понять в чем проблема? Он не отправляет мета данные монограммы при отправке товара.
При изменении onclick кнопки отправки товара в корзину, начал отправлять данные, но не всегда, иногда не отправляет. понять почему так происходит не получилось. Плагины только учусь писать, строго не судите.
<?
require_once ABSPATH . 'wp-admin/includes/plugin.php';
if(is_plugin_active( 'monogramm-to-woocommerce/monogramm-to-woocommerce.php' )) {
echo do_shortcode('[show_preview]');
}
?>
<script>
document.querySelector('form.variations_form.cart [type="submit"]').onclick = function (e) {
e.preventDefault();
document.querySelector('form.variations_form.cart').submit();
}
</script>
Уже третий день бьюсь наж этим, не могу разобраться. Если каких то данных не хватает, то пишите, все скину.