Adverships_Affiliate_Client::api_base() . '/connector/reclink.php', )); wp_enqueue_script('adverships-affiliate-click'); } /** * Read the av_aff cookie and store the parsed attribution on the order meta. * Stored once at creation so a later status transition reports the right * creator even if the cookie has since expired. * * @param WC_Order $order */ public function capture_to_order($order, $data = null) { $attr = self::read_cookie_attribution(); if (empty($attr['t'])) { return; } $order->update_meta_data('_adverships_t', $attr['t']); if (!empty($attr['d'])) { $order->update_meta_data('_adverships_d', $attr['d']); } if (!empty($attr['cid'])) { $order->update_meta_data('_adverships_cid', $attr['cid']); } if (!empty($attr['landing'])) { $order->update_meta_data('_adverships_landing', $attr['landing']); } } /** Blocks/Store-API checkout variant (different hook signature). */ public function capture_to_order_blocks($order, $request = null) { $this->capture_to_order($order); } /** * Parse the av_aff cookie into ['t','d','cid','landing']. * @return array */ public static function read_cookie_attribution() { $out = array('t' => '', 'd' => '', 'cid' => '', 'landing' => ''); if (empty($_COOKIE[self::COOKIE])) { return $out; } $raw = wp_unslash($_COOKIE[self::COOKIE]); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput -- parsed + sanitized below $pairs = array(); parse_str((string) $raw, $pairs); $out['t'] = isset($pairs['t']) ? sanitize_text_field($pairs['t']) : ''; $out['d'] = isset($pairs['d']) ? sanitize_text_field($pairs['d']) : ''; $out['cid'] = isset($pairs['cid']) ? sanitize_text_field($pairs['cid']) : ''; $ref = isset($_SERVER['HTTP_REFERER']) ? esc_url_raw(wp_unslash($_SERVER['HTTP_REFERER'])) : ''; $out['landing'] = $ref; return $out; } }