WOOT - WooCommerce Active Products Tables

woot_filter_provider_

This hooks allows to make compatible a woocommerce filters plugins with WOOT.

Lets review filter adaptation for WOOF (as an example):

  • into the file functions.php of the current wordpress theme add next code:
    add_filter("woot_profile_extend", function($profile, $action, $shortcode_args) {
    
        if ('woot_woocommerce_tables' === $action) {
    
            if (isset($shortcode_args['filter_provider'])) {
    
                if ($shortcode_args['filter_provider'] === 'woof') {
                    if (array_key_exists('WOOF', $GLOBALS)) {
                        global $WOOF;
                        $profile[0]['filter_provider'] = 'woof';
                        $profile[0]['filter_data'] = $WOOF->get_request_data();
    
    
                        add_action('woot_filter_provider_woof', function ($args, $filter_data) {
                            if (!is_array($filter_data)) {
                                $filter_data = json_decode($filter_data, true);
                            }
    
                            if (!empty($filter_data) AND is_array($filter_data)) {
                                foreach (array_keys($filter_data) as $key) {
                                    if (is_integer($key)) {
                                        unset($filter_data[$key]);
                                    }
                                }
                            }
    
                            //***
                            //here is clean WOOF functionality
                            global $WOOF;
                            if ((isset($filter_data[$WOOF->get_swoof_search_slug()]) OR isset($filter_data['min_price'])) AND count($filter_data) > 1) {
    
                                unset($filter_data['paged']);
                                $_GET = $filter_data;
                                $_REQUEST['perpage'] = -1; //for getting all products ids in WOOF predict filtration
    
                                if (isset($filter_data['post_title']) AND!empty($filter_data['post_title'])) {
                                    woot()->filter->provider($filter_data);
                                }
    
                                $WOOF->woof_products_ids_prediction(true);
                                $ids = $_REQUEST['woof_wp_query_ids'];
    
                                if ($ids) {
                                    $args['post__in'] = $ids;
                                } else {
                                    unset($args['post__in']);
                                }
                            }
    
    
                            return $args;
                        }, 10, 2);
                    }
                }
    
            }
        }
    
        return $profile;
    }, 10, 3);
    
  • After this WOOT will be listening query arguments from WOOF

As you can see main thing there is define array $args fields in the right way.


Also the hook can be used for creating shortcodes with preselected products, lets look on the code for shortcode [woot_upsells]:

final class WOOT_WooCommerceUpsells extends WOOT_WooCommerceUniversal {

    public $slug = 'upsells';

    public function __construct() {
        $this->settings_columns_title = esc_html__('Upsells columns', 'woot-products-tables');
        parent::__construct();
    }

    public function filter_provider($args, $filter_data) {
        if (is_array($filter_data) AND isset($filter_data['product_id']) AND intval($filter_data['product_id']) > 0) {
            $product = WOOT_WooCommerce::get_product(intval($filter_data['product_id']));

            if ($product AND method_exists($product, 'get_upsell_ids')) {
                if (!$args['post__in'] = $product->get_upsell_ids()) {
                    $args['post__in'] = [-1];
                }
            } else {
                $args['post__in'] = [-1];
            }
        }

        return $args;
    }

}

new WOOT_WooCommerceUpsells();

The hook is added into the the class WOOT_WooCommerceUniversal: