Maks | слегка отрефакторил файлы мультиязычности и мультисайтовости, решая вопрос по передаче событий покупки в метрику и Pixel

pull/36/head
parent beffd44cb9
commit a06af1ecc3
  1. 9
      wp-content/themes/cosmopet/functions.php
  2. 3
      wp-content/themes/cosmopet/global-functions/multilang-functions.php
  3. 166
      wp-content/themes/cosmopet/global-functions/multisite-functions.php
  4. 1
      wp-content/themes/cosmopet/modules/blog/components/author-banner/assets/css/style.css

@ -6,10 +6,10 @@ Timber\Timber::init();
// require once вместо include использовать!
require_once __DIR__ . '/temp-functions/cart-logic.php';
require_once __DIR__ . '/temp-functions/timber-logic.php';
require_once __DIR__ . '/temp-functions/woocommerce-logic.php';
require_once __DIR__ . '/temp-functions/modules-logic.php';
require_once __DIR__ . '/temp-functions/cart-logic.php';
require_once __DIR__ . '/temp-functions/woocommerce-logic.php';
require_once __DIR__ . '/temp-functions/ajax-logic.php';
require_once __DIR__ . '/temp-functions/shortcodes-logic.php';
require_once __DIR__ . '/temp-functions/blog-logic.php';
@ -23,8 +23,3 @@ require_once __DIR__ . '/temp-functions/login-logic.php';
// include_module('footer');
// include_module('author');
// include_module('layout');

@ -1,4 +1,7 @@
<?php
global $site_env;
// $this->site_region
add_action('init', function() {

@ -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 (Добавление в корзину)
@ -256,6 +206,65 @@ if($site_env->site_mode == 'production' and $site_env->site_region == 'ae') {
<?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";
}
}

@ -13,6 +13,7 @@
align-items: center;
justify-content: space-between;
padding: 35px 42px 35px 209px;
gap: 20px;
position: relative;
box-shadow: 6px 9px 20px rgba(0, 0, 0, 15%);
}

Loading…
Cancel
Save