add_filter(‘woocommerce_coupon_is_valid’, ‘block_employee_coupon_usage’, 10, 3); function block_employee_coupon_usage($valid, $coupon, $discount) { if (is_user_logged_in()) { $user = wp_get_current_user(); if (in_array(’employee’, (array) $user->roles) || in_array(‘owner’, (array) $user->roles)) { wc_add_notice(__(‘Employees are not allowed to use coupons.’, ‘woocommerce’), ‘error’); return false; } } return $valid; }Continue reading
add_action(‘save_post_shop_coupon’, function($post_id, $post, $update) { if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) { return; } if ($post->post_type !== ‘shop_coupon’) { return; } if ($post->post_status !== ‘publish’ && $post->post_status !== ‘draft’ && $post->post_status !== ‘pending’) { return; } if (get_post_meta($post_id, ‘_tune_imported’, true)) { return;…Continue reading
/** * Handle Meta (Facebook/Instagram Shops) checkout URLs * Format: /checkout?products=wc_post_id_123:2,wc_post_id_456:1&coupon=CODE */ add_action( ‘template_redirect’, function() { if ( ! isset( $_GET[‘products’] ) ) { return; } // Ensure WooCommerce is loaded and cart is available if ( ! function_exists( ‘WC’…Continue reading
/** * WooCommerce: cookie-driven auto-coupon using the coupon’s own restrictions * – URL: ?bllpromo=COUPONCODE -> sets cookie bllpromo=COUPONCODE for 30 days * – If cookie exists and coupon is valid for the current cart (per ALL restrictions), * the coupon…Continue reading
add_filter( ‘woocommerce_coupon_message’, function( $msg, $msg_code, $coupon ) { if ( $msg_code === ‘coupon_already_applied’ ) { return ”; // hide the message } return $msg; }, 10, 3 );Continue reading
add_filter( ‘woocommerce_get_availability_text’, ‘wsp_custom_coming_soon_text’, 10, 2 ); function wsp_custom_coming_soon_text( $text, $product ) { if ( ! $product ) { return $text; } // Get the correct product ID (parent for variations) $product_id = $product->get_id(); if ( $product->is_type( ‘variation’ ) ) {…Continue reading
add_filter( ‘action_scheduler_default_cleaner_statuses’, function ( $statuses ) { $statuses[] = ‘failed’; return $statuses; } ); add_filter( ‘action_scheduler_retention_period’, ‘custom_action_scheduler_retention’ ); /** * Change Action Scheduler default purge to 1 day */ function custom_action_scheduler_retention() { return DAY_IN_SECONDS; // DAY_IN_SECONDS is a built-in WordPress…Continue reading
add_action(‘age_gate/custom/after’, ‘my_custom_fields’); function my_custom_fields() { echo ‘ I agree and understand that certain products on this site are intended for research use only, as defined by the FDA. I also agree to the Research Use Only Policy of this site.‘;…Continue reading
/** * Scoped From header override for Magic Login Pro emails only. * * Conditions: * – Subject contains “Log in to” * – Body contains Magic Login expiry string */ add_filter(‘wp_mail’, function ($args) { $subject = isset($args[‘subject’]) ? (string)…Continue reading
if ( ! function_exists( ‘rw_geo_search_after_header_1280_mobile’ ) ) { add_action( ‘kadence_after_header’, ‘rw_geo_search_after_header_1280_mobile’ ); function rw_geo_search_after_header_1280_mobile() { if ( is_admin() ) { return; } echo ‘ ‘; echo ‘ ‘; echo do_shortcode( ‘[geo_search_mobile]’ ); echo ‘ ‘; echo ‘ ‘; } }Continue reading