109 lines
2.9 KiB
PHP
Executable File
109 lines
2.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Booster for WooCommerce - Module - URL Coupons
|
|
*
|
|
* @version 3.6.0
|
|
* @since 2.9.1
|
|
* @author Algoritmika Ltd.
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
|
|
if ( ! class_exists( 'WCJ_URL_Coupons' ) ) :
|
|
|
|
class WCJ_URL_Coupons extends WCJ_Module {
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @version 2.9.1
|
|
* @since 2.9.1
|
|
*/
|
|
function __construct() {
|
|
|
|
$this->id = 'url_coupons';
|
|
$this->short_desc = __( 'URL Coupons', 'woocommerce-jetpack' );
|
|
$this->desc = __( 'WooCommerce URL coupons.', 'woocommerce-jetpack' );
|
|
$this->link_slug = 'woocommerce-url-coupons';
|
|
parent::__construct();
|
|
|
|
if ( $this->is_enabled() ) {
|
|
add_action( 'wp_loaded', array( $this, 'maybe_apply_url_coupon' ), PHP_INT_MAX );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* get_redirect_url.
|
|
*
|
|
* @version 2.9.1
|
|
* @since 2.9.1
|
|
*/
|
|
function get_redirect_url( $arg_key ) {
|
|
switch ( apply_filters( 'booster_option', 'no', get_option( 'wcj_url_coupons_redirect', 'no' ) ) ) {
|
|
case 'cart':
|
|
return wc_get_cart_url();
|
|
case 'checkout':
|
|
return wc_get_checkout_url();
|
|
case 'custom':
|
|
return get_option( 'wcj_url_coupons_redirect_custom_url', '' );
|
|
default: // 'no'
|
|
return remove_query_arg( $arg_key );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* maybe_add_products_to_cart.
|
|
*
|
|
* @version 3.6.0
|
|
* @since 2.9.1
|
|
* @todo (maybe) check if coupon is valid
|
|
*/
|
|
function maybe_add_products_to_cart( $coupon_code ) {
|
|
if ( 'no' === apply_filters( 'booster_option', 'no', get_option( 'wcj_url_coupons_fixed_product_discount_add_products', 'no' ) ) ) {
|
|
return false;
|
|
}
|
|
// Coupons are globally disabled.
|
|
if ( ! wc_coupons_enabled() ) {
|
|
return false;
|
|
}
|
|
// Sanitize coupon code.
|
|
$coupon_code = wc_format_coupon_code( $coupon_code );
|
|
// Get the coupon.
|
|
$the_coupon = new WC_Coupon( $coupon_code );
|
|
if ( 'fixed_product' === $the_coupon->get_discount_type() ) {
|
|
$product_ids = $the_coupon->get_product_ids();
|
|
if ( ! empty( $product_ids ) ) {
|
|
foreach ( $product_ids as $product_id ) {
|
|
if ( ! wcj_is_product_in_cart( $product_id ) ) {
|
|
WC()->cart->add_to_cart( $product_id );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* maybe_apply_url_coupon.
|
|
*
|
|
* @version 2.9.1
|
|
* @since 2.7.0
|
|
* @todo (maybe) options to add products to cart with query arg
|
|
* @todo (maybe) if ( ! WC()->cart->has_discount( $coupon_code ) ) {}
|
|
*/
|
|
function maybe_apply_url_coupon() {
|
|
$arg_key = get_option( 'wcj_url_coupons_key', 'wcj_apply_coupon' );
|
|
if ( isset( $_GET[ $arg_key ] ) && '' != $_GET[ $arg_key ] ) {
|
|
$coupon_code = sanitize_text_field( $_GET[ $arg_key ] );
|
|
$this->maybe_add_products_to_cart( $coupon_code );
|
|
WC()->cart->add_discount( $coupon_code );
|
|
wp_safe_redirect( $this->get_redirect_url( $arg_key ) );
|
|
exit;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
endif;
|
|
|
|
return new WCJ_URL_Coupons();
|