Вывод ID пользователя в отдельной таблице для аффилиатов WordPress

26 июн. 2012 г., 23:16:15
Просмотры: 348
Голосов: 1
{   
    $ad_code = str_replace("xxxx",$_SESSION['user_id'],$resultset->description);
    $ad_code = str_replace("XXXX",$_SESSION['user_id'],$ad_code);
    echo '<tr>';
    echo '<td class="col2"><strong>'.$resultset->name.'</strong></td>';
    echo '<td><textarea cols=65 rows=5>';
    echo $ad_code;
    echo "</textarea></td>";                
    echo '</tr>';
}

Я использую плагин WordPress Affiliate Platform, который создает (как я понимаю) пользователей в отдельной таблице, а не в стандартной таблице пользователей WP, чтобы не смешивать аффилиатов и обычных пользователей WordPress.

Мне нужно получить ID вошедшего в систему аффилиата, чтобы отображать его реферальную ссылку для текущей страницы:

  • Пример общей реферальной ссылки: http://domain.com/?ap_id=AMEEKER
  • Пример ссылки для конкретной страницы: http://domain.com/myproduct?ap_id=AMEEKER

Сам плагин не предоставляет такой возможности, а лишь рекомендует аффилиатам вручную добавлять ?ap_id=AMEEKER к URL текущей страницы. Это работает, но довольно утомительно и может привести к ошибкам, которые не являются виной аффилиатов.

Я уверен, что можно просто вывести URL текущей страницы, за которым следует ?ap_id= и ID аффилиата, но у меня не получается разобраться, как получить этот ID аффилиата.

Сам плагин делает это, преобразуя xxxx в ID пользователя каким-то образом.

domain.com/myproduct?ap_id=XXXX

Выше я вставил код из личного кабинета аффилиата, где плагин ДЕЙСТВИТЕЛЬНО получает ID аффилиата и динамически отображает его для вошедшего пользователя. Посмотрев шаблон в файлах плагина, я нашел то, что, как мне КАЖЕТСЯ, является кодом, динамически заменяющим XXXX на реальный ID аффилиата, но я не знаю, что с этим делать и может ли это помочь мне получить то, что я хочу. То есть, я вроде бы понимаю, что он делает, но недостаточно, чтобы понять, как это использовать!

(я не программист, скорее любитель поковыряться в коде).

Я спрашивал автора плагина, который обычно дает хорошую поддержку, но эта функция запрашивалась несколько раз, и ответ всегда один и тот же. Без обид, но я хотел бы попробовать реализовать это самостоятельно.

Буду благодарен за любую помощь.

2
Комментарии

Судя по этому коду, я предполагаю, что это в переменной $ad_code. Где и как они её формируют?

curtismchale curtismchale
26 июн. 2012 г. 23:19:11

Я не знаю. :-( Не хочу показаться глупым, но я действительно не знаю, где искать или даже что именно искать.

angiemeeker angiemeeker
26 июн. 2012 г. 23:29:15
Все ответы на вопрос 1
1

После изучения кода плагина, похоже, что нет простого способа сделать это.

Партнеры хранятся в отдельной таблице, которая не связана напрямую с таблицей пользователей WordPress — это означает, что у вас могут быть пользователи, которые не являются партнерами, и партнеры, которые не являются пользователями. Именно поэтому есть большая опция «Импортировать пользователей WP»... это не происходит автоматически.

Когда партнер входит в систему, код автоматически запускает PHP-сессию, сохраняет его ID партнера как переменную сессии, а также устанавливает его в cookie для последующего извлечения:

global $wpdb;
$affiliates_table_name = WP_AFF_AFFILIATES_TABLE;        
$result = $wpdb->get_row("SELECT * FROM $affiliates_table_name where refid='$userid'", OBJECT);
    
if($wp_hasher->CheckPassword($password, $result->pass))
{
    // это устанавливает сессию и авторизует пользователя
    if(!isset($_SESSION)){@session_start();}
    // это устанавливает переменные в сессии
    $_SESSION['user_id']= $userid;
    setcookie("user_id", $userid, time()+60*60*6, "/"); //устанавливаем cookie на 6 часов

    // ... и так далее
}

Плагин на данный момент вообще не использует систему управления пользователями WordPress.

Итог

ID партнеров, которые вы видите, — это не то же самое, что имена пользователей в системе, и нет способа выполнить запрос для получения имени пользователя/ID из таблицы пользователей WordPress на основе ID партнера (или наоборот), потому что в системе нет данных, связывающих их.


Получение ID партнера

Если все, что вам нужно, — это получить ID партнера, если пользователь авторизован, то вам достаточно проверить коллекцию cookie или текущую сессию:

function get_current_affiliate_id() {
    $affiliate_id = false;

    if ( isset( $_SESSION ) && isset( $_SESSION['user_id'] ) )
        $affiliate_id = $_SESSION['user_id'];

    if ( ! $affiliate_id && isset( $_COOKIE['user_id'] ) )
        $affiliate_id = $_COOKIE['user_id'];

    return $affiliate_id;
}

Если пользователь авторизован, то и переменная сессии, и cookie должны быть установлены. Эта функция вернет ID пользователя (проверка cookie — это просто запасной вариант на случай, если что-то случится с серверными сессиями... например, перезагрузка сервера во время использования сайта). Если пользователь не авторизован, функция вернет false.

Как только у вас есть ID, вы можете использовать другие функции, входящие в состав плагина, чтобы получить любую необходимую информацию.

26 июн. 2012 г. 23:58:57
Комментарии

Я знал, что это две разные группы пользователей. Я хочу отображать ID аффилиата, если аффилиат авторизован, не обращая внимания на пользователей WP. В другом месте я отображаю контент ЕСЛИ аффилиат авторизован, используя это: if(aff_main_check_security()) { add_action( 'genesis_before_content_sidebar_wrap', 'include_aff_info' ); function include_aff_info() { require(CHILD_DIR.'/aff_info.php'); }; } else { echo ""; }

Если аффилиат авторизуется, он остается авторизованным на всем сайте.

angiemeeker angiemeeker
27 июн. 2012 г. 00:08:09