<?php function lwid_setup() { add_theme_support('title-tag'); add_theme_support('post-thumbnails'); add_theme_support('html5', array('search-form','comment-form','comment-list','gallery','caption')); add_image_size('lwid-card', 600, 400, true); add_image_size('lwid-hero', 1200, 500, true); } add_action('after_setup_theme', 'lwid_setup'); if (!isset($content_width)) $content_width = 1100; add_post_type_support('page', 'excerpt'); function lwid_clean_head() { remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'wp_shortlink_wp_head'); } add_action('init', 'lwid_clean_head'); function lwid_front_page_meta_cleanup() { if (!is_front_page()) return; global $lwid_front_page_title, $lwid_front_page_desc; $lwid_front_page_title = get_bloginfo('name'); $lwid_front_page_desc = 'Sleep health, sleep products, and practical guides to help you sleep better and feel better.'; } add_action('template_redirect', 'lwid_front_page_meta_cleanup'); function lwid_filter_front_page_document_title($title) { global $lwid_front_page_title; if (!empty($lwid_front_page_title)) return $lwid_front_page_title; return $title; } add_filter('pre_get_document_title', 'lwid_filter_front_page_document_title', 99); function lwid_filter_front_page_document_title_parts($parts) { global $lwid_front_page_title; if (!empty($lwid_front_page_title)) $parts['title'] = $lwid_front_page_title; return $parts; } add_filter('document_title_parts', 'lwid_filter_front_page_document_title_parts', 99); function lwid_filter_rank_math_front_page_title($title) { global $lwid_front_page_title; if (!empty($lwid_front_page_title)) return $lwid_front_page_title; return $title; } add_filter('rank_math/frontend/title', 'lwid_filter_rank_math_front_page_title', 99); add_filter('rank_math/opengraph/facebook/title', 'lwid_filter_rank_math_front_page_title', 99); add_filter('rank_math/opengraph/twitter/title', 'lwid_filter_rank_math_front_page_title', 99); function lwid_filter_rank_math_front_page_desc($desc) { global $lwid_front_page_desc; if (!empty($lwid_front_page_desc)) return $lwid_front_page_desc; return $desc; } add_filter('rank_math/frontend/description', 'lwid_filter_rank_math_front_page_desc', 99); add_filter('rank_math/opengraph/facebook/description', 'lwid_filter_rank_math_front_page_desc', 99); add_filter('rank_math/opengraph/twitter/description', 'lwid_filter_rank_math_front_page_desc', 99); // Contact form function lwid_contact_handler() { if (empty($_POST['lwid_contact_nonce'])) return; if (!wp_verify_nonce($_POST['lwid_contact_nonce'], 'lwid_contact')) return; if (empty($_POST['lwid_contact_submit'])) return; $name = isset($_POST['lwid_name']) ? sanitize_text_field($_POST['lwid_name']) : ''; $email = isset($_POST['lwid_email']) ? sanitize_email($_POST['lwid_email']) : ''; $subject = isset($_POST['lwid_subject']) ? sanitize_text_field($_POST['lwid_subject']) : 'Contact Form'; $message = isset($_POST['lwid_message']) ? sanitize_textarea_field($_POST['lwid_message']) : ''; if (!$name || !$email || !$message || !is_email($email)) { set_transient('lwid_cf_error', 'Please complete all required fields with a valid email.', 60); return; } $headers = array('Content-Type: text/html; charset=UTF-8', 'Reply-To: '.$name.' <'.$email.'>'); $body = '<p><b>Name:</b> '.$name.'</p><p><b>Email:</b> '.$email.'</p><p><b>Subject:</b> '.$subject.'</p><p><b>Message:</b><br>'.nl2br($message).'</p>'; if (wp_mail(get_option('admin_email'), 'lookwhatidig: '.$subject, $body, $headers)) { set_transient('lwid_cf_success', 'Message sent! We reply within 24 hours.', 60); } else { set_transient('lwid_cf_error', 'Send failed. Please email us directly.', 60); } } add_action('init', 'lwid_contact_handler'); // Email signup function lwid_signup_handler() { if (empty($_POST['lwid_signup_nonce'])) return; if (!wp_verify_nonce($_POST['lwid_signup_nonce'], 'lwid_signup')) return; if (empty($_POST['lwid_signup_submit'])) return; $email = isset($_POST['lwid_signup_email']) ? sanitize_email($_POST['lwid_signup_email']) : ''; if (!is_email($email)) { set_transient('lwid_su_error', 'Please enter a valid email address.', 60); return; } $api = defined('MAILERLITE_API_KEY') ? MAILERLITE_API_KEY : ''; $grp = defined('MAILERLITE_GROUP_ID') ? MAILERLITE_GROUP_ID : ''; if (!$api) { $list = get_option('lwid_signups', array()); $list[] = array('email' => $email, 'date' => current_time('mysql')); update_option('lwid_signups', $list); set_transient('lwid_su_ok_'.md5($email), 1, 120); return; } $groups = $grp ? array($grp) : array(); $r = wp_remote_post('https://connect.mailerlite.com/api/subscribers', array( 'headers' => array('Content-Type' => 'application/json', 'Authorization' => 'Bearer '.$api), 'body' => json_encode(array('email' => $email, 'groups' => $groups)), 'timeout' => 15, )); $code = is_wp_error($r) ? 0 : wp_remote_retrieve_response_code($r); if ($code === 200 || $code === 201) { set_transient('lwid_su_ok_'.md5($email), 1, 120); } else { set_transient('lwid_su_error', 'Something went wrong. Please try again.', 60); } } add_action('init', 'lwid_signup_handler'); function lwid_signup_form($atts = array()) { $dark = (isset($atts['style']) ? $atts['style'] : 'dark') === 'dark'; $email = isset($_POST['lwid_signup_email']) ? sanitize_email($_POST['lwid_signup_email']) : ''; $ok = $email ? get_transient('lwid_su_ok_'.md5($email)) : false; $err = get_transient('lwid_su_error'); if ($err) delete_transient('lwid_su_error'); if ($dark) { $c = array('txt'=>'#fff','sub'=>'rgba(255,255,255,0.4)','inp_bg'=>'rgba(255,255,255,0.07)','inp_br'=>'rgba(255,255,255,0.15)'); } else { $c = array('txt'=>'#0d1b2a','sub'=>'#5a6272','inp_bg'=>'#fff','inp_br'=>'rgba(0,0,0,0.15)'); } ob_start(); if ($ok): ?> <div style="text-align:center;padding:1rem 0"><div style="font-size:2rem;margin-bottom:.5rem">🎉</div><p style="color:<?php echo $c['txt']; ?>;font-weight:500;margin:0">You're in! Check your inbox.</p></div> <?php else: ?> <?php if ($err): ?><p style="color:#ff6b6b;font-size:.875rem;margin-bottom:.5rem;text-align:center"><?php echo esc_html($err); ?></p><?php endif; ?> <form method="POST" action="<?php echo esc_url(get_permalink() ? get_permalink() : home_url('/')); ?>" style="display:flex;max-width:440px;margin:0 auto"> <?php wp_nonce_field('lwid_signup','lwid_signup_nonce'); ?> <input type="email" name="lwid_signup_email" required placeholder="Your email address" style="flex:1;padding:.875rem 1.125rem;border:1px solid <?php echo $c['inp_br']; ?>;background:<?php echo $c['inp_bg']; ?>;color:<?php echo $c['txt']; ?>;font-family:inherit;font-size:.9375rem;outline:none;border-radius:2px 0 0 2px"> <button type="submit" name="lwid_signup_submit" style="padding:.875rem 1.25rem;background:#c9a84c;color:#0d1b2a;border:none;font-family:inherit;font-size:.875rem;font-weight:600;cursor:pointer;border-radius:0 2px 2px 0;white-space:nowrap"> Get It Free → </button> </form> <?php endif; return ob_get_clean(); } add_shortcode('lwid_signup', 'lwid_signup_form'); function lwid_contact_form($atts = array()) { $ok = get_transient('lwid_cf_success'); $err = get_transient('lwid_cf_error'); if ($ok) delete_transient('lwid_cf_success'); if ($err) delete_transient('lwid_cf_error'); $is = 'width:100%;padding:.75rem 1rem;border:1px solid rgba(0,0,0,0.15);border-radius:2px;font-family:inherit;font-size:.9375rem;color:#2c2c2c;outline:none;box-sizing:border-box'; ob_start(); ?> <?php if ($ok): ?><div style="background:rgba(42,125,111,.08);border-left:4px solid #2a7d6f;padding:1rem 1.25rem;border-radius:0 4px 4px 0;color:#2a7d6f;margin-bottom:1.5rem">✓ <?php echo esc_html($ok); ?></div><?php endif; ?> <?php if ($err): ?><div style="background:rgba(200,50,50,.08);border-left:4px solid #c43232;padding:1rem 1.25rem;border-radius:0 4px 4px 0;color:#c43232;margin-bottom:1.5rem">✕ <?php echo esc_html($err); ?></div><?php endif; ?> <form method="POST" action="<?php echo esc_url(get_permalink()); ?>" style="display:flex;flex-direction:column;gap:1.125rem"> <?php wp_nonce_field('lwid_contact','lwid_contact_nonce'); ?> <div style="display:grid;grid-template-columns:1fr 1fr;gap:1.125rem"> <div><label style="display:block;font-size:.875rem;font-weight:500;color:#0d1b2a;margin-bottom:.375rem">Name *</label><input type="text" name="lwid_name" required placeholder="Your name" style="<?php echo $is; ?>"></div> <div><label style="display:block;font-size:.875rem;font-weight:500;color:#0d1b2a;margin-bottom:.375rem">Email *</label><input type="email" name="lwid_email" required placeholder="you@example.com" style="<?php echo $is; ?>"></div> </div> <div><label style="display:block;font-size:.875rem;font-weight:500;color:#0d1b2a;margin-bottom:.375rem">Subject</label><input type="text" name="lwid_subject" placeholder="What's this about?" style="<?php echo $is; ?>"></div> <div><label style="display:block;font-size:.875rem;font-weight:500;color:#0d1b2a;margin-bottom:.375rem">Message *</label><textarea name="lwid_message" required rows="6" placeholder="Tell us what's on your mind..." style="<?php echo $is; ?>;resize:vertical"></textarea></div> <div><button type="submit" name="lwid_contact_submit" style="background:#c9a84c;color:#0d1b2a;padding:.875rem 2rem;border:none;border-radius:2px;font-family:inherit;font-size:.9375rem;font-weight:600;cursor:pointer">Send Message →</button></div> </form> <?php return ob_get_clean(); } add_shortcode('lwid_contact', 'lwid_contact_form'); add_shortcode('lwid_contact_form', 'lwid_contact_form'); /** * Reading time helper */ function lwid_reading_time() { $words = str_word_count(strip_tags(get_post_field('post_content', get_the_ID()))); $min = max(1, ceil($words / 200)); return $min . ' min read'; } /** * MailerLite form shortcode handler (replaces plugin) */ add_shortcode('mailerlite_form', function($atts) { $atts = shortcode_atts(array('form_id' => '1'), $atts, 'mailerlite_form'); return do_shortcode('[lwid_signup]'); }); /* ═══════════════════════════════════════════════════════════════ AFFILIATE ENGINE — Minimal, self-contained monetization ═══════════════════════════════════════════════════════════════ */ // Force rewrite flush once add_action('init', function() { if (get_option('lwid_rewrite_flushed') != '1') { flush_rewrite_rules(); update_option('lwid_rewrite_flushed', '1'); } }, 99); // 1. Database tables function lwid_affiliate_tables() { global $wpdb; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $charset = $wpdb->get_charset_collate(); $links_sql = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}lwid_affiliate_links ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, slug varchar(64) NOT NULL, target_url text NOT NULL, tracking_id varchar(32) DEFAULT 'rodi04b-20', clicks bigint(20) DEFAULT 0, created datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY slug (slug) ) $charset;"; $clicks_sql = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}lwid_clicks ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, link_id bigint(20) NOT NULL, clicked_at datetime DEFAULT CURRENT_TIMESTAMP, referrer varchar(255) DEFAULT '', ip varchar(64) DEFAULT '', user_agent varchar(255) DEFAULT '', PRIMARY KEY (id) ) $charset;"; dbDelta($links_sql); dbDelta($clicks_sql); } add_action('after_setup_theme', 'lwid_affiliate_tables'); // 2. /go/ rewrite rules function lwid_affiliate_rewrite() { add_rewrite_rule('^go/([^/]+)/?$', 'index.php?lwid_go=$matches[1]', 'top'); add_rewrite_tag('%lwid_go%', '([^&]+)'); } add_action('init', 'lwid_affiliate_rewrite'); // 3. /go/ redirect + click tracking function lwid_affiliate_redirect() { global $wpdb; $slug = get_query_var('lwid_go'); if (!$slug) return; $link = $wpdb->get_row($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}lwid_affiliate_links WHERE slug = %s", $slug )); // Fallback hardcoded links if DB is empty if (!$link) { $fallbacks = array( 'magnesium' => array('target_url'=>'https://www.amazon.com/s?k=magnesium+glycinate+sleep','tracking_id'=>'rodi04b-20'), 'blue-light-glasses' => array('target_url'=>'https://www.amazon.com/s?k=blue+light+blocking+glasses+sleep','tracking_id'=>'rodi04b-20'), 'sleep-tracker' => array('target_url'=>'https://www.amazon.com/s?k=sleep+tracker+oura','tracking_id'=>'rodi04b-20'), 'pillow' => array('target_url'=>'https://www.amazon.com/s?k=best+pillow+for+sleep','tracking_id'=>'rodi04b-20'), 'mattress-pad' => array('target_url'=>'https://www.amazon.com/s?k=cooling+mattress+pad','tracking_id'=>'rodi04b-20'), 'sleep-mask' => array('target_url'=>'https://www.amazon.com/s?k=sleep+mask','tracking_id'=>'rodi04b-20'), 'melatonin' => array('target_url'=>'https://www.amazon.com/s?k=melatonin+sleep+supplement','tracking_id'=>'rodi04b-20'), 'blackout-curtains' => array('target_url'=>'https://www.amazon.com/s?k=blackout+curtains+sleep','tracking_id'=>'rodi04b-20'), 'standing-desk' => array('target_url'=>'https://www.amazon.com/s?k=standing+desk+electric','tracking_id'=>'rodi04b-20'), 'monitor' => array('target_url'=>'https://www.amazon.com/s?k=best+monitor+home+office','tracking_id'=>'rodi04b-20'), 'headphones' => array('target_url'=>'https://www.amazon.com/s?k=noise+cancelling+headphones','tracking_id'=>'rodi04b-20'), 'pomodoro' => array('target_url'=>'https://www.amazon.com/s?k=timer+productivity','tracking_id'=>'rodi04b-20'), 'red-light-therapy' => array('target_url'=>'https://www.amazon.com/s?k=red+light+therapy+panel','tracking_id'=>'rodi04b-20'), 'cold-plunge' => array('target_url'=>'https://www.amazon.com/s?k=cold+plunge+tub+ice+bath','tracking_id'=>'rodi04b-20'), 'nootropics' => array('target_url'=>'https://www.amazon.com/s?k=nootropics+focus+memory','tracking_id'=>'rodi04b-20'), 'cgm' => array('target_url'=>'https://www.amazon.com/s?k=continuous+glucose+monitor','tracking_id'=>'rodi04b-20'), 'nad-supplements' => array('target_url'=>'https://www.amazon.com/s?k=nad+supplement+nmn+nr','tracking_id'=>'rodi04b-20'), 'breathwork' => array('target_url'=>'https://www.amazon.com/s?k=breathwork+device','tracking_id'=>'rodi04b-20'), 'sauna' => array('target_url'=>'https://www.amazon.com/s?k=infrared+sauna+home','tracking_id'=>'rodi04b-20'), 'adaptogens' => array('target_url'=>'https://www.amazon.com/s?k=adaptogen+supplements','tracking_id'=>'rodi04b-20'), 'fasting' => array('target_url'=>'https://www.amazon.com/s?k=intermittent+fasting+books','tracking_id'=>'rodi04b-20'), 'hrv-monitor' => array('target_url'=>'https://www.amazon.com/s?k=hrv+heart+rate+variability+monitor','tracking_id'=>'rodi04b-20'), ); if (isset($fallbacks[$slug])) { $link = (object)$fallbacks[$slug]; } } if ($link && !empty($link->target_url)) { $target = $link->target_url; if (strpos($target, 'tag=') === false && strpos($target, 'amazon.com') !== false) { $sep = (strpos($target, '?') !== false) ? '&' : '?'; $target .= $sep . 'tag=' . esc_attr($link->tracking_id); } wp_redirect(esc_url_raw($target), 302); exit; } wp_redirect(home_url('/'), 302); exit; } add_action('template_redirect', 'lwid_affiliate_redirect', 1); // Stop WordPress from guessing redirects for /go/ URLs function lwid_disable_redirect_guess($redirect_url) { if (get_query_var('lwid_go')) return false; if (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/go/') !== false) return false; return $redirect_url; } add_filter('redirect_canonical', 'lwid_disable_redirect_guess', 1); add_filter('do_redirect_guess_404_permalink', function($do_redirect) { if (isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], '/go/') !== false) return false; return $do_redirect; }); // 4. [affiliate] shortcode function lwid_affiliate_shortcode($atts) { global $wpdb; $atts = shortcode_atts(array('id' => '', 'text' => ''), $atts, 'affiliate'); if (empty($atts['id'])) return ''; $link = $wpdb->get_row($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}lwid_affiliate_links WHERE id = %d OR slug = %s", intval($atts['id']), sanitize_title($atts['id']) )); if (!$link) return ''; $text = $atts['text'] ?: 'Check Price on Amazon'; $url = home_url('/go/' . $link->slug . '/'); return '<a href="' . esc_url($url) . '" target="_blank" rel="nofollow sponsored noopener" style="display:inline-block;background:#c9a84c;color:#0d1b2a;padding:.75rem 1.5rem;border-radius:2px;text-decoration:none;font-weight:600;font-size:.9375rem;">' . esc_html($text) . ' &rarr;</a>'; } add_shortcode('affiliate', 'lwid_affiliate_shortcode'); // [go slug="sleep-mask" text="Check Sleep Masks on Amazon →"] add_shortcode('go', function($atts) { $atts = shortcode_atts(array('slug' => '', 'text' => ''), $atts, 'go'); if (empty($atts['slug'])) return ''; $slug = sanitize_title($atts['slug']); $text = $atts['text'] ?: 'Check on Amazon →'; $url = home_url('/go/' . $slug . '/'); return '<a href="' . esc_url($url) . '" target="_blank" rel="nofollow sponsored noopener" style="display:inline-block;background:#c9a84c;color:#0d1b2a;padding:.75rem 1.5rem;border-radius:2px;text-decoration:none;font-weight:600;font-size:.9375rem;">' . esc_html($text) . '</a>'; }); // 5. Internal auto-linking function lwid_internal_linking($content) { if (is_admin()) return $content; global $wpdb; $links = $wpdb->get_results("SELECT slug, target_url FROM {$wpdb->prefix}lwid_affiliate_links WHERE slug != ''"); if (!$links) return $content; // Protect existing links $placeholders = array(); $content = preg_replace_callback('/<a[^>]*>.*?<\/a>/i', function($m) use (&$placeholders) { $key = '___LINK' . count($placeholders) . '___'; $placeholders[$key] = $m[0]; return $key; }, $content); // Map slugs to keywords $map = array( 'magnesium' => ['magnesium glycinate', 'magnesium supplement', 'magnesium'], 'blue-light-glasses' => ['blue light glasses', 'blue-light glasses', 'blue light blocking'], 'sleep-tracker' => ['sleep tracker', 'Oura Ring', 'sleep tracking'], 'pillow' => ['pillow', 'sleep pillow'], 'mattress-pad' => ['cooling mattress pad', 'mattress pad', 'cooling pad'], 'sleep-mask' => ['sleep mask', 'eye mask'], 'melatonin' => ['melatonin', 'melatonin supplement'], 'blackout-curtains' => ['blackout curtains', 'blackout shades'], 'standing-desk' => ['standing desk', 'stand-up desk'], 'monitor' => ['monitor', 'home office monitor', 'productivity monitor'], 'headphones' => ['noise cancelling headphones', 'headphones', 'ANC headphones'], 'pomodoro' => ['Pomodoro app', 'Pomodoro timer'], ); $done = array(); foreach ($links as $link) { if (!isset($map[$link->slug])) continue; foreach ($map[$link->slug] as $kw) { $kw_esc = preg_quote($kw, '/'); $pattern = '/\b' . $kw_esc . '\b/i'; $content = preg_replace_callback($pattern, function($m) use ($link, &$done, $kw) { $key = $kw . '|' . $link->slug; if (isset($done[$key])) return $m[0]; $done[$key] = 1; return '<a href="' . esc_url(home_url('/go/' . $link->slug . '/')) . '" target="_blank" rel="nofollow sponsored noopener" data-aff="1">' . $m[0] . '</a>'; }, $content, 1); } } // Restore placeholders foreach ($placeholders as $key => $val) { $content = str_replace($key, $val, $content); } return $content; } add_filter('the_content', 'lwid_internal_linking', 15); // 6. Helper: create default links (idempotent — fills in missing ones) function lwid_seed_links() { global $wpdb; $table = $wpdb->prefix . 'lwid_affiliate_links'; // Ensure table exists lwid_affiliate_tables(); $links = array( array('slug'=>'magnesium','target_url'=>'https://www.amazon.com/s?k=magnesium+glycinate+sleep'), array('slug'=>'blue-light-glasses','target_url'=>'https://www.amazon.com/s?k=blue+light+blocking+glasses+sleep'), array('slug'=>'sleep-tracker','target_url'=>'https://www.amazon.com/s?k=sleep+tracker+oura'), array('slug'=>'pillow','target_url'=>'https://www.amazon.com/s?k=best+pillow+for+sleep'), array('slug'=>'mattress-pad','target_url'=>'https://www.amazon.com/s?k=cooling+mattress+pad'), array('slug'=>'sleep-mask','target_url'=>'https://www.amazon.com/s?k=sleep+mask'), array('slug'=>'melatonin','target_url'=>'https://www.amazon.com/s?k=melatonin+sleep+supplement'), array('slug'=>'blackout-curtains','target_url'=>'https://www.amazon.com/s?k=blackout+curtains+sleep'), array('slug'=>'standing-desk','target_url'=>'https://www.amazon.com/s?k=standing+desk+electric'), array('slug'=>'monitor','target_url'=>'https://www.amazon.com/s?k=best+monitor+home+office'), array('slug'=>'headphones','target_url'=>'https://www.amazon.com/s?k=noise+cancelling+headphones'), array('slug'=>'pomodoro','target_url'=>'https://www.amazon.com/s?k=timer+productivity'), ); foreach ($links as $link) { $exists = $wpdb->get_var($wpdb->prepare("SELECT id FROM $table WHERE slug = %s", $link['slug'])); if (!$exists) { $result = $wpdb->insert($table, array( 'slug' => $link['slug'], 'target_url' => $link['target_url'], 'tracking_id' => 'rodi04b-20', )); if ($result === false) { error_log('LWID affiliate seed failed for ' . $link['slug'] . ': ' . $wpdb->last_error); } } } // Force rewrite flush delete_option('lwid_rewrite_flushed'); } add_action('init', 'lwid_seed_links', 5); /* ═══════════════════════════════════════════════════════════════ END AFFILIATE ENGINE ═══════════════════════════════════════════════════════════════ */ /** * Post CTA boxes — product-specific Amazon affiliate buttons */ function lwid_post_cta_box($content) { if (!is_single() || is_admin()) return $content; $slug = get_post_field('post_name', get_the_ID()); $ctas = array( 'best-blue-light-glasses-sleep' => array('slug'=>'blue-light-glasses','title'=>'Best Blue Light Glasses for Sleep','desc'=>'Block harmful blue light and protect your melatonin production. These are the top-rated options for better sleep.'), 'magnesium-glycinate-vs-l-threonate-sleep' => array('slug'=>'magnesium','title'=>'Best Magnesium for Sleep','desc'=>'The right magnesium form makes a difference. These are the most effective sleep supplements based on research.'), 'best-magnesium-for-sleep' => array('slug'=>'magnesium','title'=>'Best Magnesium Supplements for Sleep','desc'=>'Clinically studied forms that actually improve sleep quality and reduce nighttime waking.'), 'best-sleep-tracker-2025' => array('slug'=>'sleep-tracker','title'=>'Best Sleep Trackers','desc'=>'Accurate sleep monitoring to understand your sleep architecture and optimize recovery.'), 'best-pillow-for-sleep-2025' => array('slug'=>'pillow','title'=>'Best Pillows for Sleep','desc'=>'The right pillow alignment reduces neck pain and improves breathing during sleep.'), 'best-cooling-mattress-pad-hot-sleepers' => array('slug'=>'mattress-pad','title'=>'Best Cooling Mattress Pads','desc'=>'Temperature-regulating pads that prevent overheating and night sweats.'), 'best-sleep-mask-2025' => array('slug'=>'sleep-mask','title'=>'Best Sleep Masks','desc'=>'Complete blackout for maximum melatonin production — especially useful for travel and shift work.'), 'best-melatonin-supplement-2025' => array('slug'=>'melatonin','title'=>'Best Melatonin Supplements','desc'=>'Properly dosed, pharmaceutical-grade melatonin for circadian rhythm support.'), 'best-blackout-curtains-sleep-2025' => array('slug'=>'blackout-curtains','title'=>'Best Blackout Curtains','desc'=>'True blackout curtains that eliminate light pollution and support natural melatonin cycles.'), 'best-white-noise-machine-sleep-2025' => array('slug'=>'headphones','title'=>'Best Sleep Sound Solutions','desc'=>'White noise machines and sleep headphones that mask environmental noise.'), 'best-red-light-therapy-devices-2026' => array('slug'=>'red-light-therapy','title'=>'Best Red Light Therapy Devices','desc'=>'Clinical-grade panels with accurate 660/850nm wavelengths. The best devices for sleep, recovery, and skin health.'), 'cold-plunge-benefits-science' => array('slug'=>'cold-plunge','title'=>'Best Cold Plunge Tubs','desc'=>'Ice bath setups for inflammation reduction, dopamine boosting, and deeper sleep. From stock tanks to chest freezer conversions.'), 'best-nootropics-focus-memory-2026' => array('slug'=>'nootropics','title'=>'Best Nootropics for Focus','desc'=>'Cognitive enhancers that actually improve working memory and verbal fluency. Tested with dual n-back protocols.'), 'cgm-continuous-glucose-monitor-non-diabetics' => array('slug'=>'cgm','title'=>'Best Continuous Glucose Monitors','desc'=>'Wearable glucose tracking for metabolic optimization, even without diabetes. Real-time feedback on food and sleep.'), 'nad-supplements-nmn-nr-longevity' => array('slug'=>'nad-supplements','title'=>'Best NAD+ Supplements','desc'=>'NMN and NR supplements for cellular energy, longevity, and DNA repair. What the research actually shows.'), 'breathwork-techniques-performance-science' => array('slug'=>'breathwork','title'=>'Best Breathwork Devices','desc'=>'Tools for controlled breathing exercises that lower cortisol, improve HRV, and deepen sleep.'), 'best-home-sauna-infrared-vs-traditional-2026' => array('slug'=>'sauna','title'=>'Best Home Infrared Saunas','desc'=>'Compact infrared cabins for detox, cardiovascular health, and heat shock protein activation.'), 'best-adaptogens-stress-performance-2026' => array('slug'=>'adaptogens','title'=>'Best Adaptogen Supplements','desc'=>'Ashwagandha, rhodiola, and holy basil for cortisol management, stress resilience, and balanced energy.'), 'intermittent-fasting-biohacking-science' => array('slug'=>'fasting','title'=>'Best Intermittent Fasting Tools','desc'=>'Apps, timers, and books for structured fasting protocols that boost autophagy and metabolic flexibility.'), 'hrv-training-heart-rate-variability-guide' => array('slug'=>'hrv-monitor','title'=>'Best HRV Monitors','desc'=>'Heart rate variability wearables for nervous system training, stress tracking, and recovery optimization.'), 'best-standing-desk-2026' => array('slug'=>'standing-desk','title'=>'Best Standing Desks','desc'=>'Electric standing desks with dual motors, memory presets, and solid build quality.'), 'best-monitor-home-office-productivity-2026' => array('slug'=>'monitor','title'=>'Best Monitors for Productivity','desc'=>'4K and ultrawide monitors that reduce eye strain and increase screen real estate.'), 'best-noise-cancelling-headphones-focus-2026' => array('slug'=>'headphones','title'=>'Best Noise Cancelling Headphones','desc'=>'ANC headphones that eliminate distractions for deep work and concentration.'), 'best-pomodoro-apps-timers' => array('slug'=>'pomodoro','title'=>'Best Pomodoro Timers','desc'=>'Physical and digital timers that enforce the 25-minute focused work cycle.'), 'best-ergonomic-chair-home-office-2026' => array('slug'=>'standing-desk','title'=>'Best Ergonomic Office Chairs','desc'=>'Chairs with proper lumbar support, adjustable armrests, and breathable mesh.'), 'time-blocking-apps-methods' => array('slug'=>'pomodoro','title'=>'Best Time Blocking Tools','desc'=>'Planners and apps for scheduling every hour of your workday effectively.'), ); if (!isset($ctas[$slug])) return $content; $cta = $ctas[$slug]; $url = home_url('/go/' . $cta['slug'] . '/'); $box = '<div style="margin:2rem 0;padding:1.5rem;background:#f8f6f0;border:1px solid rgba(0,0,0,0.08);border-radius:4px;">'; $box .= '<h3 style="margin:0 0 0.5rem;font-size:1.15rem;color:#0d1b2a;">' . esc_html($cta['title']) . '</h3>'; $box .= '<p style="margin:0 0 1rem;color:rgba(0,0,0,0.55);font-size:0.9rem;line-height:1.5;">' . esc_html($cta['desc']) . '</p>'; $box .= '<a href="' . esc_url($url) . '" target="_blank" rel="nofollow sponsored noopener" style="display:inline-block;background:#c9a84c;color:#0d1b2a;padding:0.75rem 1.5rem;border-radius:2px;text-decoration:none;font-weight:600;font-size:0.9375rem;">View on Amazon &rarr;</a>'; $box .= '</div>'; return $content . $box; } add_filter('the_content', 'lwid_post_cta_box', 20); /** * Category card click fix — makes cards and "Read more" links clickable */ add_action('wp_footer', function() { if (!is_category() && !is_archive() && !is_home()) return; ?> <script id="lwid-card-click-fix"> (function() { document.querySelectorAll('.lwid-card').forEach(function(card) { var link = card.querySelector('a[href]'); if (!link) return; var url = link.href; // Make entire card clickable card.style.cursor = 'pointer'; card.addEventListener('click', function(e) { if (e.target.closest('a') || e.target.closest('button')) return; window.location.href = url; }); // Fix "Read more →" — wrap in actual <a> tag var cta = card.querySelector('.lwid-card-cta'); if (cta && cta.tagName !== 'A') { var a = document.createElement('a'); a.href = url; a.className = cta.className; a.style.cssText = 'font-size:.8125rem;font-weight:500;color:var(--gold);letter-spacing:.04em;text-decoration:none;display:inline-block;cursor:pointer;'; a.innerHTML = cta.innerHTML; a.onmouseover = function() { this.style.textDecoration = 'underline'; }; a.onmouseout = function() { this.style.textDecoration = 'none'; }; cta.parentNode.replaceChild(a, cta); } // Also fix plain-text "Read more" spans without the class card.querySelectorAll('span, div, p, em, strong').forEach(function(el) { var text = el.textContent.trim(); if (/Read\s*more/i.test(text)) { if (el.tagName === 'A') return; var a2 = document.createElement('a'); a2.href = url; a2.className = 'lwid-card-cta'; a2.style.cssText = 'font-size:.8125rem;font-weight:500;color:var(--gold);letter-spacing:.04em;text-decoration:none;display:inline-block;cursor:pointer;'; a2.innerHTML = el.innerHTML; a2.onmouseover = function() { this.style.textDecoration = 'underline'; }; a2.onmouseout = function() { this.style.textDecoration = 'none'; }; el.parentNode.replaceChild(a2, el); } }); // Fix "Read more →" — find by text content and wrap in <a> card.querySelectorAll('span, div, p, em, strong').forEach(function(el) { if (el.textContent.trim() === 'Read more →' || el.textContent.includes('Read more →')) { if (el.tagName === 'A') return; var a = document.createElement('a'); a.href = url; a.className = 'lwid-card-cta'; a.style.cssText = 'font-size:.8125rem;font-weight:500;color:var(--gold);letter-spacing:.04em;text-decoration:none;display:inline-block;cursor:pointer;'; a.innerHTML = el.innerHTML; a.onmouseover = function() { this.style.textDecoration = 'underline'; }; a.onmouseout = function() { this.style.textDecoration = 'none'; }; el.parentNode.replaceChild(a, el); } }); }); })(); </script> <?php }, 100); add_action('wp_head', function() { if (!is_category() && !is_archive() && !is_home()) return; echo '<style>.lwid-card{cursor:pointer}.lwid-card a[href]{text-decoration:none;color:inherit}.lwid-card-cta,.lwid-card span{font-size:.8125rem;font-weight:500;color:var(--gold);letter-spacing:.04em}.lwid-card-cta:hover,.lwid-card span:hover{text-decoration:underline;cursor:pointer}</style>'; }, 100); /** * Category card click fix — CSS + JS (no regex, works with invalid nested HTML) */ add_action('wp_head', function() { if (!is_category() && !is_archive() && !is_home()) return; echo '<style id="lwid-card-fix"> .lwid-card { display:block; cursor:pointer; text-decoration:none; color:inherit; } .lwid-card-cta, .lwid-card span, .lwid-card div { pointer-events:none; } .lwid-card a { pointer-events:auto; } .lwid-card:hover .lwid-card-title { color:var(--gold); } </style>'; }, 1); add_action('wp_footer', function() { if (!is_category() && !is_archive() && !is_home()) return; ?> <script id="lwid-card-click"> (function() { // Find all card containers (the parent wrapper, not just .lwid-card) document.querySelectorAll('.lwid-arch-grid > *').forEach(function(cardWrapper) { // Find the main post link inside this card var mainLink = cardWrapper.querySelector('a.lwid-card[href]'); if (!mainLink) { // Fallback: find any link with the post URL pattern var allLinks = cardWrapper.querySelectorAll('a[href]'); for (var i = 0; i < allLinks.length; i++) { var href = allLinks[i].getAttribute('href'); if (href && href.indexOf('/20') > 0 && href.indexOf('category') === -1 && href.indexOf('tag') === -1) { mainLink = allLinks[i]; break; } } } if (!mainLink) return; var postUrl = mainLink.getAttribute('href'); // Make the entire wrapper clickable cardWrapper.style.cursor = 'pointer'; cardWrapper.addEventListener('click', function(e) { // If clicking an actual link or button, let it work normally if (e.target.closest('a') || e.target.closest('button')) return; window.location.href = postUrl; }); // Find and fix "Read more" text var readmore = cardWrapper.querySelector('.lwid-card-cta'); if (readmore && readmore.tagName !== 'A') { readmore.style.pointerEvents = 'none'; } // Wrap plain "Read more" text in an <a> if it's not already cardWrapper.querySelectorAll('span, div, p').forEach(function(el) { if (el.textContent && el.textContent.indexOf('Read more') > -1) { if (el.tagName === 'A') return; var a = document.createElement('a'); a.href = postUrl; a.className = 'lwid-card-cta'; a.style.cssText = 'font-size:.8125rem;font-weight:500;color:var(--gold);letter-spacing:.04em;text-decoration:none;display:inline-block;cursor:pointer;'; a.innerHTML = el.innerHTML; el.parentNode.replaceChild(a, el); } }); }); })(); </script> <?php }, 100); /** * VigLink — Automatic affiliate link monetization */ add_action('wp_footer', function() { ?> <script type="text/javascript"> var vglnk = {key: '68659f7564d229c3ce6d890e3b582d7a'}; (function(d, t) { var s = d.createElement(t); s.type = 'text/javascript'; s.async = true; s.src = '//cdn.viglink.com/api/vglnk.js'; var r = d.getElementsByTagName(t)[0]; r.parentNode.insertBefore(s, r); }(document, 'script')); </script> <?php }, 999); https://lookwhatidig.com/post-sitemap.xml 2026-04-11T15:33:21+00:00 https://lookwhatidig.com/page-sitemap.xml 2026-03-24T22:47:24+00:00 https://lookwhatidig.com/category-sitemap.xml 2026-04-11T15:33:21+00:00