HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/self/cwd/wp-content/plugins/woolentor-addons/includes/archive_product_render.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

class Archive_Products_Render extends WC_Shortcode_Products {

    private $settings = [];
    private $is_added_product_filter = false;

    public function __construct( $settings = array(), $type = 'products' ) {
        $this->settings = $settings;
        $this->type = $type;
        $this->attributes = $this->parse_attributes( [
            'columns' => $settings['columns'],
            'rows' => $settings['rows'],
            'paginate' => $settings['paginate'],
            'cache' => false,
        ] );
        $this->query_args = $this->parse_query_args();
    }

    /**
     * Override the original `get_query_results`
     * with modifications that:
     * 1. Remove `pre_get_posts` action if `is_added_product_filter`.
     *
     * @return bool|mixed|object
     */

    protected function get_query_results() {
        $results = parent::get_query_results();
        // Start edit.
        if ( $this->is_added_product_filter ) {
            remove_action( 'pre_get_posts', [ wc()->query, 'product_query' ] );
        }
        // End edit.

        return $results;
    }

    protected function parse_query_args() {
        $settings = $this->settings;
        $query_args = [
            'post_type' => 'product',
            'post_status' => 'publish',
            'ignore_sticky_posts' => true,
            'no_found_rows' => false === wc_string_to_bool( $this->attributes['paginate'] ),
        ];
        
        if ( 'preview' == $this->settings['query_post_type'] ) {
            $query_args = $GLOBALS['wp_query']->query_vars;
    
            // Fix for parent::get_transient_name.
            $query_args['p'] = 0;
            $query_args['post_type'] = 'product';
            $query_args['post_status'] = 'publish';
            $query_args['ignore_sticky_posts'] = true;
            $query_args['no_found_rows'] = false === wc_string_to_bool( $this->attributes['paginate'] );
            $query_args['orderby'] = '';
            $query_args['order'] = '';
        
            // Allow queries to run e.g. layered nav.
            add_action( 'pre_get_posts', array( wc()->query, 'product_query' ) );
            
            $this->is_added_product_filter = true;
            
        }elseif ( 'current_query' === $this->settings['query_post_type'] ) {
            
            if ( !is_page( wc_get_page_id( 'shop' ) ) && $this->settings['editor_mode'] != true ) {
                $query_args = $GLOBALS['wp_query']->query_vars;
            }
            // Fix for parent::get_transient_name.
            if ( ! isset( $query_args['orderby'] ) ) {
                $query_args['orderby'] = '';
                $query_args['order'] = '';
            }
    
            add_action( 'pre_get_posts', [ wc()->query, 'product_query' ] );
            $this->is_added_product_filter = true;
            
        } else {
            $query_args = [
                'post_type' => 'product',
                'post_status' => 'publish',
                'ignore_sticky_posts' => true,
                'no_found_rows' => false === wc_string_to_bool( $this->attributes['paginate'] ),
                'orderby' => $settings['orderby'],
                'order' => strtoupper( $settings['order'] ),
            ];
    
            $query_args['meta_query'] = WC()->query->get_meta_query();
            $query_args['tax_query'] = [];
            // @codingStandardsIgnoreEnd
    
            // Visibility.
            $this->set_visibility_query_args( $query_args );
    
            // SKUs.
            $this->set_featured_query_args( $query_args );
    
            // IDs.
            $this->set_ids_query_args( $query_args );
    
            // Set specific types query args.
            if ( method_exists( $this, "set_{$this->type}_query_args" ) ) {
                $this->{"set_{$this->type}_query_args"}( $query_args );
            }
    
            // Categories.
            $this->set_categories_query_args( $query_args );
    
            // Tags.
            $this->set_tags_query_args( $query_args );
    
            $query_args = apply_filters( 'woocommerce_shortcode_products_query', $query_args, $this->attributes, $this->type );
    
            if ( 'yes' === $settings['paginate'] && 'yes' === $settings['allow_order'] ) {
                $ordering_args = WC()->query->get_catalog_ordering_args();
            } else {
                $ordering_args = WC()->query->get_catalog_ordering_args( $query_args['orderby'], $query_args['order'] );
            }
    
            $query_args['orderby'] = $ordering_args['orderby'];
            $query_args['order'] = $ordering_args['order'];
            if ( $ordering_args['meta_key'] ) {
                $query_args['meta_key'] = $ordering_args['meta_key'];
            }
    
            $query_args['posts_per_page'] = intval( $settings['columns'] * $settings['rows'] );
        } // End if().
        
        if ( 'yes' === $settings['paginate'] ) {
            $page = absint( empty( $_GET['product-page'] ) ? 1 : $_GET['product-page'] );
     
            if ( 1 < $page ) {
                $query_args['paged'] = $page;
            }
    
            if ( 'yes' !== $settings['allow_order'] ) {
                remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
            }
    
            if ( 'yes' !== $settings['show_result_count'] ) {
                remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
            }
        }
        $query_args['posts_per_page'] = intval( $settings['columns'] * $settings['rows'] );
        
        // Always query only IDs.
        $query_args['fields'] = 'ids';

        // Support WooLentor Filter
        if ( isset( $_GET['q'] ) ) {
            $query_args['s'] = !empty( $_GET['q'] ) ? $_GET['q'] : '';
        }

        return $query_args;
    }

    protected function set_ids_query_args( &$query_args ) {
        switch ( $this->settings['query_post_type'] ) {
            case 'by_id':
                $post__in = $this->settings['query_posts_ids'];
                break;
            case 'sale':
                $post__in = wc_get_product_ids_on_sale();
                break;
        }
    
        if ( ! empty( $post__in ) ) {
            $query_args['post__in'] = $post__in;
            remove_action( 'pre_get_posts', [ wc()->query, 'product_query' ] );
        }
    }

    protected function set_categories_query_args( &$query_args ) {
        $query_type = $this->settings['query_post_type'];
    
        if ( 'by_id' === $query_type || 'current_query' === $query_type ) {
            return;
        }
    
        if ( ! empty( $this->settings['query_product_cat_ids'] ) ) {
            $query_args['tax_query'][] = [
                'taxonomy' => 'product_cat',
                'terms' => $this->settings['query_product_cat_ids'],
                'field' => 'term_id',
            ];
        }
    }
    
    protected function set_tags_query_args( &$query_args ) {
        $query_type = $this->settings['query_post_type'];
    
        if ( 'by_id' === $query_type || 'current_query' === $query_type ) {
            return;
        }
    
        if ( ! empty( $this->settings['query_product_tag_ids'] ) ) {
            $query_args['tax_query'][] = [
                'taxonomy' => 'product_tag',
                'terms' => $this->settings['query_product_tag_ids'],
                'field' => 'term_id',
                'operator' => 'IN',
            ];
        }
    }
    
    protected function set_featured_query_args( &$query_args ) {
        if ( 'featured' === $this->settings['query_post_type'] ) {
            $product_visibility_term_ids = wc_get_product_visibility_term_ids();
    
            $query_args['tax_query'][] = [
                'taxonomy' => 'product_visibility',
                'field' => 'term_taxonomy_id',
                'terms' => [ $product_visibility_term_ids['featured'] ],
            ];
        }
    }


}