/** * Obtain the referring affiliate's id. * @param string $service by name * @return int affiliate id or false if none applies */ public static function get_referrer_id($service = null) { $affiliate_id = false; switch ($service) { default: if (isset($_COOKIE[AFFILIATES_COOKIE_NAME])) { $affiliate_id = affiliates_check_affiliate_id_encoded(trim($_COOKIE[AFFILIATES_COOKIE_NAME])); } } if (!$affiliate_id) { if (get_option('aff_use_direct', true)) { // Assume a direct referral $affiliate_id = affiliates_get_direct_id(); } } return apply_filters('affiliates_service_affiliate_id', $affiliate_id, $service); }
/** * Looks in the query variables and sets a cookie with the affiliate id. * Hook into parse_request. * @param WP $wp the WordPress environment * @link http://php.net/manual/en/function.setcookie.php */ function affiliates_parse_request(&$wp) { global $wpdb, $affiliates_options; $pname = get_option('aff_pname', AFFILIATES_PNAME); $affiliate_id = isset($wp->query_vars[$pname]) ? affiliates_check_affiliate_id_encoded(trim($wp->query_vars[$pname])) : null; if (isset($wp->query_vars[$pname])) { // affiliates-by-username uses this hook $maybe_affiliate_id = apply_filters('affiliates_parse_request_affiliate_id', $wp->query_vars[$pname], $affiliate_id); if ($maybe_affiliate_id !== null && $maybe_affiliate_id !== trim($wp->query_vars[$pname])) { $affiliate_id = $maybe_affiliate_id; } } if ($affiliate_id) { $encoded_id = affiliates_encode_affiliate_id($affiliate_id); $days = apply_filters('affiliates_cookie_timeout_days', get_option('aff_cookie_timeout_days', AFFILIATES_COOKIE_TIMEOUT_DAYS), $affiliate_id); if ($days > 0) { $expire = time() + AFFILIATES_COOKIE_TIMEOUT_BASE * $days; } else { $expire = 0; } if (class_exists('Affiliates_Campaign') && method_exists('Affiliates_Campaign', 'evaluate')) { if (!empty($_REQUEST['cmid'])) { if ($cmid = Affiliates_Campaign::evaluate($_REQUEST['cmid'], $affiliate_id)) { $encoded_id .= '.' . $cmid; } } } setcookie(AFFILIATES_COOKIE_NAME, $encoded_id, $expire, SITECOOKIEPATH, COOKIE_DOMAIN); affiliates_record_hit($affiliate_id); affiliates_pixel_request(); unset($wp->query_vars[$pname]); // we use this to avoid ending up on the blog listing page if (get_option('aff_redirect', false) !== false) { // use a redirect so that we end up on the desired url without the affiliate id dangling on the url $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg($pname, $current_url); $current_url = preg_replace('#' . str_replace(AFFILIATES_PNAME, $pname, AFFILIATES_REGEX_PATTERN) . '#', '', $current_url); // note that we must use delimiters other than / as these are used in AFFILIATES_REGEX_PATTERN $status = apply_filters('affiliates_redirect_status_code', 302); $status = intval($status); switch ($status) { case 300: case 301: case 302: case 303: case 304: case 305: case 306: case 307: break; default: $status = 302; } wp_redirect($current_url, $status); exit; // "wp_redirect() does not exit automatically and should almost always be followed by exit." @see http://codex.wordpress.org/Function_Reference/wp_redirect } } else { affiliates_pixel_request(); } }