Форум программистов, компьютерный форум, киберфорум
WordPress
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 4

Подмена заголовков по UTM метке

11.02.2017, 12:24. Показов 5376. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, сообщество! Мои знания в программировании чуть больше чем 0, пытаюсь доделать одну идейку методом тыка, но почему-то не получается))) Прошу Вашей помощи.
Что я хочу: мультилейдинг, т.е. при переходе по ссылке по определенной UTM метке, часть заголовков и информации подменяется в соответствии с UTM меткой.
Что смог сделать: реализована данная задача с помощью плагина, но в самом плагине анализ идет по параметру "utm_source", а не по "utm_multi" или же любому другому, и почемуто не спабатывает подмена, если в ссылке присутствует параметр "tm_campaign=cid|{campaign_id}|{source_t ype}"
Что имеем: сайт на Wordpress
Ссылки на одну и туже страницу с UTM метками такого типа:
https://site.ru/?utm_source=yandex&utm_medium=cpc&utm_campaign=cid| {campaign_id}|{source_type}&utm_content= gid|{gbid}|aid|{ad_id}|{phrase_id}_{reta rgeting_id}&utm_term={keyword}&pm_source ={source}&pm_block={position_type}&pm_po sition={position}&utm_multi=iskvsud
Вот сам плагин: https://cloud.mail.ru/public/7xAf/YAbXjBRd1
Интерфейс программы:
[url]http://***********/151aaab9/

