|
|
|
@ -1,6 +1,8 @@ |
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
/* Start | Работа с проверкой мультисайтовости и стендов */ |
|
|
|
|
global $site_env; |
|
|
|
|
$site_env = new SiteEnvironment(); // глобальный объект выполняющий проверку по домену |
|
|
|
|
class SiteEnvironment |
|
|
|
|
{ |
|
|
|
|
public string $mode; |
|
|
|
@ -22,11 +24,14 @@ class SiteEnvironment |
|
|
|
|
$this->site_mode = $config['mode']; |
|
|
|
|
$this->site_region = $config['region']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add_filter('timber/twig', function (\Twig\Environment $twig) { |
|
|
|
|
$site_env = new SiteEnvironment(); |
|
|
|
|
global $site_env; |
|
|
|
|
|
|
|
|
|
$twig->addGlobal('site_region', $site_env->site_region); |
|
|
|
|
$twig->addGlobal('site_mode', $site_env->site_mode); |
|
|
|
|
$twig->addGlobal('header_scripts', get_field('header_scripts', 'option')); // со страницы "Общих настроек контента ACF" |
|
|
|
@ -82,67 +87,12 @@ function custom_canonical_url() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
add_action('woocommerce_thankyou', 'send_purchase_to_metrika'); |
|
|
|
|
function send_purchase_to_metrika($order_id) { |
|
|
|
|
if (!$order_id) return; // Проверка, что заказ существует |
|
|
|
|
|
|
|
|
|
$order = wc_get_order($order_id); |
|
|
|
|
if ($order->get_status() !== 'processing' && $order->get_status() !== 'completed') return; // Отправляем только для оплаченных заказов |
|
|
|
|
|
|
|
|
|
$items = []; |
|
|
|
|
foreach ($order->get_items() as $item) { |
|
|
|
|
$product = $item->get_product(); |
|
|
|
|
$items[] = [ |
|
|
|
|
'id' => $product->get_id(), |
|
|
|
|
'name' => $product->get_name(), |
|
|
|
|
'price' => $product->get_price(), |
|
|
|
|
'quantity' => $item->get_quantity() |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Получаем валюту заказа |
|
|
|
|
$currency = $order->get_currency(); |
|
|
|
|
?> |
|
|
|
|
<script> |
|
|
|
|
window.dataLayer = window.dataLayer || []; |
|
|
|
|
dataLayer.push({ |
|
|
|
|
'ecommerce': { |
|
|
|
|
'purchase': { |
|
|
|
|
'actionField': { |
|
|
|
|
'id': '<?php echo $order_id; ?>',
|
|
|
|
|
'revenue': '<?php echo $order->get_total(); ?>',
|
|
|
|
|
'currency': '<?php echo $currency; ?>'
|
|
|
|
|
}, |
|
|
|
|
'products': <?php echo json_encode($items); ?> |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Яндекс.Метрика |
|
|
|
|
yaCounter96481053.reachGoal('purchase', { |
|
|
|
|
'order_id': '<?php echo $order_id; ?>',
|
|
|
|
|
'order_price': '<?php echo $order->get_total(); ?>',
|
|
|
|
|
'currency': '<?php echo $currency; ?>',
|
|
|
|
|
'items': <?php echo json_encode($items); ?> |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Facebook Pixel |
|
|
|
|
fbq('track', 'Purchase', { |
|
|
|
|
value: <?php echo $order->get_total(); ?>,
|
|
|
|
|
currency: '<?php echo $currency; ?>',
|
|
|
|
|
content_ids: [<?php echo implode(',', array_column($items, 'id')); ?>],
|
|
|
|
|
content_type: 'product' |
|
|
|
|
}); |
|
|
|
|
</script> |
|
|
|
|
<?php |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Добавление событий контрибуции для FP Pixel |
|
|
|
|
* только на боевом сайте АЕ |
|
|
|
|
* */ |
|
|
|
|
if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') { |
|
|
|
|
/* Передача просто по url */ |
|
|
|
|
add_action('wp_footer', 'add_facebook_pixel_events'); |
|
|
|
|
function add_facebook_pixel_events() { |
|
|
|
|
// 1. Событие AddToCart (Добавление в корзину) |
|
|
|
@ -185,7 +135,7 @@ if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') { |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
</script> |
|
|
|
|
</script> |
|
|
|
|
<?php |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -255,7 +205,66 @@ if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') { |
|
|
|
|
</script> |
|
|
|
|
<?php |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Передача контрибуции со страницы "Спасибо" */ |
|
|
|
|
add_action('woocommerce_thankyou', 'send_purchase_to_metrika'); |
|
|
|
|
function send_purchase_to_metrika($order_id) |
|
|
|
|
{ |
|
|
|
|
if (!$order_id) |
|
|
|
|
return; // Проверка, что заказ существует |
|
|
|
|
|
|
|
|
|
$order = wc_get_order($order_id); |
|
|
|
|
if ($order->get_status() !== 'processing' && $order->get_status() !== 'completed') |
|
|
|
|
return; // Отправляем только для оплаченных заказов |
|
|
|
|
|
|
|
|
|
$items = []; |
|
|
|
|
foreach ($order->get_items() as $item) { |
|
|
|
|
$product = $item->get_product(); |
|
|
|
|
$items[] = [ |
|
|
|
|
'id' => $product->get_id(), |
|
|
|
|
'name' => $product->get_name(), |
|
|
|
|
'price' => $product->get_price(), |
|
|
|
|
'quantity' => $item->get_quantity() |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Получаем валюту заказа |
|
|
|
|
$currency = $order->get_currency(); |
|
|
|
|
?> |
|
|
|
|
<script> |
|
|
|
|
window.dataLayer = window.dataLayer || []; |
|
|
|
|
dataLayer.push({ |
|
|
|
|
'ecommerce': { |
|
|
|
|
'purchase': { |
|
|
|
|
'actionField': { |
|
|
|
|
'id': '<?php echo $order_id; ?>',
|
|
|
|
|
'revenue': '<?php echo $order->get_total(); ?>',
|
|
|
|
|
'currency': '<?php echo $currency; ?>'
|
|
|
|
|
}, |
|
|
|
|
'products': <?php echo json_encode($items); ?> |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Яндекс.Метрика |
|
|
|
|
yaCounter96481053.reachGoal('purchase', { |
|
|
|
|
'order_id': '<?php echo $order_id; ?>',
|
|
|
|
|
'order_price': '<?php echo $order->get_total(); ?>',
|
|
|
|
|
'currency': '<?php echo $currency; ?>',
|
|
|
|
|
'items': <?php echo json_encode($items); ?> |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// Facebook Pixel |
|
|
|
|
fbq('track', 'Purchase', { |
|
|
|
|
value: <?php echo $order->get_total(); ?>,
|
|
|
|
|
currency: '<?php echo $currency; ?>',
|
|
|
|
|
content_ids: [<?php echo implode(',', array_column($items, 'id')); ?>],
|
|
|
|
|
content_type: 'product' |
|
|
|
|
}); |
|
|
|
|
</script> |
|
|
|
|
<?php |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Отключаем кэширование для страниц товаров |
|
|
|
@ -266,46 +275,3 @@ add_action('template_redirect', function() { |
|
|
|
|
header('Expires: 0'); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add_action('wp_head', 'custom_hreflang_shop', 6); |
|
|
|
|
function custom_hreflang_shop() { |
|
|
|
|
if (!is_admin() && function_exists('pll_get_post') && function_exists('pll_languages_list')) { |
|
|
|
|
// Защищаем от дублирования |
|
|
|
|
static $hreflang_added = false; |
|
|
|
|
if ($hreflang_added) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
$hreflang_added = true; |
|
|
|
|
|
|
|
|
|
// Домены для языков |
|
|
|
|
$ru_domain = 'https://cosmopet-test-ru.cp.good-production.xyz'; |
|
|
|
|
$en_domain = 'https://cosmopet-test-ae.cp.good-production.xyz'; |
|
|
|
|
|
|
|
|
|
// Текущий пост/страница |
|
|
|
|
$current_post_id = get_the_ID(); |
|
|
|
|
if (!$current_post_id) { |
|
|
|
|
// Для случаев, когда get_the_ID() не работает (например, архивы) |
|
|
|
|
$current_path = trailingslashit($_SERVER['REQUEST_URI']); |
|
|
|
|
$query_string = $_SERVER['QUERY_STRING'] ? '?' . $_SERVER['QUERY_STRING'] : ''; |
|
|
|
|
$ru_url = $ru_domain . $current_path . $query_string; |
|
|
|
|
$en_url = $en_domain . $current_path . $query_string; |
|
|
|
|
} else { |
|
|
|
|
// Получаем переводы поста/страницы |
|
|
|
|
$ru_post_id = pll_get_post($current_post_id, 'ru'); |
|
|
|
|
$en_post_id = pll_get_post($current_post_id, 'en'); |
|
|
|
|
|
|
|
|
|
// Формируем URL с учетом перевода и параметров запроса |
|
|
|
|
$query_string = $_SERVER['QUERY_STRING'] ? '?' . $_SERVER['QUERY_STRING'] : ''; |
|
|
|
|
|
|
|
|
|
$ru_url = $ru_post_id ? get_permalink($ru_post_id) . $query_string : $ru_domain . trailingslashit($_SERVER['REQUEST_URI']) . $query_string; |
|
|
|
|
$en_url = $en_post_id ? get_permalink($en_post_id) . $query_string : $en_domain . trailingslashit($_SERVER['REQUEST_URI']) . $query_string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Выводим hreflang-теги |
|
|
|
|
echo '<link rel="alternate" hreflang="ru-RU" href="' . esc_url($ru_url) . '" />' . "\n"; |
|
|
|
|
echo '<link rel="alternate" hreflang="en-AE" href="' . esc_url($en_url) . '" />' . "\n"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|