menex.ru
← Все статьи

Скрипт подмены номеров или другого контента по UTM параметрам в ссылках

31.03.2023 • Теги: #hook #jQuery #wordpress #сниппет #Хук

На одном из сайтов потребовалось менять номер телефона если переход идет с Яндекс Директа, и есть ссылка с UTM параметром. Попробовал несколько скриптов, но остановился на этом, так как он не критичен к тому если один из селекторов не находит. Поэтому можно прописать кучу селекторов, которые есть на сайте. И он будет работать. Вставляя его в сниппет:

<script>
// Добавьте UTM-метку utm_medium к ссылке в рекламной кампании, например
//site.ru/?utm_source=yadirect&utm_medium=cpc


(function( $ ) {
    $.fn.changeData = function(options) {
        var settings = {
            urlParam: null,
            nameCookie: null,
            paramList: null,
            newData: null
        };
        return this.each(function() {
            if (options) {
                $.extend(settings, options);
            }
            function getCookie(name) {
                var cookie = " " + document.cookie;
                var search = " " + name + "=";
                var setStr = null;
                var offset = 0;
                var end = 0;
                if (cookie.length > 0) {
                    offset = cookie.indexOf(search);
                    if (offset != -1) {
                        offset += search.length;
                        end = cookie.indexOf(";", offset);
                        if (end == -1) {
                            end = cookie.length;
                        }
                        setStr = unescape(cookie.substring(offset, end));
                    }
                }
                return(setStr);
            }
            // записывает utm в cookie на 30 дней
            function setCookie(name, valCookie) {
                document.cookie = name+"=; expires=; path=/";
                expires = new Date();
                expires.setTime(expires.getTime() + (30*24*60*60*1000));
                document.cookie = name+"=" + valCookie + "; expires=" + expires.toGMTString() + "; path=/"
            }
            function parseGetParams(peremennya) {
                var getURl = window.location.search.substring(1);
                var peremennii = getURl.split("&");
                for (var i=0; i<peremennii.length; i++) {
                    var pair = peremennii[i].split("=");
                    if (pair[0] == peremennya) {
                        return pair[1];
                    }
                }
                return(false);
            }
            var param = parseGetParams(settings.urlParam);
            if (settings.paramList.indexOf(param)!=-1) {
                setCookie(settings.nameCookie, param);
            }
            var param_cookie = getCookie(settings.nameCookie);
            for(var i=0; i<settings.paramList.length; i++){
                if ((param_cookie == settings.paramList[i]) || (param == settings.paramList[i])) {
                    $(this).html(settings.newData[i]);
                }
            }
        })
    };
})(jQuery);
jQuery(function() {
    // в шапке
     jQuery('#shortcode-172-6350').changeData({
         urlParam: 'utm_medium',
         nameCookie: 'utm_medium_change',
         paramList: [
             'cpc'
         ],
         newData: [
             '<a href="tel:+74230000000">8 (423) 000-00-00</a>'
         ]
     });
    // на главной
    jQuery('#shortcode-1411-7215').changeData({
         urlParam: 'utm_medium',
         nameCookie: 'utm_medium_change',
         paramList: [
             'cpc'
         ],
         newData: [
             '<a href="tel:+74230000000">8 (423) 000-00-00</a>'
         ]
     });
    // в футере
    jQuery('#tel_footer').changeData({
         urlParam: 'utm_medium',
         nameCookie: 'utm_medium_change',
         paramList: [
             'cpc'
         ],
         newData: [
             '<a href="tel:+74230000000">8 (423) 000-00-00</a>'
         ]
     });
    // в контактах
    jQuery('#shortcode-59-416').changeData({
         urlParam: 'utm_medium',
         nameCookie: 'utm_medium_change',
         paramList: [
             'cpc'
         ],
         newData: [
             '<a href="tel:+74230000000">8 (423) 000-00-00</a>'
         ]
     });
    // в материалах
    jQuery('#div_block-368-7014').changeData({
         urlParam: 'utm_medium',
         nameCookie: 'utm_medium_change',
         paramList: [
             'cpc'
         ],
         newData: [
             '<a id="link_text-370-7014" class="ct-link-text" href="tel:+74230000000">+7 (423) 000-00-00</a>'
         ]
     });
});


</script>

Решение взял с этого сайта https://brandmaker.ru/base/change-data