Бурашников Роман Александрович

Организация реферальной программы на WordPress

linkВ этой статье я расскажу как организовать довольно простую реферальную (партнерскую) программу на WordPress. Для отслеживания с какого источника пришёл клиент.

Принцип следующий:
1) посетитель переходит по реферальной ссылке вида http://ваш_домен?ref=153;
2) при помощи cookie посетитель запоминается на сайте, запоминается идентификатор ("153" - из вышеуказанной ссылки);
3) если посетитель воспользуется формой обратной связи (даже через несколько дней) - в письме будет указан идентификатор реферальной ссылки, так мы узнаем из какого источника о нас узнал данный потенциальный клиент. Я использую плагин Contact Form 7 для форм обратной связи, буду описывать на его примере.

Для начала нам нужно создать куки со значением идентификатора в браузере посетителя, для этого в файл functions.php добавляем следующий код:

function set_referal_cookie() { 
    $ref = $_GET['ref'];
 if ($ref == NULL) {
    $ref = 'Без реферала';
  }
 if (!isset($_COOKIE['referal'])) {
    setcookie('referal', $ref, time() + (86400 * 30), COOKIEPATH, COOKIE_DOMAIN, false);
    }
}
add_action( 'init', 'set_referal_cookie');

Цифра "30" означает количество дней, сколько будут хранится куки в браузере посетителя.

Данный код записывает в куки с названием "referal" значение после ?ref= .
Т.е. если ссылка вида http://ваш_домен/ваша_страничка?ref=roman, то в куки сохранится значение "roman".

Узнать, что куки успешно создаются можно посмотрев в браузере, например в firefox нужно зайти в "настройки" -> "приватность" -> "удалить отдельные куки" -> находим свой сайт -> находим название куки "referal", если нашли - значит куки успешно создаются.

 

Теперь нам нужно вставить в письмах значение из куки "referal".

Для этого доработаем плагин Contact Form 7.

Нам нужно создать новый тэг, который мы будем далее вставлять в шаблоны писем, вместо этого тэга будет выводиться значение куки в письме. Для это в файл contact-form-7/modules/special-mail-tags.php добавляем следующий код:

if ('_referal' == $name) {
      $cookie_name = "referal";
      if(!isset($_COOKIE[$cookie_name])) {
          return 'Без реферала.';
      } else {
          return  $_COOKIE[$cookie_name];
      }
  }

 

В следующее место - смотрите пример (место обозначил комментариями):

 

<?php
/**
** Filters for Special Mail Tags
**/

add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag', 10, 3 );

function wpcf7_special_mail_tag( $output, $name, $html ) {

    // For backwards compat.
    $name = preg_replace( '/^wpcf7\./', '_', $name );

    if ( '_remote_ip' == $name )
        $output = preg_replace( '/[^0-9a-f.:, ]/', '', $_SERVER['REMOTE_ADDR'] );

    elseif ( '_user_agent' == $name ) {
        $output = substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 );

        if ( $html )
            $output = esc_html( $output );
    }

    elseif ( '_url' == $name ) {
        $url = untrailingslashit( home_url() );
        $url = preg_replace( '%(?<!:|/)/.*$%', '', $url );
        $url .= wpcf7_get_request_uri();
        $output = esc_url( $url );
    }

    elseif ( '_date' == $name )
        $output = date_i18n( get_option( 'date_format' ) );

    elseif ( '_time' == $name )
        $output = date_i18n( get_option( 'time_format' ) );

 //тут начинается функция добавления тэга с куки
if ('_referal' == $name) {
      $cookie_name = "referal";
      if(!isset($_COOKIE[$cookie_name])) {
          return 'Без реферала.';
      } else {
          return  $_COOKIE[$cookie_name];
      }
  }

//тут заканчивается функция добавления тэга с куки

    return $output;
}

add_filter( 'wpcf7_special_mail_tags', 'wpcf7_special_mail_tag_for_post_data', 10, 2 );

function wpcf7_special_mail_tag_for_post_data( $output, $name ) {

    if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) )
        return $output;

    if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) )
        return $output;

    $post_id = (int) $matches[2];

    if ( ! $post = get_post( $post_id ) )
        return $output;

    $user = new WP_User( $post->post_author );

    // For backwards compat.
    $name = preg_replace( '/^wpcf7\./', '_', $name );

    if ( '_post_id' == $name )
        $output = (string) $post->ID;

    elseif ( '_post_name' == $name )
        $output = $post->post_name;

    elseif ( '_post_title' == $name )
        $output = $post->post_title;

    elseif ( '_post_url' == $name )
        $output = get_permalink( $post->ID );

    elseif ( '_post_author' == $name )
        $output = $user->display_name;

    elseif ( '_post_author_email' == $name )
        $output = $user->user_email;

    return $output;
}

?>

 

Теперь в шаблонах писем плагина Contact Form 7 добавляем тэг [_referal] например такой строчкой:

 

Партнёр: [_referal].

 

 

 

Вот собственно всё, что нужно сделать. Теперь вставляем ссылки с разными идентификаторами на разные источники (например в Яндекс Директе http://ваш_домен?ref=yandex), приходящие на сайт посетители будут запоминаться и как только напишут вам через форму обратной связи - вам будет известно откуда он про вас узнал.

 


 

VN:F [1.9.22_1171]
Рейтинг: +4 (голосов: 4), Понравилось: 4, Не понравилось: 0

Поделиться в:
Вы можете поблагодарить автора рублём, за понравившуюся статью, при помощи этой формы (нажать для открытия):

5 комментариев: Организация реферальной программы на WordPress

  • Приветствую, такой вопрос - при обновлении движка или плагина код не слетит?

    VA:F [1.9.22_1171]
    Рейтинг: 0 (голосов: 0)
  • Вот то-то и оно. Тогда решение не айс. Не обновлять движок - давать потенциальную возможность взломать сайт.

    VA:F [1.9.22_1171]
    Рейтинг: 0 (голосов: 0)
    • Как вариант - установить плагин Functionality, он позволяет дописывать код в functions.php не изменяя файл. Т.е. тогда при обновлении движка код не слетит.

      VN:F [1.9.22_1171]
      Рейтинг: 0 (голосов: 0)
  • Спасибо за статью.
    Но вот правка кода плагина напрямую это 😈
    Рекомендую почитать https://wp-kama.ru/id_8019/contact-form-7-sozdanie-svoih-tegov-formy-shortkodov.html
    Совместив с Вашим кодом, у меня получилось обойтись только редактированием файла functions. При обновлении плагина контактной формы ничего не слетит.

    VA:F [1.9.22_1171]
    Рейтинг: 0 (голосов: 0)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Бурашников Роман АлександровичБурашников Роман Александрович
Лучшие записи
Рекомендую
  • Beget — лучший хостинг для сайтов в России
  • Umi — единственный нормальный конструктор сайтов
  • Топвизор — проверка позиций сайта в поисковых системах
  • Pozvonim.com — обратный звонок на сайт
  • Модульбанк — лучший банк для предпринимателей
  • Vto.pe — накрутка в соц.сетях
Яндекс Диск 1ГБ дополнительного места