Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > WordPress и другие CMS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2017, 12:35   #1
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию Подмена заголовков по UTM метке в Wordpress

Добрый день, сообщество! Мои знания в программировании чуть больше чем 0, пытаюсь доделать одну идейку методом тыка, но почему-то не получается))) Прошу Вашей помощи.
Что я хочу: мультилейдинг, т.е. при переходе по ссылке по определенной UTM метке, часть заголовков и информации подменяется в соответствии с UTM меткой.
Что смог сделать: реализована данная задача с помощью плагина, но в самом плагине анализ идет по параметру "utm_source", а не по "utm_multi" или же любому другому, и почемуто не спабатывает подмена, если в ссылке присутствует параметр "tm_campaign=cid|{campaign_id}|{sou rce_type}"
Что имеем: сайт на Wordpress
Ссылки на одну и туже страницу с UTM метками такого типа:
https://site.ru/?utm_source=yandex&utm_medium=cpc&utm_campaign =cid|{campaign_id}|{source_type}&ut m_content=gid|{gbid}|aid|{ad_id}|{p hrase_id}_{retargeting_id}&utm_term ={keyword}&pm_source={source}&pm_bl ock={position_type}&pm_position={po sition}&utm_multi=iskvsud
Вот сам плагин: https://cloud.mail.ru/public/7xAf/YAbXjBRd1
Интерфейс программы:

Как работает, обычный заголовок, без подмены.

Использована переменная в ссылке utm_source=advokatuslugi

Нашел в плагине два главных javascripta, которые, как я понимаю и отвечают за обработку UTM меток
Pagy вне форума Ответить с цитированием
Старый 11.02.2017, 12:35   #2
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию

utm-switcher\public\assets\js\public.js
Код:
(function ($) {
    'use strict';
    $(function () {
        /* ========================================================================
         * DOM-based Routing
         * Based on http://goo.gl/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);
Pagy вне форума Ответить с цитированием
Старый 11.02.2017, 12:35   #3
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию

и второй utm-switcher\public\dist\scripts\public .js
Код:
!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 или же любом другом параметре. Если возможно, сделать так, чтобы срабатывал скрипт со всеми переменными. Если есть необходимость в тестировании наработок, я тут, скидывайте сразу залью на сайт и проверю.

З.Ы. В интернетах есть множество ссылок на такой вот подход к созданию мультилейдинга (подмены содержимого сайта относительно поискового запроса), но нет нормальной реализации, тем более в виде плагина.
Заранее спасибо
Pagy вне форума Ответить с цитированием
Старый 11.02.2017, 13:53   #4
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию

ап ап
Pagy вне форума Ответить с цитированием
Старый 11.02.2017, 14:59   #5
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию

Структура UTM меток
Pagy вне форума Ответить с цитированием
Старый 11.02.2017, 16:22   #6
Pagy
Новичок
Джуниор
 
Регистрация: 11.02.2017
Сообщений: 6
По умолчанию

Смотрите:
Есть яндек.директ (контекстная реклама), в которой более 60-ти компаний, в каждой более 1000 объявлений.
Пример:
1-ая компания "Адвокат по уголовным делам" "Адвокат по семейным делам" "Адвокаты Севастополя" и т.д.
2-ая компания "Юристы по наследству" "Консультация юриста" "Военный юрист" и т.д.

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

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

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

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

Вот как я организовываю заголовки http://SSMaker.ru/31c873cb/

Плагин, который я выложил работает хорошо, но только одно НО. Он ищет переменную "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&u tm_campaign=cid|{campaign_id}|{sour ce_type}&utm_content=gid|{gbid}|aid |{ad_id}|{phrase_id}_{retargeting_i d}&utm_term={keyword}&pm_source={so urce}&pm_block={position_type}&pm_p osition={position}&utm_multi=advoka t
Pagy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка в конце URL Utm меток Minus_yu PHP 4 29.06.2015 19:02
Плавный переход к метке jQuery 1.9.1 patch JavaScript, Ajax 3 06.06.2013 20:16
Обратиться к метке, находящейстя в др. процедуре Blame Microsoft Office Excel 4 03.06.2012 21:48
паскаль. Функции. Ошибка, не переходит по метке Антон Лысенко Помощь студентам 8 25.02.2011 20:27
msWord как заменить текст по метке Paskal1 Общие вопросы Delphi 0 25.10.2010 12:45