<?php
use WprAddons\Classes\Utilities;
class WPR_WooCommerce_Config {
public function __construct() {
add_action('wp_ajax_wpr_addons_add_cart_single_product', [$this, 'add_cart_single_product_ajax']);
add_action('wp_ajax_nopriv_wpr_addons_add_cart_single_product', [$this, 'add_cart_single_product_ajax']);
if ( 'on' == get_option('wpr_enable_woo_flexslider_navigation', 'on') ) {
add_filter('woocommerce_single_product_carousel_options', [$this, 'wpr_update_woo_flexslider_options']);
}
if ( 'on' !== get_option('wpr_enable_product_image_zoom', 'on') ) {
add_filter( 'woocommerce_single_product_zoom_enabled', '__return_false' );
}
if ( 'on' !== get_option('wpr_remove_wc_default_lightbox', 'on') ) {
add_action( 'wp',[$this, 'wpr_remove_wc_lightbox'], 99 );
// add_filter( 'body_class', [$this, 'wpr_remove_elementor_lightbox'] ); //: TODO condition
}
// Change number of products that are displayed per page (shop page)
add_filter( 'loop_shop_per_page', [$this, 'shop_products_per_page'], 20 );
// Rewrite WC Default Templates
add_filter( 'wc_get_template', [ $this, 'rewrite_default_wc_templates' ], 10, 3 );
// Mini-cart template
if ( 'on' === get_option('wpr_override_woo_mini_cart', 'on') ) {
add_filter( 'woocommerce_add_to_cart_fragments', [$this, 'wc_refresh_mini_cart_count']);
}
// Fix Theme Builder issues
if ( !is_admin() ) {
add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'maybe_init_cart' ] );
add_action( 'init', [ $this, 'register_wc_hooks' ], 5 );
}
if ( is_admin() ) {
$template = isset($_GET['post']) ? sanitize_text_field(wp_unslash($_GET['post'])) : '';
if ( $template_type = Utilities::get_wpr_template_type($template) ) {
add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'maybe_init_cart' ] );
add_action( 'init', [ $this, 'register_wc_hooks' ], 5 );
}
}
add_action( 'init', [$this, 'add_wishlist_endpoint'] );
if ( 'on' == get_option('wpr_add_wishlist_to_my_account', 'on') && defined('WPR_ADDONS_PRO_VERSION') && wpr_fs()->is_plan( 'expert' ) ) {
add_filter( 'woocommerce_account_menu_items', [$this, 'add_wishlist_to_my_account'] );
}
add_action( 'woocommerce_after_register_post_type', [$this, 'remove_deleted_products_from_compare_and_wishlist'] );
//TODO: GOGA - max & min issue
// add_filter( 'woocommerce_quantity_input_args', [$this, 'wpr_custom_quantity_step'], 10, 2 );
}
function add_wishlist_endpoint() {
add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES );
}
function wpr_custom_quantity_step( $args, $product ) {
if ( $args['input_value'] < 8 ) {
$args['input_value'] = 8; // Start from this value
}
// $args['max_value'] = 80; // Maximum value
$args['min_value'] = 8; // Minimum value
$args['step'] = 8; // Increment/decrement by this value
return $args;
}
function add_wishlist_to_my_account( $items ) {
$items['wishlist'] = __( 'Wishlist', 'wpr-addons' );
return $items;
}
function remove_deleted_products_from_compare_and_wishlist() {
$compare = get_user_meta( get_current_user_id(), 'wpr_compare', true );
if ( ! $compare ) {
$compare = array();
}
foreach ( $compare as $key => $value ) {
$product = wc_get_product( $value );
if ( ! $product || 'trash' === get_post_status( $value ) ) {
$compare = array_diff( $compare, array( $value ) );
}
}
update_user_meta( get_current_user_id(), 'wpr_compare', $compare );
$wishlist = get_user_meta( get_current_user_id(), 'wpr_wishlist', true );
if ( ! $wishlist ) {
$wishlist = array();
}
foreach ( $wishlist as $key => $value ) {
$product = wc_get_product( $value );
if ( ! $product || 'trash' === get_post_status( $value ) ) {
$wishlist = array_diff( $wishlist, array( $value ) );
}
}
update_user_meta( get_current_user_id(), 'wpr_wishlist', $wishlist );
}
function wpr_remove_elementor_lightbox( $classes ) {
$classes[] = 'wpr-no-lightbox';
// Return classes
return $classes;
}
function wpr_remove_wc_lightbox() {
remove_theme_support( 'wc-product-gallery-lightbox' );
}
function wc_refresh_mini_cart_count($fragments) {
ob_start();
$items_count = WC()->cart->get_cart_contents_count();
?>
<span class="wpr-mini-cart-icon-count <?php echo $items_count ? '' : 'wpr-mini-cart-icon-count-hidden'; ?>"><span><?php echo $items_count ? $items_count : '0'; ?></span></span>
<?php
$fragments['.wpr-mini-cart-icon-count'] = ob_get_clean();
ob_start();
$sub_total = WC()->cart->get_cart_subtotal();
?>
<span class="wpr-mini-cart-btn-price">
<?php
echo $sub_total;
?>
</span>
<?php
$fragments['.wpr-mini-cart-btn-price'] = ob_get_clean();
return $fragments;
}
public function add_cart_single_product_ajax() {
add_action( 'wp_loaded', [ 'WC_Form_Handler', 'add_to_cart_action' ], 20 );
if ( is_callable( [ 'WC_AJAX', 'get_refreshed_fragments' ] ) ) {
WC_AJAX::get_refreshed_fragments();
}
die();
}
public function wpr_update_woo_flexslider_options( $options ) {
$options['directionNav'] = true;
return $options;
}
public function shop_products_per_page( $cols ) {
return get_option('wpr_woo_shop_ppp', 9);
}
public function rewrite_default_wc_templates( $located, $template_name ) {
// GOGA: needs separate conditions
// Cart template
if ( $template_name === 'cart/cart.php' && 'on' === get_option('wpr_override_woo_cart', 'on') ) {
$located = WPR_ADDONS_PATH .'includes/woocommerce/templates/cart/cart.php';
}
// Mini-cart template
if ( $template_name === 'cart/mini-cart.php' && 'on' === get_option('wpr_override_woo_mini_cart', 'on') ) {
$located = WPR_ADDONS_PATH .'includes/woocommerce/templates/cart/mini-cart.php';
}
if ( 'on' === get_option('wpr_override_woo_mini_cart', 'on') ) {
if ( $template_name === 'notices/success.php' ) {
$located = WPR_ADDONS_PATH .'includes/woocommerce/templates/notices/success.php';
}
if ( $template_name === 'notices/error.php' ) {
$located = WPR_ADDONS_PATH .'includes/woocommerce/templates/notices/error.php';
}
if ( $template_name === 'notices/notice.php' ) {
$located = WPR_ADDONS_PATH .'includes/woocommerce/templates/notices/notice.php';
}
}
// if ( $template_name === 'cart/cart-empty.php' ) {
// }
// if ( $template_name === 'checkout/form-checkout.php' ) {
// }
return $located;
}
public function register_wc_hooks() {
wc()->frontend_includes();
}
public function maybe_init_cart() {
$has_cart = is_a( WC()->cart, 'WC_Cart' );
if ( ! $has_cart ) {
$session_class = apply_filters( 'woocommerce_session_handler', 'WC_Session_Handler' );
WC()->session = new $session_class();
WC()->session->init();
WC()->cart = new \WC_Cart();
WC()->customer = new \WC_Customer( get_current_user_id(), true );
}
}
}
new WPR_WooCommerce_Config();