Реферальный ID передается единожды через $_GET, прикрепляясь в виде параметра к любому URL сайта. На хуке init вешается обработчик, который его ловит и пишет в куки. Дополнительно можно проверять на наличие реферального ID в куках и либо продлять время жизни, либо перезаписывать / игнорировать (если в куках сохранен другой ID - чтобы не засчитался реферал сразу нескольким юзерам).
Сам ID генерится как уникальный хеш - на основе например user_id + user_email. Хранится либо в отдельной таблице в базе данных (id | user_id | affiliate_id), либо в wp_usermeta, если пользователей не очень много и заметного влияния на скорость при выборках / поиске юзера по реферальному ID не будет.
Дополнительные аргументы за отдельную таблицу в базе данных (или даже несколько таблиц) - если нужно сохранять статистику обращений (откуда пришли по ссылке, браузер/ось, количество переходов по рефссылке и тд), связывать потом юзеров между собой и любую другую дополнительную инфу.