<?php
namespace DgoraWcas\Integrations\Plugins\WooProductFilter;
use DgoraWcas\Helpers;
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
/**
* Integration with WooCommerce Product Filter by WooBeWoo
*
* Plugin URL: https://wordpress.org/plugins/woo-product-filter/
* Author: WooBeWoo
*/
class WooProductFilter {
public function init() {
if ( !defined( 'WPF_VERSION' ) ) {
return;
}
if ( version_compare( WPF_VERSION, '1.2.8' ) < 0 ) {
return;
}
// TODO This filter must be added by the plugin author
add_filter( 'wpf_getFilteredPriceSql', array($this, 'filter_price_sql') );
add_action( 'pre_get_posts', array($this, 'pre_get_posts') );
}
/**
* Narrowing the list of products for determining edge prices to those returned by our search engine
*
* @param string $sql
*
* @return string
*/
public function filter_price_sql( $sql ) {
global $wpdb;
$post_ids = apply_filters( 'dgwt/wcas/search_page/result_post_ids', array() );
if ( $post_ids ) {
$sql .= " AND {$wpdb->posts}.ID IN(" . implode( ',', $post_ids ) . ")";
}
return $sql;
}
/**
* Narrow the list of products in the AJAX search to those returned by our search engine
*
* Filtered custom WP_Query used by this plugin: wp-content/plugins/woo-product-filter/modules/woofilters/controller.php~152
*
* @param \WP_Query $query
*/
public function pre_get_posts( $query ) {
if ( !defined( 'DOING_AJAX' ) ) {
return;
}
if ( !isset( $_POST['action'] ) || isset( $_POST['action'] ) && $_POST['action'] !== 'filtersFrontend' ) {
return;
}
if ( !isset( $_POST['mod'] ) || isset( $_POST['mod'] ) && $_POST['mod'] !== 'woofilters' ) {
return;
}
if ( !isset( $_POST['currenturl'] ) ) {
return;
}
if ( $query->get( 'wpf_query' ) !== 1 ) {
return;
}
$orderby = 'relevance';
$order = 'desc';
// parse args from url passed as POST var
$url_query = wp_parse_url( $_POST['currenturl'] );
$url_query_args = array();
if ( empty( $url_query['query'] ) ) {
return;
}
wp_parse_str( $url_query['query'], $url_query_args );
if ( !isset( $url_query_args['dgwt_wcas'] ) || !isset( $url_query_args['s'] ) ) {
return;
}
if ( !empty( $url_query_args['orderby'] ) ) {
$orderby = wc_clean( wp_unslash( $url_query_args['orderby'] ) );
}
if ( !empty( $url_query_args['order'] ) ) {
$order = strtolower( wc_clean( wp_unslash( $url_query_args['order'] ) ) );
}
if ( $orderby === 'price' ) {
$order = 'asc';
}
$post_ids = array();
if ( !dgoraAsfwFs()->is_premium() ) {
$post_ids = Helpers::searchProducts( $url_query_args['s'] );
}
if ( $post_ids ) {
if ( version_compare( WPF_VERSION, '1.4.8', '>=' ) ) {
$query->set( 's', '' );
}
$query->set( 'post__in', $post_ids );
$query->set( 'orderby', 'post__in' );
}
}
}