start_controls_section( 'eael_conditional_logic_section', [ 'label' => __( ' Conditional Display', 'essential-addons-elementor' ), 'tab' => Controls_Manager::TAB_ADVANCED ] ); $element->add_control( 'eael_cl_notice', [ 'raw' => esc_html__( 'Conditional Display will take effect only on preview or live page, and not while editing in Elementor.', 'essential-addons-elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', 'condition' => [ 'eael_cl_enable' => 'yes' ] ] ); $element->add_control( 'eael_cl_enable', [ 'label' => __( 'Enable Conditional Display', 'essential-addons-elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'label_on' => __( 'Yes', 'essential-addons-elementor' ), 'label_off' => __( 'No', 'essential-addons-elementor' ), 'return_value' => 'yes', 'style_transfer' => false ] ); $element->add_control( 'eael_cl_visibility_action', [ 'label' => __( 'Visibility Action', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'show' => [ 'title' => esc_html__( 'Show', 'essential-addons-elementor' ), 'icon' => 'eaicon-eye-solid', ], 'hide' => [ 'title' => esc_html__( 'Hide', 'essential-addons-elementor' ), 'icon' => 'eaicon-eye-slash-solid', ], 'forcefully_hide' => [ 'title' => esc_html__( 'Hide Without Condition', 'essential-addons-elementor' ), 'icon' => 'eaicon-ban-solid', ], ], 'default' => 'show', 'toggle' => false, 'condition' => [ 'eael_cl_enable' => 'yes', ], 'style_transfer' => false ] ); $element->add_control( 'eael_cl_action_apply_if', [ 'label' => __( 'Action Applicable if', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'all' => [ 'title' => esc_html__( 'True All Logic', 'essential-addons-elementor' ), 'icon' => 'eaicon-dice-six-solid', ], 'any' => [ 'title' => esc_html__( 'True Any Logic', 'essential-addons-elementor' ), 'icon' => 'eaicon-dice-one-solid', ], ], 'default' => 'all', 'toggle' => false, 'condition' => [ 'eael_cl_enable' => 'yes', 'eael_cl_visibility_action!' => 'forcefully_hide', ], 'style_transfer' => false ] ); $repeater = new Repeater(); $repeater->add_control( 'logic_type', [ 'label' => __( 'Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'login_status', 'options' => [ 'login_status' => __( 'User Status', 'essential-addons-elementor' ), 'post_type' => __( 'Post Type', 'essential-addons-elementor' ), 'browser' => __( 'Browser', 'essential-addons-elementor' ), 'date_time' => __( 'Date & Time', 'essential-addons-elementor' ), 'recurring_day' => __( 'Recurring Day', 'essential-addons-elementor' ), 'dynamic' => __( 'Dynamic Field', 'essential-addons-elementor' ), 'query_string' => __( 'Query String', 'essential-addons-elementor' ), 'visit_count' => __( 'Visit Count', 'essential-addons-elementor' ), 'url_contains' => __( 'URL Contains', 'essential-addons-elementor' ), 'archive' => __( 'Archive', 'essential-addons-elementor' ), 'woo_products' => __( 'Woo Products', 'essential-addons-elementor' ), 'woo_cart' => __( 'Woo Cart', 'essential-addons-elementor' ), 'woo_orders' => __( 'Woo Orders', 'essential-addons-elementor' ), ], ] ); $repeater->add_control( 'logic_operator_between', [ 'label' => __( 'Logic Operator', 'essential-addons-elementor' ), 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'between' => [ 'title' => esc_html__( 'Include', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_between' => [ 'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'between', 'toggle' => false, 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'browser', ], [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'post_type', ], [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'query_string', ], [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'archive', ], [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'login_status', ], [ 'name' => 'login_status_operand', 'operator' => '===', 'value' => 'logged_in', ], [ 'name' => 'user_and_role', 'operator' => '!==', 'value' => '', ], ], ], [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_products', ], [ 'name' => 'woo_cart_item_type', 'operator' => '!in', 'value' => [ 'amount', 'count' ], ], ], ] ], ] ] ); //Logic Type: User Status $this->user_status_controls( $repeater ); //Logic Type: Post Type $this->post_types_controls( $repeater ); //Logic Type: Browser $this->browser_logics_controls( $repeater ); //Logic Type: Dynamic Field $this->dynamic_logic_controls( $repeater ); //Logic Type: Date & Time and Recurring Day $this->date_time_controls( $repeater ); //Logic Type: Query String $this->query_string_controls( $repeater ); //Logic Type: URL Contains $this->url_contains_controls( $repeater ); //Logic Type: Archive $this->archive_controls( $repeater ); //Logic Type: Woo Cart & Woo Products $this->woocommerce_controls( $repeater ); $repeater->add_control( 'user_visit_count_type', [ 'type' => Controls_Manager::CHOOSE, 'options' => [ 'less' => [ 'title' => esc_html__( 'Less Than', 'textdomain' ), 'icon' => 'eicon-chevron-left', ], 'greater' => [ 'title' => esc_html__( 'Greater Than', 'textdomain' ), 'icon' => 'eicon-chevron-right', ], ], 'default' => 'less', 'condition' => [ 'logic_type' => 'visit_count', ] ] ); $repeater->add_control( 'user_visit_count', [ 'label' => esc_html__( 'Visit Count', 'essential-addons-elementor' ), 'type' => Controls_Manager::NUMBER, 'default' => 3, 'condition' => [ 'logic_type' => 'visit_count', ] ] ); $element->add_control( 'eael_cl_logics', [ 'label' => __( 'Logics', 'essential-addons-elementor' ), 'type' => Controls_Manager::REPEATER, 'fields' => $repeater->get_controls(), 'default' => [ [ 'logic_type' => 'login_status', 'login_status_operand' => 'logged_in', ], ], 'style_transfer' => false, 'title_field' => '{{{ ea_conditional_logic_type_title(logic_type) }}}', 'condition' => [ 'eael_cl_enable' => 'yes', 'eael_cl_visibility_action!' => 'forcefully_hide', ] ] ); $element->add_control( 'eael_cl_fallback', [ 'label' => esc_html__( 'Fallback', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'content' => [ 'title' => esc_html__( 'Content', 'essential-addons-elementor' ), 'icon' => 'eicon-text-area', ], 'template' => [ 'title' => esc_html__( 'Template', 'essential-addons-elementor' ), 'icon' => 'eicon-folder-o', ], 'none' => [ 'title' => esc_html__( 'No Fallback', 'essential-addons-elementor' ), 'icon' => 'eicon-ban', ], ], 'default' => 'none', 'separator' => 'before', 'condition' => [ 'eael_cl_enable' => 'yes' ] ] ); $element->add_control( 'eael_cl_fallback_content', [ 'label' => esc_html__( 'Content', 'essential-addons-elementor' ), 'type' => Controls_Manager::WYSIWYG, 'default' => esc_html__( 'The content is hidden', 'essential-addons-elementor' ), 'placeholder' => esc_html__( 'Type your content here', 'essential-addons-elementor' ), 'condition' => [ 'eael_cl_fallback' => 'content', 'eael_cl_enable' => 'yes' ] ] ); $element->add_control( 'eael_cl_fallback_template', [ 'label' => __( 'Choose Template', 'essential-addons-elementor' ), 'type' => 'eael-select2', 'source_name' => 'post_type', 'source_type' => 'elementor_library', 'label_block' => true, 'condition' => [ 'eael_cl_fallback' => 'template', 'eael_cl_enable' => 'yes' ], ] ); $element->end_controls_section(); } /** * Get All editable roles and return array with simple slug|name pare * * @param $first_index * @param $output * * @return array|string */ public function get_editable_roles() { $wp_roles = [ '' => __( 'Select', 'essential-addons-elementor' ) ]; $all_roles = wp_roles()->roles; $editable_roles = apply_filters( 'editable_roles', $all_roles ); foreach ( $editable_roles as $slug => $editable_role ) { $wp_roles[ $slug ] = $editable_role['name']; } return $wp_roles; } /** * Get all browser list and return array with simple slug|name pare * * @return array */ public function get_browser_list() { return [ 'chrome' => __( 'Google Chrome', 'essential-addons-elementor' ), 'firefox' => __( 'Mozilla Firefox', 'essential-addons-elementor' ), 'safari' => __( 'Safari', 'essential-addons-elementor' ), 'i_safari' => __( 'Iphone Safari', 'essential-addons-elementor' ), 'opera' => __( 'Opera', 'essential-addons-elementor' ), 'edge' => __( 'Edge', 'essential-addons-elementor' ), 'ie' => __( 'Internet Explorer', 'essential-addons-elementor' ), 'mac_ie' => __( 'Internet Explorer for Mac OS X', 'essential-addons-elementor' ), 'netscape4' => __( 'Netscape 4', 'essential-addons-elementor' ), 'lynx' => __( 'Lynx', 'essential-addons-elementor' ), 'others' => __( 'Others', 'essential-addons-elementor' ), ]; } /** * Get all days list of a week and return array with simple slug|name pare * * @return array */ public function get_days_list() { return [ 'sun' => __( 'Sunday', 'essential-addons-elementor' ), 'mon' => __( 'Monday', 'essential-addons-elementor' ), 'tue' => __( 'Tuesday', 'essential-addons-elementor' ), 'wed' => __( 'Wednesday', 'essential-addons-elementor' ), 'thu' => __( 'Thursday', 'essential-addons-elementor' ), 'fri' => __( 'Friday', 'essential-addons-elementor' ), 'sat' => __( 'Saturday', 'essential-addons-elementor' ) ]; } /** * Get current browser * * @return string */ public function get_current_browser() { global $is_lynx, $is_gecko, $is_winIE, $is_macIE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone, $is_edge; $browser = 'others'; switch ( true ) { case $is_chrome: $browser = 'chrome'; break; case $is_gecko: $browser = 'firefox'; break; case $is_safari: $browser = 'safari'; break; case $is_iphone: $browser = 'i_safari'; break; case $is_opera: $browser = 'opera'; break; case $is_edge: $browser = 'edge'; break; case $is_winIE: $browser = 'ie'; break; case $is_macIE: $browser = 'mac_ie'; break; case $is_NS4: $browser = 'netscape4'; break; case $is_lynx: $browser = 'lynx'; break; } return $browser; } public function parse_arg( $arg ) { $arg = wp_parse_args( $arg, [ 'eael_cl_enable' => '', 'eael_cl_visibility_action' => '', 'eael_cl_logics' => [], 'eael_cl_action_apply_if' => '', ] ); return $arg; } /** * Check all logics and return the final result * * @param $settings * * @return bool */ public function check_logics( $settings ) { $return = false; $needed_any_logic_true = $settings['eael_cl_action_apply_if'] === 'any'; $needed_all_logic_true = $settings['eael_cl_action_apply_if'] === 'all'; foreach ( $settings['eael_cl_logics'] as $cl_logic ) { switch ( $cl_logic['logic_type'] ) { case 'login_status': $return = $cl_logic['login_status_operand'] === 'logged_in' ? is_user_logged_in() : ! is_user_logged_in(); if ( is_user_logged_in() && $cl_logic['user_and_role'] !== '' ) { if ( $cl_logic['user_and_role'] === 'user_role' ) { $user_roles = get_userdata( get_current_user_id() )->roles; $operand = $cl_logic['user_role_operand_multi']; $result = array_intersect( $user_roles, $operand ); $return = ( $cl_logic['logic_operator_between'] === 'between' ) ? count( $result ) > 0 : count( $result ) == 0; } elseif ( $cl_logic['user_and_role'] === 'user' ) { $user = get_current_user_id(); $operand = array_map( 'intval', (array) $cl_logic['user_operand'] ); $return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $user, $operand ) : ! in_array( $user, $operand ); } } if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'post_type': $ID = get_the_ID(); $post_type_operand = $cl_logic['post_type_operand']; $operand = empty( $post_type_operand ) ? (array) $cl_logic['post_operand'] : (array) $cl_logic["post_operand_{$post_type_operand}"]; if ( count( $operand ) ) { $return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $ID, $operand ) : ! in_array( $ID, $operand ); } else { $post_type = get_post_type( $ID ); $return = $cl_logic['logic_operator_between'] === 'between' ? $post_type === $post_type_operand : $post_type !== $post_type_operand; } if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'browser': $browser = $this->get_current_browser(); $operand = (array) $cl_logic['browser_operand']; $return = $cl_logic['logic_operator_between'] === 'between' ? in_array( $browser, $operand ) : ! in_array( $browser, $operand ); if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'date_time': $current_time = current_time( 'U' ); $from = ( $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'not_equal' ) ? strtotime( "{$cl_logic['single_date']} 00:00:00" ) : strtotime( $cl_logic['from_date'] ); $to = ( $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'not_equal' ) ? strtotime( "{$cl_logic['single_date']} 23:59:59" ) : strtotime( $cl_logic['to_date'] ); $return = $cl_logic['date_time_logic'] === 'equal' || $cl_logic['date_time_logic'] === 'between' ? $from <= $current_time && $current_time <= $to : $from >= $current_time || $current_time >= $to; if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'recurring_day': $current_time = current_time( 'U' ); $from_date = isset( $cl_logic['recurring_days_duration_from'] ) && $cl_logic['recurring_days_duration_from'] ? strtotime( "{$cl_logic['recurring_days_duration_from']} 00:00:00" ) : $current_time - WEEK_IN_SECONDS; $to_date = isset( $cl_logic['recurring_days_duration_to'] ) && $cl_logic['recurring_days_duration_to'] ? strtotime( "{$cl_logic['recurring_days_duration_to']} 23:59:59" ) : $current_time + WEEK_IN_SECONDS; $is_today = isset( $cl_logic['recurring_days_all'] ) && $cl_logic['recurring_days_all'] === 'yes' || in_array( strtolower( date( 'D' ) ), $cl_logic['recurring_days'] ); $from_time = isset( $cl_logic['from_time'] ) ? strtotime( $cl_logic['from_time'] ) : strtotime( '00:00:00' ); $to_time = isset( $cl_logic['to_time'] ) ? strtotime( $cl_logic['to_time'] ) : strtotime( '23:59:59' ); $return = $is_today && $from_date < $current_time && $to_date > $current_time && $from_time < $current_time && $to_time > $current_time; $return = $cl_logic['recurring_day_logic'] === 'between' ? $return : ! $return; if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'dynamic': if ( defined( 'ELEMENTOR_PRO_VERSION' ) ) { $dynamic_field = strip_tags( $cl_logic['dynamic_field'] ); $dynamic_field = strtolower( $dynamic_field ); $dynamic_field = explode( '|', $dynamic_field ); $dynamic_field = array_map( 'trim', $dynamic_field ); $value = explode( '|', strtolower( $cl_logic['dynamic_operand'] ) ); $value = array_map( 'trim', $value ); $result = array_intersect( $dynamic_field, $value ); $return = ( $cl_logic['logic_operator_dynamic'] === 'between' ) ? count( $result ) > 0 : count( $result ) == 0; if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } } break; case 'query_string': $return = $cl_logic['query_key'] && isset( $_GET[ $cl_logic['query_key'] ] ) && sanitize_text_field( $_GET[ $cl_logic['query_key'] ] ) === $cl_logic['query_value']; $return = $cl_logic['logic_operator_between'] === 'between' ? $return : ! $return; if ( $needed_any_logic_true && $return ) { break( 2 ); } if ( $needed_all_logic_true && ! $return ) { break( 2 ); } break; case 'visit_count': $cookie_key = 'eael_' . md5( 'visit_count_' . $cl_logic['_id'] ); $visit_count = isset( $_COOKIE[ $cookie_key ] ) ? $_COOKIE[ $cookie_key ]: 0; $return = $cl_logic['user_visit_count'] && absint( $cl_logic['user_visit_count'] ) > $visit_count; $return = $cl_logic['user_visit_count_type'] === 'less' ? $return: ! $return; $visit_count++; ?> roles ); $return = count( $has_role ) > 0; } } } else if ( 'date' === $cl_logic['archive_type'] ){ if( "" === $cl_logic['archive_date_from'] || "" === $cl_logic['archive_date_to'] ){ $return = is_date(); } else if ( is_year() ) { $start_year = date( 'Y', strtotime( $cl_logic['archive_date_from'] ) ); $end_year = date( 'Y', strtotime( $cl_logic['archive_date_to'] ) ); $archive_year = get_query_var( 'year' ); $return = $start_year <= $archive_year && $archive_year <= $end_year; } elseif ( is_month() ) { $start = strtotime( $cl_logic['archive_date_from'] ); $end = strtotime( $cl_logic['archive_date_to'] ); $archive_year = get_query_var( 'year' ); $archive_month = get_query_var( 'monthnum' ); $time_str = strtotime("$archive_year-$archive_month-01"); $month_first = strtotime( date('Y-m-01', $time_str ) ); $month_last = strtotime( date('Y-m-t', $time_str ) ); $return = $start <= $month_first && $month_last <= $end; } elseif ( is_day() ) { $start = strtotime( $cl_logic['archive_date_from'] ); $end = strtotime( $cl_logic['archive_date_to'] ); $archive_year = get_query_var( 'year' ); $archive_month = get_query_var( 'monthnum' ); $archive_day = get_query_var( 'day' ); $archive_date = strtotime("$archive_year-$archive_month-$archive_day"); $return = $start <= $archive_date && $archive_date <= $end; } } if ( $cl_logic['logic_operator_between'] === 'not_between' ) { $return = ! $return; } if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) { break( 2 ); } break; case 'woo_cart': if ( ! function_exists( 'WC' ) ) { break; } $is_cart_empty = WC()->cart->is_empty(); if ( $cl_logic['woo_cart_logic_operator'] === 'empty' ) { $return = $is_cart_empty; } else if ( ! $is_cart_empty ) { $cart_items = WC()->cart->get_cart_contents(); $compare_to = $compare_with = []; if ( $cl_logic['woo_cart_item_type'] === 'product' && ! empty( $cl_logic['product_ids'] ) ) { $cart_item_ids = []; foreach ( $cart_items as $item ) { $cart_item_ids[] = $item['product_id']; } $compare_to = array_unique( $cart_item_ids ); $compare_with = $cl_logic['product_ids']; } else if ( $cl_logic['woo_cart_item_type'] === 'ptype' && ! empty( $cl_logic['product_types'] ) ) { $cart_item_types = []; foreach ( $cart_items as $item ) { $cart_item_types[] = $item['data']->get_type(); } $compare_to = array_unique( $cart_item_types ); $compare_with = $cl_logic['product_types']; } else if ( $cl_logic['woo_cart_item_type'] === 'category' && ! empty( $cl_logic['product_categories'] ) ) { $product_category_ids = []; foreach ( $cart_items as $item ) { $product_category_ids = array_merge( $product_category_ids, $item['data']->get_category_ids() ); } $compare_to = array_unique( $product_category_ids ); $compare_with = $cl_logic['product_categories']; } else if ( $cl_logic['woo_cart_item_type'] === 'count' && $cl_logic['cart_item_count'] > 0 ){ $item_count = WC()->cart->get_cart_contents_count(); if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) { $return = $item_count < absint( $cl_logic['cart_item_count'] ); } else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) { $return = $item_count > absint( $cl_logic['cart_item_count'] ); } } else if ( $cl_logic['woo_cart_item_type'] === 'amount' && $cl_logic['cart_item_amount'] > 0 ){ $item_total = WC()->cart->subtotal; if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) { $return = $item_total < floatval( $cl_logic['cart_item_amount'] ); } else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) { $return = $item_total > floatval( $cl_logic['cart_item_amount'] ); } } if ( ! empty( $compare_to ) && ! empty( $compare_with ) ) { $has_items = array_intersect( $compare_with, $compare_to ); if ( $cl_logic['woo_cart_logic_operator'] === 'in' ) { $return = count( $has_items ) > 0; } else if ( $cl_logic['woo_cart_logic_operator'] === 'not_in' ) { $return = count( $has_items ) < 1; } } } if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) { break( 2 ); } case 'woo_products': if ( ! function_exists( 'WC' ) ) { break; } $product_id = get_the_ID(); $has_items = false; if ( get_post_type( $product_id ) !== 'product' ) { break; } if ( 'product' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_ids'] ) ) { $has_items = true; $return = in_array( $product_id, $cl_logic['product_ids'] ); } else if ( 'ptype' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_types'] ) ) { $has_items = true; $product = wc_get_product( $product_id ); $return = in_array( $product->get_type(), $cl_logic['product_types'] ); } else if ( 'category' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_categories'] ) ) { $has_items = true; $product = wc_get_product( $product_id ); $has_categories = array_intersect( $cl_logic['product_categories'], $product->get_category_ids() ); $return = count( $has_categories ) > 0; } else if ( $cl_logic['woo_cart_item_type'] === 'count' ){ $product = wc_get_product( $product_id ); $is_manage_stock = $product->get_manage_stock(); if( $is_manage_stock ){ if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) { $return = $product->get_stock_quantity() < absint( $cl_logic['product_stock_count'] ); } else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) { $return = $product->get_stock_quantity() > absint( $cl_logic['product_stock_count'] ); } } else if ( ! $is_manage_stock && $cl_logic['product_stock_count'] > 0 ){ $status = $product->get_stock_status(); $return = 'instock' === $status; } } else if ( $cl_logic['woo_cart_item_type'] === 'amount' ){ $product = wc_get_product( $product_id ); $price = $product->get_regular_price(); if ( $cl_logic['woo_cart_logic_operator_2'] === 'less' ) { $return = $price < $cl_logic['product_price']; } else if ( $cl_logic['woo_cart_logic_operator_2'] === 'greater' ) { $return = $price > $cl_logic['product_price']; } } if ( $has_items && $cl_logic['logic_operator_between'] === 'not_between' ) { $return = ! $return; } if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) { break( 2 ); } break; case 'woo_orders': if ( ! function_exists( 'WC' ) || ! is_user_logged_in() ) { break; } $user_id = get_current_user_id(); if( 'no_order' === $cl_logic['woo_purchase_type'] ){ $order_count = wc_get_customer_order_count( $user_id ); $return = 'no_order' === $cl_logic['woo_purchase_type'] && $order_count < 1; } else { if ( 'product' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_ids'] ) ){ $product_ids = $this->get_ordered_products( 'ids', $cl_logic ); $has_items = array_intersect( $cl_logic['product_ids'], $product_ids ); $return = count( $has_items ) > 0; } else if ( 'ptype' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_types'] ) ){ $product_types = $this->get_ordered_products( 'types', $cl_logic ); $has_items = array_intersect( $cl_logic['product_types'], $product_types ); $return = count( $has_items ) > 0; } else if ( 'category' === $cl_logic['woo_cart_item_type'] && ! empty( $cl_logic['product_categories'] ) ){ $product_cats = $this->get_ordered_products( 'categories', $cl_logic ); $has_items = array_intersect( $cl_logic['product_categories'], $product_cats ); $return = count( $has_items ) > 0; } if ( $has_items && $cl_logic['woo_products_logic_oparator'] === 'exclude' ) { $return = ! $return; } if ( ( $needed_any_logic_true && $return ) || ( $needed_all_logic_true && ! $return ) ) { break( 2 ); } } } } return $return; } public function content_render( $should_render, Element_Base $element ) { $settings = $element->get_settings_for_display(); $settings = $this->parse_arg( $settings ); if ( $settings['eael_cl_enable'] === 'yes' ) { switch ( $settings['eael_cl_visibility_action'] ) { case 'show': $should_render = $this->check_logics( $settings ) ? true : false; break; case 'hide': $should_render = $this->check_logics( $settings ) ? false : true; break; case 'forcefully_hide': $should_render = false; } if ( ! $should_render && $settings['eael_cl_fallback'] !== 'none' ) { if ( $settings['eael_cl_fallback'] === 'content' ) { echo wp_kses( $settings['eael_cl_fallback_content'], Helper::eael_allowed_tags() ); } else if ( $settings['eael_cl_fallback'] === 'template' ) { echo Plugin::$instance->frontend->get_builder_content( $settings['eael_cl_fallback_template'] ); } } } return $should_render; } private function dynamic_logic_controls( $repeater ) { $repeater->add_control( 'dynamic_field', [ 'label' => esc_html__( 'Dynamic Field', 'essential-addons-elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'default' => '', 'dynamic' => [ 'active' => true, ], 'condition' => [ 'logic_type' => 'dynamic' ], 'ai' => [ 'active' => false, ], 'description' => esc_html__( 'If Dynamic Field has multiple values please use pipe ( | ) as separator. Please remove Before and After field texts from Advanced tab.', 'essential-addons-elementor' ) ] ); if ( defined( 'ELEMENTOR_PRO_VERSION' ) ) { $repeater->add_control( 'logic_operator_dynamic', [ 'label' => __( 'Logic Operator', 'essential-addons-elementor' ), 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'between' => [ 'title' => esc_html__( 'Include', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_between' => [ 'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'between', 'toggle' => false, 'condition' => [ 'logic_type' => 'dynamic', ] ] ); $repeater->add_control( 'dynamic_operand', [ 'label' => esc_html__( 'Value', 'essential-addons-elementor' ), 'type' => Controls_Manager::TEXT, 'label_block' => true, 'default' => '', 'condition' => [ 'logic_type' => 'dynamic' ], 'ai' => [ 'active' => false, ], ] ); $repeater->add_control( 'eael_cl_dynamic_notice', [ 'raw' => __( 'Separate multiple value with the | (pipe) character. (e.g. value 1 | value 2)', 'essential-addons-elementor' ), 'type' => Controls_Manager::RAW_HTML, 'content_classes' => 'elementor-descriptor', 'condition' => [ 'logic_type' => 'dynamic', ] ] ); } } private function user_status_controls( $repeater ) { $repeater->add_control( 'login_status_operand', [ 'label' => __( 'Login Status', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'logged_in' => [ 'title' => esc_html__( 'Logged In', 'essential-addons-elementor' ), 'icon' => 'eaicon-user-solid', ], 'not_logged_in' => [ 'title' => esc_html__( 'Not Logged In', 'essential-addons-elementor' ), 'icon' => 'eaicon-user-slash-solid', ], ], 'default' => 'logged_in', 'toggle' => false, 'condition' => [ 'logic_type' => 'login_status', ] ] ); $repeater->add_control( 'user_and_role', [ 'label' => __( 'Select User Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'user_role' => [ 'title' => esc_html__( 'User Role', 'essential-addons-elementor' ), 'icon' => 'eaicon-users-solid', ], 'user' => [ 'title' => esc_html__( 'User', 'essential-addons-elementor' ), 'icon' => 'eaicon-user-plus-solid', ], ], 'default' => '', 'condition' => [ 'logic_type' => 'login_status', 'login_status_operand' => 'logged_in', ] ] ); $roles = $this->get_editable_roles(); $repeater->add_control( 'user_role_operand_multi', [ 'label' => __( 'Select User Roles', 'essential-addons-elementor' ), 'label_block' => true, 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => $roles, 'default' => [], 'condition' => [ 'logic_type' => 'login_status', 'login_status_operand' => 'logged_in', 'user_and_role' => 'user_role' ] ] ); $repeater->add_control( 'user_operand', [ 'label' => esc_html__( 'Select Users', 'essential-addons-elementor' ), 'type' => 'eael-select2', 'source_name' => 'user', 'source_type' => 'all', 'label_block' => true, 'multiple' => true, 'condition' => [ 'logic_type' => 'login_status', 'login_status_operand' => 'logged_in', 'user_and_role' => 'user' ] ] ); } private function post_types_controls( $repeater ) { $_post_types = ControlsHelper::get_post_types(); $post_types = array_merge( [ '' => 'All' ], $_post_types ); $repeater->add_control( 'post_type_operand', [ 'label' => esc_html__( 'Select Post Types', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'options' => $post_types, 'default' => key( $post_types ), 'condition' => [ 'logic_type' => 'post_type', ] ] ); $repeater->add_control( 'post_operand', [ 'label' => esc_html__( 'Select Any Post', 'essential-addons-elementor' ), 'type' => 'eael-select2', 'source_name' => 'post_type', 'source_type' => 'any', 'label_block' => true, 'multiple' => true, 'condition' => [ 'logic_type' => 'post_type', 'post_type_operand' => '' ] ] ); foreach ( $_post_types as $post_type_slug => $post_type_name ) { $repeater->add_control( "post_operand_{$post_type_slug}", [ 'label' => esc_html__( 'Select ', 'essential-addons-elementor' ) . $post_type_name, 'type' => 'eael-select2', 'source_name' => 'post_type', 'source_type' => $post_type_slug, 'label_block' => true, 'multiple' => true, 'condition' => [ 'logic_type' => 'post_type', 'post_type_operand' => $post_type_slug ] ] ); } } private function browser_logics_controls( $repeater ) { $repeater->add_control( 'browser_operand', [ 'label' => __( 'Select Browser', 'essential-addons-elementor' ), 'label_block' => true, 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => $this->get_browser_list(), 'default' => key( $this->get_browser_list() ), 'condition' => [ 'logic_type' => 'browser', ] ] ); } private function date_time_controls( $repeater ) { $repeater->add_control( 'date_time_logic', [ 'label' => __( 'Date and time', 'essential-addons-elementor' ), 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'equal' => [ 'title' => esc_html__( 'Is', 'essential-addons-elementor' ), 'icon' => 'eaicon-equals-solid', ], 'not_equal' => [ 'title' => esc_html__( 'Is Not', 'essential-addons-elementor' ), 'icon' => 'eaicon-not-equal-solid', ], 'between' => [ 'title' => esc_html__( 'Between', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_between' => [ 'title' => esc_html__( 'Not Between', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'equal', 'toggle' => false, 'condition' => [ 'logic_type' => 'date_time', ] ] ); $repeater->add_control( 'single_date', [ 'label' => esc_html__( 'Date', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'enableTime' => false, 'altInput' => true, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d' ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'date_time', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'between', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'not_between', ], ], ] ] ); $repeater->add_control( 'from_date', [ 'label' => esc_html__( 'From', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'M j, Y h:i K', 'dateFormat' => 'Y-m-d H:i:S' ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'date_time', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'equal', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'not_equal', ], ], ] ] ); $repeater->add_control( 'to_date', [ 'label' => esc_html__( 'To', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'M j, Y h:i K', 'dateFormat' => 'Y-m-d H:i:S' ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'date_time', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'equal', ], [ 'name' => 'date_time_logic', 'operator' => '!==', 'value' => 'not_equal', ], ], ] ] ); $repeater->add_control( 'recurring_day_logic', [ 'label' => __( 'Recurring Day', 'essential-addons-elementor' ), 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'between' => [ 'title' => esc_html__( 'Between', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_between' => [ 'title' => esc_html__( 'Not Between', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'between', 'toggle' => false, 'condition' => [ 'logic_type' => 'recurring_day', ] ] ); $repeater->add_control( 'recurring_days_all', [ 'label' => __( 'All Days', 'essential-addons-elementor' ), 'type' => Controls_Manager::SWITCHER, 'default' => '', 'label_on' => __( 'Yes', 'essential-addons-elementor' ), 'label_off' => __( 'No', 'essential-addons-elementor' ), 'return_value' => 'yes', 'condition' => [ 'logic_type' => 'recurring_day', ] ] ); $repeater->add_control( 'recurring_days', [ 'label' => __( 'Recurring Days', 'essential-addons-elementor' ), 'label_block' => true, 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => $this->get_days_list(), 'default' => [ key( $this->get_days_list() ) ], 'condition' => [ 'logic_type' => 'recurring_day', 'recurring_days_all!' => 'yes' ] ] ); $repeater->add_control( 'recurring_days_heading', [ 'label' => __( 'Date Duration', 'essential-addons-elementor' ), 'type' => Controls_Manager::HEADING, 'condition' => [ 'logic_type' => 'recurring_day', ] ] ); $repeater->add_control( 'recurring_days_duration_from', [ 'label' => esc_html__( 'From', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', 'enableTime' => false, ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'recurring_day', ], ], ] ] ); $repeater->add_control( 'recurring_days_duration_to', [ 'label' => esc_html__( 'To', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', 'enableTime' => false, ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'recurring_day', ], ], ] ] ); $repeater->add_control( 'recurring_days_heading2', [ 'label' => __( 'Time Duration', 'essential-addons-elementor' ), 'type' => Controls_Manager::HEADING, 'condition' => [ 'logic_type' => 'recurring_day', ] ] ); $repeater->add_control( 'from_time', [ 'label' => esc_html__( 'From', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'h:i K', 'enableTime' => true, 'noCalendar' => true, ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'recurring_day', ], ], ] ] ); $repeater->add_control( 'to_time', [ 'label' => esc_html__( 'To', 'essential-addons-elementor' ), 'label_block' => false, 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'altInput' => true, 'altFormat' => 'h:i K', 'enableTime' => true, 'noCalendar' => true, ], 'conditions' => [ 'relation' => 'and', 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'recurring_day', ], ], ] ] ); } private function query_string_controls( $repeater ) { $repeater->add_control( 'query_key', [ 'label' => esc_html__( 'Key', 'essential-addons-elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Query Key', 'essential-addons-elementor' ), 'condition' => [ 'logic_type' => 'query_string', ] ] ); $repeater->add_control( 'query_value', [ 'label' => esc_html__( 'Value', 'essential-addons-elementor' ), 'type' => Controls_Manager::TEXT, 'placeholder' => esc_html__( 'Query Value', 'essential-addons-elementor' ), 'condition' => [ 'logic_type' => 'query_string', ] ] ); } private function url_contains_controls( $repeater ) { $repeater->add_control( 'url_contains_url_type', [ 'label' => __( 'URL Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'current', 'options' => [ 'current' => [ 'title' => esc_html__( 'Current', 'essential-addons-elementor' ), 'icon' => 'eicon-editor-link', ], 'refferer' => [ 'title' => esc_html__( 'Refferer', 'essential-addons-elementor' ), 'icon' => 'eicon-editor-external-link', ], ], 'condition' => [ 'logic_type' => 'url_contains', ], ] ); $repeater->add_control( 'url_contains_logic_operator', [ 'label' => __( 'Logic Operator', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'default' => 'in', 'options' => [ 'in' => [ 'title' => esc_html__( 'In', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_in' => [ 'title' => esc_html__( 'Not In', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'condition' => [ 'logic_type' => 'url_contains', ], ] ); $repeater->add_control( 'url_contains_string', [ 'label' => __( 'String', 'essential-addons-elementor' ), 'type' => Controls_Manager::TEXT, 'ai' => [ 'active' => false ], 'condition' => [ 'logic_type' => 'url_contains', ] ] ); } private function archive_controls( $repeater ){ $repeater->add_control( 'archive_type', [ 'label' => esc_html__( 'Archive Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'post', 'options' => [ 'post' => esc_html__( 'Post Type', 'essential-addons-elementor' ), 'taxonomy' => esc_html__( 'Taxonomy', 'essential-addons-elementor' ), 'terms' => esc_html__( 'Terms', 'essential-addons-elementor' ), 'author' => esc_html__( 'Author', 'essential-addons-elementor' ), 'date' => esc_html__( 'Date', 'essential-addons-elementor' ), 'search' => esc_html__( 'Search', 'essential-addons-elementor' ), ], 'condition' => [ 'logic_type' => 'archive', ] ] ); $_post_types = ControlsHelper::get_post_types(); $post_types = array_merge( [ 'all' => 'All' ], $_post_types ); $repeater->add_control( 'archive_post_type', [ 'label' => esc_html__( 'Select Post Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT, 'label_block' => true, 'options' => $post_types, 'default' => 'post', 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'post', ] ] ); $taxonomies = get_taxonomies( [ 'public' => true ], 'objects' ); $taxon_options = []; foreach( $taxonomies as $taxonomy ){ $taxon_options[ $taxonomy->name ] = $taxonomy->label; } $repeater->add_control( 'archive_taxonomies', [ 'label' => esc_html__( 'Select Taxonomoies', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT2, 'label_block' => true, 'options' => $taxon_options, 'default' => 'category', 'condition' => [ 'logic_type' => 'archive', 'archive_type' => [ 'taxonomy', 'terms' ], ] ] ); foreach( $taxonomies as $taxonomy ){ $repeater->add_control( "archive_terms_for_{$taxonomy->name}", [ 'label' => esc_html__( 'Select ', 'essential-addons-elementor' ) . $taxonomy->label, 'type' => 'eael-select2', 'source_name' => 'taxonomy', 'source_type' => $taxonomy->name, 'label_block' => true, 'multiple' => true, 'condition' => [ 'logic_type' => 'archive', 'archive_taxonomies' => $taxonomy->name, 'archive_type' => 'terms', ] ] ); } $repeater->add_control( 'archive_author_type', [ 'label' => esc_html__( 'Author Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'user' => [ 'title' => esc_html__( 'User', 'essential-addons-elementor' ), 'icon' => 'eaicon-user-plus-solid', ], 'user_role' => [ 'title' => esc_html__( 'User Role', 'essential-addons-elementor' ), 'icon' => 'eaicon-users-solid', ], ], 'default' => 'user', 'toggle' => false, 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'author', ] ] ); $roles = $this->get_editable_roles(); $repeater->add_control( 'archive_user_role', [ 'label' => __( 'Select User Roles', 'essential-addons-elementor' ), 'label_block' => true, 'type' => Controls_Manager::SELECT2, 'multiple' => true, 'options' => $roles, 'default' => [], 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'author', 'archive_author_type' => 'user_role', ] ] ); $repeater->add_control( 'archive_users', [ 'label' => esc_html__( 'Select Users', 'essential-addons-elementor' ), 'type' => 'eael-select2', 'source_name' => 'user', 'source_type' => 'all', 'label_block' => true, 'multiple' => true, 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'author', 'archive_author_type' => 'user', ] ] ); $repeater->add_control( 'archive_date_from', [ 'label' => esc_html__( 'Archive Date From', 'essential-addons-elementor' ), 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'enableTime' => false, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', ], 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'date', ] ] ); $repeater->add_control( 'archive_date_to', [ 'label' => esc_html__( 'Archive Date To', 'essential-addons-elementor' ), 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'enableTime' => false, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', ], 'condition' => [ 'logic_type' => 'archive', 'archive_type' => 'date', ] ] ); } private function woocommerce_controls( $repeater ) { if ( ! function_exists( 'WC' ) ) { $repeater->add_control( 'woo_installation_notice_for_cart', [ 'type' => Controls_Manager::RAW_HTML, 'raw' => __( 'WooCommerce is not installed/activated on your site. Please install and activate WooCommerce first.', 'essential-addons-elementor' ), 'content_classes' => 'eael-warning', 'condition' => [ 'logic_type' => 'woo_cart', ] ] ); return; } $repeater->add_control( 'woo_purchase_type', [ 'label' => esc_html__( 'Purchase Type', 'essential-addons-elementor' ), 'type' => Controls_Manager::SELECT, 'default' => 'last_order', 'options' => [ 'no_order' => esc_html__( 'Has No Order', 'essential-addons-elementor' ), 'last_order' => esc_html__( 'From Last Purchase', 'essential-addons-elementor' ), 'all_orders' => esc_html__( 'Between All Orders', 'essential-addons-elementor' ), 'date_range' => esc_html__( 'Between Date Period', 'essential-addons-elementor' ), ], 'condition' => [ 'logic_type' => 'woo_orders', ] ] ); $repeater->add_control( 'woo_order_date_from', [ 'label' => esc_html__( 'Purchased Date From', 'essential-addons-elementor' ), 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'enableTime' => false, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', ], 'condition' => [ 'logic_type' => 'woo_orders', 'woo_purchase_type' => 'date_range', ] ] ); $repeater->add_control( 'woo_order_date_to', [ 'label' => esc_html__( 'Purchased Date To', 'essential-addons-elementor' ), 'type' => Controls_Manager::DATE_TIME, 'picker_options' => [ 'enableTime' => false, 'altFormat' => 'M j, Y', 'dateFormat' => 'Y-m-d', ], 'condition' => [ 'logic_type' => 'woo_orders', 'woo_purchase_type' => 'date_range', ] ] ); $repeater->add_control( 'woo_products_logic_oparator', [ 'label' => esc_html__( 'Oparator', 'essential-addons-elementor' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'include' => [ 'title' => esc_html__( 'Include', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'exclude' => [ 'title' => esc_html__( 'Exclude', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'include', 'toggle' => false, 'condition' => [ 'logic_type' => 'woo_orders', 'woo_purchase_type!' => 'no_order', ] ] ); $repeater->add_control( 'woo_cart_logic_operator', [ 'label' => __( 'Cart items', 'essential-addons-elementor' ), // 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'empty' => [ 'title' => esc_html__( 'Empty', 'essential-addons-elementor' ), 'icon' => 'eicon-trash', ], 'in' => [ 'title' => esc_html__( 'IN', 'essential-addons-elementor' ), 'icon' => 'eaicon-check-solid', ], 'not_in' => [ 'title' => esc_html__( 'Not IN', 'essential-addons-elementor' ), 'icon' => 'eaicon-xmark-solid', ], ], 'default' => 'in', 'toggle' => false, 'condition' => [ 'logic_type' => 'woo_cart', 'woo_cart_item_type!' => [ 'count', 'amount' ] ] ] ); $repeater->add_control( 'woo_cart_logic_operator_2', [ 'label' => __( 'Compare Oparator', 'essential-addons-elementor' ), // 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'less' => [ 'title' => esc_html__( 'Less Than', 'essential-addons-elementor' ), 'icon' => 'eicon-chevron-left', ], 'greater' => [ 'title' => esc_html__( 'Greater Than', 'essential-addons-elementor' ), 'icon' => 'eicon-chevron-right', ], ], 'toggle' => false, 'default' => 'greater', 'condition' => [ 'logic_type' => [ 'woo_cart', 'woo_products' ], 'woo_cart_item_type' => [ 'count', 'amount' ] ] ] ); $repeater->add_control( 'woo_cart_item_type', [ 'label' => __( 'Products By', 'essential-addons-elementor' ), // 'show_label' => false, 'type' => Controls_Manager::CHOOSE, 'options' => [ 'product' => [ 'title' => esc_html__( 'Product', 'essential-addons-elementor' ), 'icon' => 'eicon-menu-toggle', ], 'ptype' => [ 'title' => esc_html__( 'Type', 'essential-addons-elementor' ), 'icon' => 'eicon-flow', ], 'category' => [ 'title' => esc_html__( 'Category', 'essential-addons-elementor' ), 'icon' => 'eicon-sitemap', ], 'count' => [ 'title' => esc_html__( 'Count', 'essential-addons-elementor' ), 'icon' => 'eicon-woo-cart', ], 'amount' => [ 'title' => esc_html__( 'Total', 'essential-addons-elementor' ), 'icon' => 'eicon-product-price', ], ], 'toggle' => false, 'default' => 'product', 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_cart', ], [ 'name' => 'woo_cart_logic_operator', 'operator' => '!==', 'value' => 'empty', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_products', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_orders', ], [ 'name' => 'woo_purchase_type', 'operator' => '!==', 'value' => 'no_order', ], ] ], ] ] ] ); $repeater->add_control( 'product_ids', [ 'label' => __( 'Search & Select Products', 'essential-addons-for-elementor-lite' ), 'type' => 'eael-select2', 'options' => ControlsHelper::get_post_list( 'product' ), 'label_block' => true, 'multiple' => true, 'source_name' => 'post_type', 'source_type' => 'product', 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_cart', ], [ 'name' => 'woo_cart_logic_operator', 'operator' => '!==', 'value' => 'empty', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'product', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_products', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'product', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_orders', ], [ 'name' => 'woo_purchase_type', 'operator' => '!==', 'value' => 'no_order', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'product', ] ] ], ] ] ] ); $repeater->add_control( 'product_types', [ 'label' => esc_html__( 'Select Product Types', 'essential-addons-for-elementor-lite' ), 'type' => Controls_Manager::SELECT2, 'label_block' => true, 'multiple' => true, 'options' => wc_get_product_types(), 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_cart', ], [ 'name' => 'woo_cart_logic_operator', 'operator' => '!==', 'value' => 'empty', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'ptype', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_products', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'ptype', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_orders', ], [ 'name' => 'woo_purchase_type', 'operator' => '!==', 'value' => 'no_order', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'ptype', ] ] ], ] ] ] ); $repeater->add_control( 'product_categories', [ 'label' => __( 'Search & Select Categories', 'essential-addons-for-elementor-lite' ), 'type' => 'eael-select2', 'options' => Helper::get_taxonomies_by_post( [ 'object_type' => 'product' ] ), 'label_block' => true, 'multiple' => true, 'source_name' => 'taxonomy', 'source_type' => 'product_cat', 'conditions' => [ 'relation' => 'or', 'terms' => [ [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_cart', ], [ 'name' => 'woo_cart_logic_operator', 'operator' => '!==', 'value' => 'empty', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'category', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_products', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'category', ] ] ], [ 'terms' => [ [ 'name' => 'logic_type', 'operator' => '===', 'value' => 'woo_orders', ], [ 'name' => 'woo_purchase_type', 'operator' => '!==', 'value' => 'no_order', ], [ 'name' => 'woo_cart_item_type', 'operator' => '===', 'value' => 'category', ] ] ], ] ] ] ); $repeater->add_control( 'cart_item_count', [ 'label' => esc_html__( 'Cart item Count', 'essential-addons-elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 1, 'step' => 1, 'default' => 2, 'condition' => [ 'logic_type' => 'woo_cart', 'woo_cart_item_type' => 'count' ] ] ); $currency = get_woocommerce_currency_symbol(); $repeater->add_control( 'cart_item_amount', [ 'label' => sprintf( esc_html__( 'Cart total (%s)', 'essential-addons-elementor' ), $currency ), 'type' => Controls_Manager::NUMBER, 'min' => 1, 'step' => 1, 'default' => 20, 'condition' => [ 'logic_type' => 'woo_cart', 'woo_cart_item_type' => 'amount' ] ] ); $repeater->add_control( 'product_stock_count', [ 'label' => esc_html__( 'Stock Count', 'essential-addons-elementor' ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'step' => 1, 'default' => 2, 'condition' => [ 'logic_type' => 'woo_products', 'woo_cart_item_type' => 'count' ] ] ); $repeater->add_control( 'product_price', [ 'label' => sprintf( esc_html__( 'Product Price (%s)', 'essential-addons-elementor' ), $currency ), 'type' => Controls_Manager::NUMBER, 'min' => 0, 'step' => 1, 'default' => 20, 'condition' => [ 'logic_type' => 'woo_products', 'woo_cart_item_type' => 'amount' ] ] ); $repeater->add_control( 'cart_item_count_note', [ 'label' => esc_html__( 'Important Note about item count', 'essential-addons-elementor' ), 'show_label' => false, 'type' => Controls_Manager::RAW_HTML, 'raw' => esc_html__( 'This is only applicable for Logic type Woo Cart & Woo Products', 'essential-addons-elementor' ), 'content_classes' => 'eael-warning', 'condition' => [ 'logic_type' => [ 'woo_orders' ], 'woo_cart_item_type' => [ 'count', 'amount' ] ] ] ); } private function get_ordered_products( $data_type, $cl_logic ){ $user_id = get_current_user_id(); $args = [ 'customer_id' => $user_id, 'limit' => -1, ]; if( 'last_order' === $cl_logic['woo_purchase_type'] ){ $args['limit'] = 1; } else if ( 'date_range' === $cl_logic['woo_purchase_type'] && "" !== $cl_logic['woo_order_date_from'] && "" !== $cl_logic['woo_order_date_to'] ) { $args['date_after'] = $cl_logic['woo_order_date_from']; $args['date_before'] = $cl_logic['woo_order_date_to']; } $orders = wc_get_orders( $args ); if( empty( $orders ) ){ return []; } $data = []; if( 'ids' === $data_type ){ foreach( $orders as $order ){ foreach ( $order->get_items() as $item_id => $item ) { $product = $this->get_product_from_order_item( $item ); $data[] = $product->get_id(); } } } else if( 'types' === $data_type ){ foreach( $orders as $order ){ foreach ( $order->get_items() as $item_id => $item ) { $product = $this->get_product_from_order_item( $item ); $data[] = $product->get_type(); } } } else if( 'categories' === $data_type ){ foreach( $orders as $order ){ foreach ( $order->get_items() as $item_id => $item ) { $product = $this->get_product_from_order_item( $item ); $data = array_merge( $data, $product->get_category_ids() ); } } } return array_unique( $data ); } private function get_product_from_order_item( $item ){ $product = $item->get_product(); $variation_id = $item->get_variation_id(); if( $variation_id ){ $parent_id = $product->get_parent_id(); $product = wc_get_product( $parent_id ); } return $product; } }