• File: wpr-add-remove-from-compare.php
  • Full Path: /home/bravrvjk/hpgt.org/wp-content/plugins/royal-elementor-addons/classes/woocommerce/wpr-add-remove-from-compare.php
  • Date Modified: 04/10/2026 2:58 PM
  • File size: 4.82 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
namespace WprAddons\Classes;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * WPR_Add_Remove_From_Compare setup
 *
 * @since 1.0
 */
class WPR_Add_Remove_From_Compare { 

    /**
    ** Constructor
    */
    public function __construct() {
        // add_action('init', [$this, 'register_compare_cpt']);
        add_action( 'wp_ajax_add_to_compare',[$this, 'add_to_compare'] );
        add_action( 'wp_ajax_nopriv_add_to_compare',[$this, 'add_to_compare'] );
        add_action( 'wp_ajax_remove_from_compare', [$this, 'remove_from_compare'] );
        add_action( 'wp_ajax_nopriv_remove_from_compare', [$this, 'remove_from_compare'] );
    }

    // // Register Post Type
    // function register_compare_cpt() {
    //     $args = array(
    //         'label'				  => esc_html__( 'Royal compare', 'wpr-addons' ),
    //         'public'              => true,
    //         'publicly_queryable'  => true,
    //         'rewrite'             => false,
    //         'show_ui'             => true,
    //         'show_in_menu'        => true,
    //         'show_in_nav_menus'   => false,
    //         'exclude_from_search' => true,
    //         'capability_type'     => 'post',
    //         'supports'            => array( 'title', 'editor', 'elementor' ),
    //         'hierarchical'        => false,
    //     );
    
    //     register_post_type( 'compare', $args );
    // }
    
    function add_to_compare() {
        $nonce = $_POST['nonce'];

        if ( ! wp_verify_nonce( $nonce, 'wpr-addons-js' ) || ! isset( $_POST['product_id'] ) ) {
            return;
        }

        $product_id = intval( $_POST['product_id'] );
        $user_id = get_current_user_id();

        // $compare = get_user_meta( get_current_user_id(), 'wpr_compare', true );
        // if ( ! $compare ) {
        //     $compare = array();
        // }
        // if ( in_array( $product_id, $compare ) ) {
        //     wp_send_json_error( array( 'message' => esc_html__('Product is already in Compare.', 'wpr-addons') ) );
        //     return;
        // }
        // $compare[] = $product_id;
        // update_user_meta( get_current_user_id(), 'wpr_compare', $compare );
        
        
        // NEW CODE
        if ($user_id > 0) {
            $compare = get_user_meta($user_id, 'wpr_compare', true);
            if (!$compare) {
                $compare = array();
            }
        } else {
            $compare = $this->get_compare_from_cookie();
        }
    
        if (in_array($product_id, $compare)) {
            wp_send_json_error(array('message' => esc_html__('Product is already in compare.', 'wpr-addons')));
            return;
        }
    
        $compare[] = $product_id;
    
        if ($user_id > 0) {
            update_user_meta($user_id, 'wpr_compare', $compare);
        } else {
            $this->set_compare_to_cookie($compare);
        }

        wp_send_json_success();
    }
    
    function remove_from_compare() {
        $nonce = $_POST['nonce'];

        if ( ! wp_verify_nonce( $nonce, 'wpr-addons-js' ) || ! isset( $_POST['product_id'] ) ) {
            return;
        }
        
        $product_id = intval( $_POST['product_id'] );
        
        $user_id = get_current_user_id();

        if ($user_id > 0) {
            $compare = get_user_meta($user_id, 'wpr_compare', true);
            if (!$compare) {
                $compare = array();
            }
        } else {
            $compare = $this->get_compare_from_cookie();
        }
    
        $compare = array_diff($compare, array($product_id));
    
        if ($user_id > 0) {
            update_user_meta($user_id, 'wpr_compare', $compare);
        } else {
            $this->set_compare_to_cookie($compare);
        }

        // $compare = get_user_meta( get_current_user_id(), 'wpr_compare', true );
        // if ( ! $compare ) {
        //     $compare = array();
        // }
        // $compare = array_diff( $compare, array( $product_id ) );
        // update_user_meta( get_current_user_id(), 'wpr_compare', $compare );

        wp_send_json_success();
    }
    
    function get_compare_from_cookie() {
        if (isset($_COOKIE['wpr_compare'])) {
            return json_decode(stripslashes($_COOKIE['wpr_compare']), true);
        } else if ( isset($_COOKIE['wpr_compare_'. get_current_blog_id() .'']) ) {
            return json_decode(stripslashes($_COOKIE['wpr_compare_'. get_current_blog_id() .'']), true);
        }
        return array();
    }
    
    function set_compare_to_cookie($compare) {
        if ( is_multisite() ) {
            setcookie('wpr_compare_'. get_current_blog_id() .'', json_encode($compare), time() + (86400 * 10), '/'); // Expires in 7 days
        } else {
            setcookie('wpr_compare', json_encode($compare), time() + (86400 * 10), '/'); // Expires in 7 days
        }
    }
}

new WPR_Add_Remove_From_Compare();