Как работает, обычный заголовок, без подмены.
[img]http://***********/02fe1839.jpg[/img]
Использована переменная в ссылке utm_source=advokatuslugi
[img]http://***********/3317f776/[/img]
Нашел в плагине два главных javascripta, которые, как я понимаю и отвечают за обработку UTM меток
utm-switcher\public\assets\js\public.js
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
(function ($) {
    'use strict';
    $(function () {
        /* ========================================================================
         * DOM-based Routing
         * Based on http://*******/EUTi53 by Paul Irish
         *
         * Only fires on body classes that match. If a body class contains a dash,
         * replace the dash with an underscore when adding it to the object below.
         *
         * .noConflict()
         * The routing is enclosed within an anonymous function so that you can
         * always reference jQuery with $, even when in .noConflict() mode.
         * ========================================================================
         */
        var Utm_Switcher, Utm_UTIL;
        Utm_Switcher = {
            common: {
                init: function () {
                    var parsedQuery = Utm_UTIL.queryString();
                    
                    //CF7 Hidden input value replacement
                    if (parsedQuery.utm_source || parsedQuery.utm_medium || parsedQuery.utm_campaign) {
                        if (parsedQuery.utm_source) {
                            document.cookie = 'utmfieldsource=' + parsedQuery.utm_source;
                        }
                        if (parsedQuery.utm_medium) {
                            document.cookie = 'utmfieldmedium=' + parsedQuery.utm_medium;
                        }
                        if (parsedQuery.utm_campaign) {
                            document.cookie = 'utmfieldcampaign=' + parsedQuery.utm_campaign;
                        }
 
                        Utm_UTIL.populateFormValues(parsedQuery);
                    } else if (document.cookie.indexOf("utmfieldsource") >= 0 || document.cookie.indexOf("utmfieldmedium") >= 0 || document.cookie.indexOf("utmfieldcampaign") >= 0) {
                        Utm_UTIL.populateFormValues(parsedQuery);
                    }
 
 
                    if (!Utm_UTIL.isArray(utm_switchers)) {
                        return false;
                    }
                    
                    //Value replacement based on utm_source
                    if (('utm_source' in parsedQuery) || ( document.cookie.indexOf("utmfieldsource") >= 0 ) ) {
                        
                       var i,j;
                       for (i = 0; i < utm_switchers.length; ++i) {         
                            var switcher = utm_switchers[i], markup = $(switcher.match_element).html();
                              //Name this loop 
                              switchersSubLoop:
                              for (j = 0; j < switcher.switchers.length; ++j) {
                                
                                if ( (switcher.switchers[j].campaign_source !== parsedQuery.utm_source) && (switcher.switchers[j].campaign_source !== Utm_UTIL.getCookieValue('utmfieldsource')) ) {
                                    continue switchersSubLoop;
                                }
                                if (switcher.switcher_type === 'phone') {
                                    markup = '<a href="tel:' + switcher.switchers[j].replace_value + '" class="phone-number">' + switcher.switchers[j].replace_value + '</a>';
                                    $(switcher.match_element).replaceWith(markup);
                                } else {
                                    markup = switcher.switchers[j].replace_value;
                                    $(switcher.match_element).html(markup);
                                }
                            }
                        }
                    }
                }
            }
        };
        Utm_UTIL = {
            fire: function (func, funcname, args) {
                var namespace;
                namespace = Utm_Switcher;
                funcname = funcname === void 0 ? 'init' : funcname;
                if (func !== '' && namespace[func] && typeof namespace[func][funcname] === 'function') {
                    namespace[func][funcname](args);
                }
            },
            loadEvents: function () {
                Utm_UTIL.fire('common');
                $.each(document.body.className.replace(/-/g, '_').split(/\s+/), function (i, classnm) {
                    Utm_UTIL.fire(classnm);
                });
            },
            isArray: function (obj) {
                return (typeof obj !== 'undefined' &&
                        obj && obj.constructor === Array);
            },
            queryString: function(){
                var query_string = {};
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i = 0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    // If first entry with this name
                    if (typeof query_string[pair[0]] === "undefined") {
                        query_string[pair[0]] = pair[1];
                        // If second entry with this name
                    } else if (typeof query_string[pair[0]] === "string") {
                        var arr = [query_string[pair[0]], pair[1]];
                        query_string[pair[0]] = arr;
                        // If third or later entry with this name
                    } else {
                        query_string[pair[0]].push(pair[1]);
                    }
                }
                return query_string;  
            },
            getCookieValue: function (a, b) {
                b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
                return b ? b.pop() : '';
            },
            populateFormValues: function (parsedQuery) {
                
                if ((document.cookie.indexOf("utmfieldsource") >= 0 || parsedQuery.utm_source) && document.getElementsByClassName("utm-field-source")[0]) {
                    Utm_UTIL.applyFormValues(document.getElementsByClassName("utm-field-source"), Utm_UTIL.getCookieValue('utmfieldsource'));
                }
                if ((document.cookie.indexOf("utmfieldmedium") >= 0 || parsedQuery.utm_medium) && document.getElementsByClassName("utm-field-medium")[0]) {
                    Utm_UTIL.applyFormValues(document.getElementsByClassName("utm-field-medium"), Utm_UTIL.getCookieValue('utmfieldmedium'));
 
                }
                if ((document.cookie.indexOf("utmfieldcampaign") >= 0 || parsedQuery.utm_campaign) && document.getElementsByClassName("utm-field-campaign")[0]) {
                    Utm_UTIL.applyFormValues(document.getElementsByClassName("utm-field-campaign"), Utm_UTIL.getCookieValue('utmfieldcampaign'));
                }
            },
            applyFormValues : function(elements, value){
                elements = elements || {};
                for (var i = 0; i < elements.length; i++) {
                    elements[i].value = value;
                }
            }
        };
        $(document).ready(Utm_UTIL.loadEvents);
    });
})(jQuery);
и второй utm-switcher\public\dist\scripts\public.js
Code
1
2
!function(e){"use strict";e(function(){var t,u;t={common:{init:function(){var t=u.queryString();if(t.utm_source||t.utm_medium||t.utm_campaign?(t.utm_source&&(document.cookie="utmfieldsource="+t.utm_source),t.utm_medium&&(document.cookie="utmfieldmedium="+t.utm_medium),t.utm_campaign&&(document.cookie="utmfieldcampaign="+t.utm_campaign),u.populateFormValues(t)):(document.cookie.indexOf("utmfieldsource")>=0||document.cookie.indexOf("utmfieldmedium")>=0||document.cookie.indexOf("utmfieldcampaign")>=0)&&u.populateFormValues(t),!u.isArray(utm_switchers))return!1;if("utm_source"in t||document.cookie.indexOf("utmfieldsource")>=0){var m,i;for(m=0;m<utm_switchers.length;++m){var o=utm_switchers[m],n=e(o.match_element).html();for(i=0;i<o.switchers.length;++i)o.switchers[i].campaign_source!==t.utm_source&&o.switchers[i].campaign_source!==u.getCookieValue("utmfieldsource")||("phone"===o.switcher_type?(n='<a href="tel:'+o.switchers[i].replace_value+'" class="phone-number">'+o.switchers[i].replace_value+"</a>",e(o.match_element).replaceWith(n)):(n=o.switchers[i].replace_value,e(o.match_element).html(n)))}}}}},u={fire:function(e,u,m){var i;i=t,u=void 0===u?"init":u,""!==e&&i[e]&&"function"==typeof i[e][u]&&i[e][u](m)},loadEvents:function(){u.fire("common"),e.each(document.body.className.replace(/-/g,"_").split(/\s+/),function(e,t){u.fire(t)})},isArray:function(e){return"undefined"!=typeof e&&e&&e.constructor===Array},queryString:function(){for(var e={},t=window.location.search.substring(1),u=t.split("&"),m=0;m<u.length;m++){var i=u[m].split("=");if("undefined"==typeof e[i[0]])e[i[0]]=i[1];else if("string"==typeof e[i[0]]){var o=[e[i[0]],i[1]];e[i[0]]=o}else e[i[0]].push(i[1])}return e},getCookieValue:function(e,t){return t=document.cookie.match("(^|;)\\s*"+e+"\\s*=\\s*([^;]+)"),t?t.pop():""},populateFormValues:function(e){(document.cookie.indexOf("utmfieldsource")>=0||e.utm_source)&&document.getElementsByClassName("utm-field-source")[0]&&u.applyFormValues(document.getElementsByClassName("utm-field-source"),u.getCookieValue("utmfieldsource")),(document.cookie.indexOf("utmfieldmedium")>=0||e.utm_medium)&&document.getElementsByClassName("utm-field-medium")[0]&&u.applyFormValues(document.getElementsByClassName("utm-field-medium"),u.getCookieValue("utmfieldmedium")),(document.cookie.indexOf("utmfieldcampaign")>=0||e.utm_campaign)&&document.getElementsByClassName("utm-field-campaign")[0]&&u.applyFormValues(document.getElementsByClassName("utm-field-campaign"),u.getCookieValue("utmfieldcampaign"))},applyFormValues:function(e,t){e=e||{};for(var u=0;u<e.length;u++)e[u].value=t}},e(document).ready(u.loadEvents)})}(jQuery);
//# sourceMappingURL=public.js.map
Помогите пожалуйста. Вроде интересная задачка. Надо сделать так, чтобы параметр искался не в UTM_SOURCE а в UTM_MULTI или же любом другом параметре. Если возможно, сделать так, чтобы срабатывал скрипт со всеми переменными. Если есть необходимость в тестировании наработок, я тут, скидывайте сразу залью на сайт и проверю.

