0 = 1 в запросе WordPress

Я фильтрую продукты WooCommerce по атрибутам: вот две мои функции, которые я использую

public function get_the_posts( $posts, $query = false ) {$filtered_posts   = array();
$queried_post_ids = array();
$query_filtered_posts = $this->layered_nav_query();

foreach ( $posts as $post ) {

if ( in_array( $post->ID, $query_filtered_posts ) ) {
$filtered_posts[]   = $post;
$queried_post_ids[] = $post->ID;
}
}

$query->posts       = $filtered_posts;
//print_r($query->posts );
$query->post_count  = count( $filtered_posts );// Ensure filters are set
$unfiltered_args =
array(
'post_type'              => 'product',
'numberposts'            => - 1,
'post_status'            => 'publish',
'fields'                 => 'ids',
'no_found_rows'          => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'pagename'               => '',
'wc_query'               => 'get_products_in_view',
'suppress_filters'       => true

);$this->unfiltered_product_ids = get_posts( $unfiltered_args );$this->filtered_product_ids   = $queried_post_ids;// Also store filtered posts ids...
if ( sizeof( $queried_post_ids ) > 0 ) {
$this->filtered_product_ids = array_intersect( $this->unfiltered_product_ids, $queried_post_ids );
} else {
$this->filtered_product_ids = $this->unfiltered_product_ids;
}

if ( sizeof( $this->layered_nav_post__in ) > 0 ) {
$this->layered_nav_product_ids = array_intersect( $this->unfiltered_product_ids, $this->layered_nav_post__in );
} else {
$this->layered_nav_product_ids = $this->unfiltered_product_ids;
}

echo $GLOBALS['wp_query']->request;
//print_r($posts);
return $posts;
}public function layered_nav_query( $filtered_posts  = array() ) {
global $_chosen_attributes, $woocommerce, $wp_query;

if ( sizeof( $_chosen_attributes ) > 0 ) {

$matched_products = array();
$filtered_attribute = false;

foreach ( $_chosen_attributes as $attribute => $data ) {

$matched_products_from_attribute = array();
$filtered = false;

if ( sizeof( $data['terms'] ) > 0 ) {
foreach ( $data['terms'] as $value ) {

$posts = get_posts(
array(
'post_type'     => 'product',
'numberposts'   => -1,
'post_status'   => 'publish',
'fields'        => 'ids',
'no_found_rows' => true,
'tax_query' => array(
array(
'taxonomy'  => $attribute,
'terms'     => $value,
'field'     => 'id'
)
)
)
);if ( $data['query_type'] == 'or' ) {

if ( ! is_wp_error( $posts ) && ( sizeof( $matched_products_from_attribute ) > 0 || $filtered ) )
$matched_products_from_attribute = array_merge($posts, $matched_products_from_attribute);
elseif ( ! is_wp_error( $posts ) )
$matched_products_from_attribute = $posts;

} else {

if ( ! is_wp_error( $posts ) && ( sizeof( $matched_products_from_attribute ) > 0 || $filtered ) )
$matched_products_from_attribute = array_intersect($posts, $matched_products_from_attribute);
elseif ( ! is_wp_error( $posts ) )
$matched_products_from_attribute = $posts;
}

$filtered = true;

}
}

if ( sizeof( $matched_products ) > 0 || $filtered_attribute )
$matched_products = array_intersect( $matched_products_from_attribute, $matched_products );
else
$matched_products = $matched_products_from_attribute;

$filtered_attribute = true;

}

if ( $filtered ) {

$woocommerce->query->layered_nav_post__in = $matched_products;
$woocommerce->query->layered_nav_post__in[] = 0;

if ( sizeof( $filtered_posts ) == 0 ) {
$filtered_posts = $matched_products;
$filtered_posts[] = 0;
} else {
$filtered_posts = array_intersect( $filtered_posts, $matched_products );
$filtered_posts[] = 0;
}

}
}return (array) $filtered_posts;
}

add_filter('loop_shop_post_in', 'layered_nav_query');
if(!is_admin()) {
add_filter( 'the_posts', 'get_the_posts', 15, 2 );
}

Но я не получаю результата:

Вот запрос, который генерируется из WooCommerce:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND wp_posts.ID IN (40,0) AND ( 0 = 1 ) AND ( ( wp_postmeta.meta_key = '_visibility' AND wp_postmeta.meta_value IN ('visible','catalog') ) ) AND wp_posts.post_type = 'product' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC LIMIT 0, 12

Проблема здесь: wp_posts.ID IN (40,0) И (0 = 1) Я проверил, что идентификатор продукта 40 существует, но в моем запросе добавлено 0 = 1, я не понимаю. Зачем?

Может кто-нибудь мне помочь?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector