Files
WooNooW/includes/Frontend/SmartRotator.php

84 lines
2.3 KiB
PHP

<?php
namespace WooNooW\Frontend;
if (!defined('ABSPATH')) exit;
class SmartRotator
{
public static function init()
{
add_action('init', [__CLASS__, 'register_rewrite_rules']);
add_filter('query_vars', [__CLASS__, 'register_query_vars']);
add_action('template_redirect', [__CLASS__, 'handle_redirect']);
}
public static function register_rewrite_rules()
{
// Match /go/collection-slug
add_rewrite_rule(
'^go/([^/]+)/?$',
'index.php?woonoow_go_slug=$matches[1]',
'top'
);
}
public static function register_query_vars($vars)
{
$vars[] = 'woonoow_go_slug';
return $vars;
}
public static function handle_redirect()
{
$slug = get_query_var('woonoow_go_slug');
if (empty($slug)) {
return;
}
global $wpdb;
$collections_table = $wpdb->prefix . 'woonoow_affiliate_collections';
$affiliates_table = $wpdb->prefix . 'woonoow_affiliates';
// Lookup collection and affiliate in one query
$query = $wpdb->prepare(
"SELECT c.product_ids, a.referral_code
FROM {$collections_table} c
JOIN {$affiliates_table} a ON c.affiliate_id = a.id
WHERE c.slug = %s LIMIT 1",
$slug
);
$result = $wpdb->get_row($query);
if (!$result || empty($result->product_ids)) {
// Fallback: 404 or redirect to shop
wp_safe_redirect(site_url('/shop/'));
exit;
}
$product_ids = json_decode($result->product_ids, true);
if (!is_array($product_ids) || empty($product_ids)) {
wp_safe_redirect(site_url('/shop/'));
exit;
}
// Randomly pick a product
$random_product_id = $product_ids[array_rand($product_ids)];
// Get the permalink for the product
$target_url = get_permalink($random_product_id);
if (!$target_url) {
wp_safe_redirect(site_url('/shop/'));
exit;
}
// Append the affiliate referral code
$target_url = add_query_arg('ref', $result->referral_code, $target_url);
// Redirect to the product page
wp_redirect($target_url, 302);
exit;
}
}