З.Ы. В интернетах есть множество ссылок на такой вот подход к созданию мультилейдинга (подмены содержимого сайта относительно поискового запроса), но нет нормальной реализации, тем более в виде плагина.
Заранее спасибо
Миниатюры
Подмена заголовков по UTM метке   Подмена заголовков по UTM метке   Подмена заголовков по UTM метке  

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2017, 12:24
Ответы с готовыми решениями:

Подмена заголовков в ajax
Предположим, у меня есть сайт site1 и мне нужно написать аякс-запрос к внешнему серверу site3, установив при этом заголовки origin и ...

Подмена файла hosts, подмена стартовой страницы, обращение utorrent к подозрительным адресам
Добрый день! Попал в руки ноутбук со следующей проблемой: браузер не открывал доступ к сайтам и поисковым системам, сообщая о использовании...

Мультилендинг и UTM-метки
Доброго времени суток, дорогие форумчане! Есть вопрос, вот смотрите: на сайте подключен скрипт мультилендинга (т.е. когда человек попадает...

3
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 4
11.02.2017, 13:52  [ТС]
ап ап
0
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 4
11.02.2017, 14:59  [ТС]
Структура utm меток
Миниатюры
Подмена заголовков по UTM метке  
0
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 4
11.02.2017, 16:21  [ТС]
Смотрите:
Есть яндек.директ (контекстная реклама), в которой более 60-ти компаний, в каждой более 1000 объявлений.
Пример:
1-ая компания "Адвокат по уголовным делам" "Адвокат по семейным делам" "Адвокаты Севастополя" и т.д.
2-ая компания "Юристы по наследству" "Консультация юриста" "Военный юрист" и т.д.

Таких компаний, напомню много и будет больше.

Ссылки ставятся с UTM метками, чтобы получать аналитику, UTM метка состоит из определенных параметров "source" "campaing" "content" и т.д. (это обязательные поля) и можно добавить свои поля, к примеру "utm_multilanding"

Я в Яндекс.Директе прописываю для каждой Компании объявлений свою utm-multilanding
1. utm-multilanding=Advokat
2. utm-multilanding=Jurist

В плагине указываю, что если в ссылке будет "Advokat", то Заголовок с классом ".Zagolovok" присваивается текст "Услуги адвоката в Севастополе". А если в ссылке будет "Jurist" присваивается "Услуги юристов Севастополя, специальные цены".

Вот как я организовываю заголовки

Плагин, который я выложил работает хорошо, но только одно НО. Он ищет переменную "Advokat" или "Jurist" в параметре utm_source, а я хочу, чтобы он искал в переменной "utm_pofigkak", так как переменная utm_source всегда имеет значение yandex, так как отвечает из какого источника идет трафик. Я могу организовать это в переменной utm_source, но хочу сделать все красиво.

Это главная проблема, я вчера с помощью CTRL+F поменял в кодах плагина utm_source на utm_multi, заработало, но криво-коряво.

Как выглядит обычная ссылка с UTM метками http://test.ru/?utm_source=yandex&utm_medium=cpc&utm_ca mpaign=cid|{campaign_id}|{source_type}&u tm_content=gid|{gbid}|aid|{ad_id}|{phras e_id}_{retargeting_id}&utm_term={keyword }&pm_source={source}&pm_block={position_ type}&pm_position={position}&utm_multi=a dvokat
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2017, 16:21
Помогаю со студенческими работами здесь

Обработка utm меток
Здрасти, не могу решить проблему, имеется обработчик.пхп файл обработчик сайта, я в .htacces прописал, ^utm то переходим в обработчик свой...

Ищу плагин UTM меток
Всем доброго времени суток. Подскажете пожалуйста плагин, для wordpress, который будет автоматически переделывать ссылку. Например я...

Usergate UTM Веб статистика
Добрый. По какому адресу находиться web статистика в usergate x.x.x.x/webstat нет x.x.x.x/stat то же нет?!

Сохранение и передача UTM меток в ajax
Здравствуйте, возник вот такой вопрос: У меня в коде написаны такие вот UTM метки для ссылок &lt;a...

Куда вставлять ссылки с UTM метками ?
Добрый день! Прочел немало статей про UTM метки, и понял, что основной смысл в том, чтобы отслеживать качество рекламных кампаний,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru