Интегриране на custom статистика в WordPress с разширение WooCommerce

Дискусията в 'Web Development' стартирана от TNTM, Юли 30, 2018.

  1. TNTM

    TNTM New Member

    Рег.:
    Юни 30, 2015
    Съобщения:
    28
    Харесвания:
    5
    Точки:
    3
    Здравейте,

    Имаме е-магазин, базиран на WordPress с инсталирано разширение WooCommerce. За да следя трафика реших да използвам система за проследяване на посещенията в реално време, която съм писал през 2008-2009 за друг проект. След неизбежната актуализация на кода и привеждането му в съответствие с изискванията на PHP7 възникна въпросът, как да интегрирам кода на статистиката в WordPress.

    Не познавам ядрото на WordPress, нито разполагам с възможност тепърва да го разучавам и затова се спрях на две възможни решения за извикването на проследяващия скрипт:

    1) Включване в изходния код на страницата като изображение, посредством <IMG>-таг;

    2) Включване в изходния код на страницата чрез JavaScript.

    При включване в HTML-кода губя заглавките (хедъра за заявката), с която е извикана страницата, тъй като към момента на зареждане на изображението, съвсем логично те вече са били изпратени от браузъра. Т.е. стойността за HTTP_REFERER в глобалния масив $_SERVER[] за скрипта, създаващ изображението, ще е адресът на вече извиканата страница, в която то следва да се зареди, а не външният адрес, от който е било извършено препращането.

    Тогава реших вместо да извиквам скриптовете на статистиката чрез вградено изображение да използвам JavaScript, който да вземе тази стойност от историята на браузъра. За съжаление тази дупка в сигурността поне при основните браузъри се оказа отдавна затворена.

    Какъв принцип на интегриране използват външни приложения като Tyxo и Google Analytics, за да получат достъп до стойността на HTTP_REFERER за съответната страница, в която са вградени?


    3) Третото решение, което ми минава през ума би представлявало действителна интеграция. То предполага да намеря тази част от конструктора на WordPress, в която се инициализира сесията, посредством функцията session_start(); и да създам елемент в сесийния масив със стойността на HTTP_REFERER, който скриптовете на статистиката биха могли спокойно да обработят. Въпросът е, в кой файл се намира сесийният конструктор на WordPress и къде в кода бива извикван?

    Не на последно място, колко практично би било решение (3) с оглед регулярните ъпдейти на WordPress?

    Какво решение за интегриране на скриптовете на статистиката бихте ми препоръчали?

    И сайтът, и статистиката се намират на един и същ сървър.
     
  2. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,125
    Харесвания:
    476
    Точки:
    83
    Не е добра идея. WP по идея е stateless и използването на сесии ще вземе да потвърди градските легенди на "гурутата" колко е бавен.

    С това нямаш никакъв проблем, правиш си един плъгин, закачаш се на init hook-a и от там си викаш скриптовете. Ще ти се наложи да филтрираш всякакви вътрешни бози от сорта на w-cron и ajax заявки.

    Проблемът с тази схема е, че всяко кеширане я прави неработоспособна.

    Използвай document.referrer
     
  3. slavchev

    slavchev Well-Known Member

    Рег.:
    Дек 20, 2012
    Съобщения:
    2,040
    Харесвания:
    399
    Точки:
    83
    Пол:
    Мъж
    Професия:
    CEO
    Място:
    Някъде там
    Защо не пробваш JetPack?
     
  4. TNTM

    TNTM New Member

    Рег.:
    Юни 30, 2015
    Съобщения:
    28
    Харесвания:
    5
    Точки:
    3
    Torbalan Trolski,

    Минах и през document.referrer докато търсех JavaScript-решения без да съобразя, че под Windows с всички ограничения за област на действие, които бяха наложени върху изпълнението на JavaScript, няма как да ми върне път. Пробвах го на виртуалния сървър и резултатът цъфна :)

    Благодаря, че отново ме върна към това свойство!

    Сега остава да помисля, как най-ефективно да предам стойността на HTTP_REFERER към скриптовете на статистиката. Тази стойност ще ми е нужна само при първо зареждане на страница от сайта, за да видя препращащия адрес, ако има такъв. От там насетне ще следя потребителя по-ефективно с възможностите на сървъра.

    Въпросът е, как да предам тази стойност, а от това ще зависи и самото включване на статистиката:

    1) Асинхронна заявка към сървъра (AJAX):

    При първо зареждане предава стойността на HTTP_REFERER чрез асинхронна GET-заявка, от там насетне заявката ще служи само, за да извиква PHP скрипта на статистиката - лесно за управление, но вероятно ще товари излишно.

    2) Предаване като GET-параметър в адреса на изображението, което извиква статистиката:

    JavaScript-а взема стойността на HTTP_REFERER и я дописва динамично като query string към URL-адреса на вграденото в <IMG>-таг изображение, извикващо статистиката. Тук ме притеснява синхронизацията - изображението вероятно ще е заредено преди браузъра да стигне до JavaScripta, а това значи да викам статистиката 2 пъти, което не е рационално. Ако първо се изпълни JavaScripta, а браузъра не е стигнал до IMG-тага, ще възникне добре познатата грешка: undefined object - слаб вариант.

    3) Динамично генериран <IMG>-таг от самия JavaScript

    Вариация на (2) с тази разлика, че <IMG>-тага не се вгражда в кода, а се създава от JavaScript-а динамично чрез метода innerHTML. Може и направо да се зададе нова стойност за <IMG>-тага - на първо четене ми изглежда възможно решение.

    4) Предаване чрез Cookie, извикване на статистиката чрез вградено изображение

    JavaScript-а изпраща Cookie със стойността на HTTP_REFERER, което PHP скрипта на статистиката обработва и изчита щом бъде извикан, а самото извикване отново да става чрез <IMG>-таг и изображение. JavaScript-а ще бъде разположен в хедъра на документа и Cookie-то със сигурност ще бъде генерирано преди да се зареди изображението, извикващо статистиката - изглежда ми най-удачният вариант, евентуално в комбинация с (3).

    Пропускам ли нещо?


    slavchev,

    Не обичам да използвам готови решения. Все пак ти благодаря за вниманието към темата!
     
    slavchev харесва това.
  5. TNTM

    TNTM New Member

    Рег.:
    Юни 30, 2015
    Съобщения:
    28
    Харесвания:
    5
    Точки:
    3
    При вграждане на статистиката с <IMG>-таг или JavaScript изпускам ботовете :(

    Някакво решение?

    * * *

    Явно опираме до include() на скрипта, събиращ данните за статистиката. Къде в ядрото на WordPress би било най-удачно да направя включването, за да съм сигурен, че кодът ще се зарежда винаги, когато се извиква дадена страница от потребителската секция на WordPress и не по-малко важно - че хедърите не са вече изпратени, за да мога да манипулирам спокойно със сесии и Cookie-та?
     
    Последно редактирано: Юли 31, 2018

Сподели страницата

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies.
    Dismiss Notice