Вывод ID пользователя в отдельной таблице для аффилиатов WordPress
{
$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 аффилиата, но я не знаю, что с этим делать и может ли это помочь мне получить то, что я хочу. То есть, я вроде бы понимаю, что он делает, но недостаточно, чтобы понять, как это использовать!
(я не программист, скорее любитель поковыряться в коде).
Я спрашивал автора плагина, который обычно дает хорошую поддержку, но эта функция запрашивалась несколько раз, и ответ всегда один и тот же. Без обид, но я хотел бы попробовать реализовать это самостоятельно.
Буду благодарен за любую помощь.

После изучения кода плагина, похоже, что нет простого способа сделать это.
Партнеры хранятся в отдельной таблице, которая не связана напрямую с таблицей пользователей 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, вы можете использовать другие функции, входящие в состав плагина, чтобы получить любую необходимую информацию.

Я знал, что это две разные группы пользователей. Я хочу отображать 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 "";
}
Если аффилиат авторизуется, он остается авторизованным на всем сайте.
