Maks | formating files and add TO_DO

pull/36/head
Антон 1 month ago
parent 3c41995cb6
commit e3f48095fb
  1. 185
      wp-content/themes/cosmopet/global-functions/multisite-functions.php
  2. 229
      wp-content/themes/cosmopet/modules/footer/assets/js/footer.js

@ -87,112 +87,110 @@ if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') {
if (is_product() || is_shop() || is_cart()) {
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
jQuery(function($) {
$(document.body).on('added_to_cart', function(event, fragments, cart_hash, $button) {
var productId = $button.data('product_id') || '';
var quantity = $button.data('quantity') || 1;
var productName = $button.data('product_sku') ||
$button.closest('.product').find('.woocommerce-loop-product__title').text().trim() || 'Unknown';
var priceElement = $button.closest('.product').find('.price .amount').text().replace(/[^0-9.]/g, '') || '0.00';
var currency = '<?php echo get_woocommerce_currency(); ?>'; // Динамическая валюта
document.addEventListener('DOMContentLoaded', function() {
jQuery(function($) {
$(document.body).on('added_to_cart', function(event, fragments, cart_hash, $button) {
var productId = $button.data('product_id') || '';
var quantity = $button.data('quantity') || 1;
var productName = $button.data('product_sku') ||
$button.closest('.product').find('.woocommerce-loop-product__title').text().trim() || 'Unknown';
var priceElement = $button.closest('.product').find('.price .amount').text().replace(/[^0-9.]/g, '') || '0.00';
var currency = '<?php echo get_woocommerce_currency(); ?>'; // Динамическая валюта
// Событие для Facebook Pixel
fbq('track', 'AddToCart', {
content_ids: [productId],
content_type: 'product',
value: parseFloat(priceElement) * quantity,
currency: currency
});
// Событие для Facebook Pixel
fbq('track', 'AddToCart', {
content_ids: [productId],
content_type: 'product',
value: parseFloat(priceElement) * quantity,
currency: currency
// Событие для Google Analytics
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'currency': currency,
'value': parseFloat(priceElement) * quantity,
'items': [{
'item_id': productId,
'item_name': productName,
'price': parseFloat(priceElement),
'quantity': quantity
}]
}
});
});
// Событие для Google Analytics
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'add_to_cart',
'ecommerce': {
'currency': currency,
'value': parseFloat(priceElement) * quantity,
'items': [{
'item_id': productId,
'item_name': productName,
'price': parseFloat(priceElement),
'quantity': quantity
}]
}
});
});
});
});
});
</script>
<?php
}
<? }
// 2. Событие Purchase (Покупка)
if (is_wc_endpoint_url('order-received')) {
$order_id = absint(get_query_var('order-received'));
if (!$order_id) return;
// 2. Событие Purchase (Покупка)
if (is_wc_endpoint_url('order-received')) {
$order_id = absint(get_query_var('order-received'));
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order || ($order->get_status() !== 'processing' && $order->get_status() !== 'completed')) return;
$order = wc_get_order($order_id);
if (!$order || ($order->get_status() !== 'processing' && $order->get_status() !== 'completed')) return;
$items = [];
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$items[] = [
'item_id' => $product->get_id(),
'item_name' => $product->get_name(),
'price' => $product->get_price(),
'quantity' => $item->get_quantity()
];
}
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
fbq('track', 'Purchase', {
value: <?php echo $order->get_total(); ?>,
currency: '<?php echo $order->get_currency(); ?>',
content_ids: [<?php echo implode(',', array_column($items, 'item_id')); ?>],
content_type: 'product'
});
$items = [];
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$items[] = [
'item_id' => $product->get_id(),
'item_name' => $product->get_name(),
'price' => $product->get_price(),
'quantity' => $item->get_quantity()
];
}
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
fbq('track', 'Purchase', {
value: <?php echo $order->get_total(); ?>,
currency: '<?php echo $order->get_currency(); ?>',
content_ids: [<?php echo implode(',', array_column($items, 'item_id')); ?>],
content_type: 'product'
});
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'purchase',
'ecommerce': {
'currency': '<?php echo $order->get_currency(); ?>',
'value': <?php echo $order->get_total(); ?>,
'items': <?php echo json_encode($items); ?>
}
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'purchase',
'ecommerce': {
'currency': '<?php echo $order->get_currency(); ?>',
'value': <?php echo $order->get_total(); ?>,
'items': <?php echo json_encode($items); ?>
}
});
});
});
</script>
<?php
}
</script>
<?php
}
// 3. Событие AddPaymentInfo
if (is_checkout() && !is_wc_endpoint_url('order-received')) {
$currency = get_woocommerce_currency();
$cart_total = WC()->cart ? WC()->cart->get_total('edit') : 0;
// 3. Событие AddPaymentInfo
if (is_checkout() && !is_wc_endpoint_url('order-received')) {
$currency = get_woocommerce_currency();
$cart_total = WC()->cart ? WC()->cart->get_total('edit') : 0;
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
fbq('track', 'AddPaymentInfo', {
value: <?php echo $cart_total; ?>,
currency: '<?php echo $currency; ?>'
});
<script>
document.addEventListener('DOMContentLoaded', function() {
fbq('track', 'AddPaymentInfo', {
value: <?php echo $cart_total; ?>,
currency: '<?php echo $currency; ?>'
});
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'add_payment_info',
'ecommerce': {
'currency': '<?php echo $currency; ?>',
'value': <?php echo $cart_total; ?>
}
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'add_payment_info',
'ecommerce': {
'currency': '<?php echo $currency; ?>',
'value': <?php echo $cart_total; ?>
}
});
});
});
</script>
<?php
}
</script>
<? }
}
/* Передача контрибуции со страницы "Спасибо" */
@ -255,6 +253,7 @@ if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') {
}
}
// TO_DO: удалить, если не нужно
// Отключаем кэширование для страниц товаров
add_action('template_redirect', function() {
if (is_product()) {

@ -7,34 +7,35 @@
// Флаг для предотвращения множественной обработки
let isProcessing = false;
// TO_DO : вынести логику в модуль авторизации/регистрации
// Login
$('.login_popup').on('click', function(e){
$('.login_popup').on('click', function (e) {
e.preventDefault();
$('.login_modal').addClass('active');
});
$('.login_close').on('click', function(){
$('.login_close').on('click', function () {
$('.login_modal').removeClass('active');
$('.login_forms').removeClass('hide');
$('.login_success').addClass('hide');
$('.login_auth').addClass('hide');
isProcessing = false; // Сбрасываем флаг при закрытии
});
$('.login_back').on('click', function(){
if($(this).is('.disabled')) {
$('.login_back').on('click', function () {
if ($(this).is('.disabled')) {
return false;
}
$('.login_wrap .step').toggleClass('active');
});
$('.login_input input').on('input keyup', function(){
$('.login_input input').on('input keyup', function () {
$('.login_input').removeClass('error');
});
$('.js-get-code').on('click', function(){
$('.js-get-code').on('click', function () {
$('.login_input').removeClass('error');
var email = $('.js-input-email input').val();
$('.sended_email').text(email);
if(email === '') {
if (email === '') {
$('.js-input-email').addClass('error');
$('.js-input-email .login_error').text(localeValue == 'en_US' ? 'Enter your email' : 'Укажите Email');
return false;
@ -43,9 +44,9 @@
$.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: {action: 'email_validate', email:email},
success: function(data){
if(data['status'] === 'error') {
data: { action: 'email_validate', email: email },
success: function (data) {
if (data['status'] === 'error') {
$('.js-input-email').addClass('error');
$('.js-input-email .login_error').text(data['text']);
return false;
@ -57,63 +58,63 @@
});
}
});
$('.js-repeat-code').on('click', function(){
$('.js-repeat-code').on('click', function () {
$('.login_input').removeClass('error');
send_code();
});
function send_code(){
function send_code() {
$('.login_timer').show();
$('.js-repeat-code').hide();
$('.login_back').addClass('disabled');
// Timer
var seconds = 15;
var interval = setInterval(function() {
if (seconds > 0) {
seconds--;
$('.seconds').text(seconds);
} else {
clearInterval(interval);
$('.login_timer').hide();
$('.js-repeat-code').show();
$('.login_back').removeClass('disabled');
$('.seconds').text(15);
}
var interval = setInterval(function () {
if (seconds > 0) {
seconds--;
$('.seconds').text(seconds);
} else {
clearInterval(interval);
$('.login_timer').hide();
$('.js-repeat-code').show();
$('.login_back').removeClass('disabled');
$('.seconds').text(15);
}
}, 1000);
// Ajax отправка кода
$.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: {action: 'send_code', email: $('.js-input-email input').val()}
data: { action: 'send_code', email: $('.js-input-email input').val() }
});
}
// Проверка кода и регистрация/авторизация
$('.js-input-code input').on('input keydown keyup propertychange paste cut copy change', function(){
$('.js-input-code input').on('input keydown keyup propertychange paste cut copy change', function () {
var val = $(this).val();
var email = $('.js-input-email input').val();
if(val.length === 4 && !isProcessing) {
if (val.length === 4 && !isProcessing) {
isProcessing = true; // Устанавливаем флаг, чтобы предотвратить повторную обработку
$.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: {action: 'check_code', code: val, email: email},
success: function(data){
data: { action: 'check_code', code: val, email: email },
success: function (data) {
console.log('Server response:', data); // Отладка ответа сервера
if(data['status'] === 'success_reg') {
if (data['status'] === 'success_reg') {
$('.login_forms').addClass('hide');
$('.login_success').removeClass('hide');
$('.login_auth').addClass('hide'); // Гарантируем, что login_auth скрыт
if (typeof wc_checkout_params !== 'undefined') {
location.reload();
}
} else if(data['status'] === 'success_auth' && !$('.login_success').is(':visible')) {
} else if (data['status'] === 'success_auth' && !$('.login_success').is(':visible')) {
$('.login_forms').addClass('hide');
$('.login_auth').removeClass('hide');
$('.login_success').addClass('hide'); // Гарантируем, что login_success скрыт
if (typeof wc_checkout_params !== 'undefined') {
location.reload();
}
} else if(data['status'] === 'error') {
} else if (data['status'] === 'error') {
$('.js-input-code').addClass('error');
$('.js-input-code .login_error').text(data['text']);
isProcessing = false; // Сбрасываем флаг при ошибке
@ -124,17 +125,17 @@
isProcessing = false; // Сбрасываем флаг при неожиданном статусе
}
},
error: function(xhr, status, error) {
error: function (xhr, status, error) {
console.error('AJAX error:', error); // Отладка ошибок AJAX
$('.js-input-code').addClass('error');
$('.js-input-code .login_error').text(localeValue == 'en_US' ? 'Server error' : 'Ошибка сервера');
isProcessing = false; // Сбрасываем флаг при ошибке AJAX
}
});
}
}
});
$('.email_link_form').on('submit', function(e){
$('.email_link_form').on('submit', function (e) {
e.preventDefault();
$('.cabinet-card_linked-email .error').remove();
var data = $(this).serializeArray();
@ -142,9 +143,9 @@
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: data,
success: function(data){
if(data['error']) {
$('.cabinet-card_linked-email').append('<div class="cabinet-card__status cabinet-card__status--cancelled error">'+data['error']+'</div>');
success: function (data) {
if (data['error']) {
$('.cabinet-card_linked-email').append('<div class="cabinet-card__status cabinet-card__status--cancelled error">' + data['error'] + '</div>');
} else {
location.reload();
}
@ -160,96 +161,96 @@ function checkImage(imageSrc, good) {
}
// header
toggleOpenX('.lang', '.lang__open', '.lang__list', '.lang__content', false);
toggleHeader('#pc-menu','.header__menu-block','.header__pc-menu', '.white', 'white');
toggleHeader('#phone-menu','.header__menu-block','.header__phone-menu', '.white', 'white');
toggleHeader('#pc-menu', '.header__menu-block', '.header__pc-menu', '.white', 'white');
toggleHeader('#phone-menu', '.header__menu-block', '.header__phone-menu', '.white', 'white');
// header
function initOverlay(){
function initOverlay() {
// overlay
let products = document.querySelectorAll('.product__item');
products.forEach(productItem => {
let button = productItem.querySelector('.open-overlay'),
overlay = productItem.querySelector('.product-item__overlay');
if (button) {
button.onclick = function (e) {
document.querySelectorAll('.product__item').forEach(e => {
if (e.classList.contains('active')) {
e.classList.remove('active');
}
});
document.querySelectorAll('.product-item__overlay').forEach(e => {
if (e.classList.contains('active')) {
e.classList.remove('active');
}
});
let products = document.querySelectorAll('.product__item');
productItem.classList.toggle('active');
overlay.classList.toggle('active');
products.forEach(productItem => {
let button = productItem.querySelector('.open-overlay'),
overlay = productItem.querySelector('.product-item__overlay');
if (button) {
button.onclick = function (e) {
document.querySelectorAll('.product__item').forEach(e => {
if (e.classList.contains('active')) {
e.classList.remove('active');
}
});
document.querySelectorAll('.product-item__overlay').forEach(e => {
if (e.classList.contains('active')) {
e.classList.remove('active');
}
});
productItem.classList.toggle('active');
overlay.classList.toggle('active');
}
}
}
})
// overlay
})
// overlay
}
initOverlay()
function initSelect(){
function initSelect() {
// select
toggleOpenX('.select', '.select__state' , '.state__content', '.state__block', true);
// select
toggleOpenX('.select', '.select__state', '.state__content', '.state__block', true);
let selects = document.querySelectorAll('.select');
let selects = document.querySelectorAll('.select');
selects.forEach(select => {
let state = select.querySelector('.select__state'),
content = select.querySelector('.state__block'),
buttons = select.querySelectorAll('.state__button');
buttons.forEach(e => {
let button = e;
selects.forEach(select => {
let state = select.querySelector('.select__state'),
content = select.querySelector('.state__block'),
buttons = select.querySelectorAll('.state__button');
e.onclick = function (event) {
event.preventDefault();
buttons.forEach(e => {
let button = e;
buttons.forEach(element => {
if (element.classList.contains('active')) {
element.classList.remove('active');
}
})
let text = e.textContent.trim();
state.value = text;
button.classList.add('active');
content.style.height = 0;
select.classList.remove('active');
}
e.onclick = function (event) {
event.preventDefault();
buttons.forEach(element => {
if (element.classList.contains('active')) {
element.classList.remove('active');
}
})
let text = e.textContent.trim();
state.value = text;
button.classList.add('active');
content.style.height = 0;
select.classList.remove('active');
}
})
})
})
// select
// select
}
initSelect()
function toggleOpenX(mainElement, buttonElement ,heightElement, contentElement, close) {
function toggleOpenX(mainElement, buttonElement, heightElement, contentElement, close) {
let elements = document.querySelectorAll(mainElement);
elements.forEach(e => {
let thisMainElement = e,
thisButtonElement = e.querySelector(buttonElement),
thisHeightElement = e.querySelector(heightElement),
thisContentElement = e.querySelector(contentElement);
thisContentElement = e.querySelector(contentElement);
thisButtonElement.onclick = function (e) {
let height = thisHeightElement.clientHeight;
@ -259,24 +260,24 @@ function toggleOpenX(mainElement, buttonElement ,heightElement, contentElement,
if (e.classList.contains('active')) {
e.classList.remove('active');
e.querySelector(contentElement).style.height = null
}
}
})
}
if (!thisMainElement.classList.contains('active')) {
thisContentElement.style.height = `${height}px`;
thisMainElement.classList.add('active');
}else{
} else {
thisContentElement.style.height = null;
thisMainElement.classList.remove('active');
}
}
});
}
var menu_opened = false;
function toggleHeader(button, content, blockheight, removeBlock, removeClass) {
let thisButton = document.querySelector(button),
let thisButton = document.querySelector(button),
thisContent = document.querySelector(content),
thisRemoveBlock = document.querySelector(removeBlock) || '',
thisBlockheight = document.querySelector(blockheight);
@ -286,12 +287,12 @@ function toggleHeader(button, content, blockheight, removeBlock, removeClass) {
if (!thisContent.classList.contains('open')) {
thisContent.style.height = `${height}px`;
thisContent.classList .add('open');
thisContent.classList.add('open');
if (removeBlock) {
thisRemoveBlock.classList.remove(removeClass);
}
}else{
} else {
thisContent.style.height = null;
thisContent.classList.remove('open');
@ -309,16 +310,16 @@ if (document.querySelector('.header').classList.contains('white')) {
window.addEventListener("scroll", function (e) {
let header = document.querySelector('.header');
let scroll = window.scrollY;
if(!menu_opened){
if (scroll >= 25) {
header.classList.remove('white')
}else{
header.classList.add('white')
if (!menu_opened) {
if (scroll >= 25) {
header.classList.remove('white')
} else {
header.classList.add('white')
}
}
}
});
}
// scroll

Loading…
Cancel
Save