2015-11-12 4 views
0

Так что в основном я использую следующий код, который, кажется, полностью помещает все в запрос, я все равно получаю неправильные продукты. Например, я требую продуктов с продуктовой категорией «зимним», но по-прежнему получать продукты в категории «всесезонные»Неверные сообщения, показывающие WP-Query on WooCommerce

Вот мой код:

add_action('pre_get_posts', 'advanced_search_query', 1000); 
function advanced_search_query($query) { 
if (! is_admin() && $query->is_main_query() && $query->is_search()) { 
    global $wp_query; 
    // category terms search 
    $categories = array('winter','all-season','summer','run-flat'); 
    $category = $_GET['category']; 
    $categories = array_diff($categories,array($category)); 
    $taxonomy = 'product_cat'; 
    if (isset($category) && !empty($category)) { 
     $args = array(
      'relation' => 'AND', 
      array(
       'taxonomy' => $taxonomy, 
       'field' => 'slug', 
       'terms' => $category, 
       'operator' => 'IN' 
      ), 
      array(
       'taxonomy' => $taxonomy, 
       'field' => 'slug', 
       'terms' => array($categories), 
       'operator' => 'NOT IN' 
      ) 
     ); 
     $query->set('tax_query', $args); 
     print_r($query); 
    } 
    return $query; 
    } 
} 

print_r возвращает следующее:

WP_Query Object ([query] => Array ([s] => 2457516 [post_type] => product) [query_vars] => Array ([s] => 2457516 [post_type] => product [error] => [ m] => [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] = > [page_id] => 0 [second] => [минута] => [час] => [день] => 0 [месяцnum] => 0 [год] => 0 [w] => 0 [category_name] => [tag] => [cat] => [ tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => total_sales [meta_value] => [preview] = > [предложение] => [fields] => [menu_order] => [category__in] => Array() [category__not_in] => Array() [category__and] => Array() [post__in] => Array() [post__not_in ] => Array() [tag__in] => Array() [tag__not_in] => Array() [tag__and] => Array() [tag_slug__in] => Array() [tag_slug__and] => Array() [post_parent__in] = > Array() [post_parent__not_in] => Array() [author__in] => Array() [author__not_in] => Array() [orderby] => menu_order title [order] => ASC [meta_query] => Array ([0 ] => Массив ([ключ] => _visibility [значение] => Массив ([0] => visible [1] => поиск) [compare] => IN) [1] => Массив ([ключ] => _stock_status [значение] => instock [compare] => =)) [posts_per_page] => 12 [wc_query] => product_query [tax_quer y] => Массив ([отношение] => AND [0] => Массив ([таксономия] => product_cat [field] => slug [terms] => winter [operator] => IN) [1] => Array ([таксономия] => product_cat [field] => slug [terms] => Array ([1] => all-season [2] => summer [3] => run-flat) [operator] => NOT IN))) [tax_query] => WP_Tax_Query Object ([запросы] => Array() [отношение] => AND [table_aliases: protected] => Array() [queried_terms] => Array() [primary_table] => [primary_id_column ] =>) [meta_query] => [date_query] => [post_count] => 0 [current_post] => -1 [in_the_loop] => [comment_count] => 0 [current_comment] => -1 [found_posts] => 0 [max_num_pages] => 0 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => 1 [is_date] => [is_year] => [is_month] => [ is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => 1 [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => [is_404] => [is_comments_popup] => [is_paged] => [is_admin] => [ is_attachment] => [is_singular] => [is_robots] => [is_posts_page] => [is_post_type_archive] => 1 [query_vars_hash: WP_Query: private] => ac61ad4fe3856f3f91e2ca85a7e667a1 [query_vars_changed: WP_Query: private] => [thumbnails_cached] => [ стоп-слова: WP_Query: private] => [compat_fields: WP_Query: private] => Array ([0] => query_vars_hash [1] => query_vars_changed) [compat_methods: WP_Query: private] => Array ([0] => init_query_flags [ 1] => parse_tax_query))

ответ

0

Я полагаю, у вас есть двойной массив для условий в вашем tax_query. У вас есть:

$categories = array('...'); 

$args = array(
    //.... 
    array(
     'terms' => array($categories) 
    ) 
    //.... 
); 

Это должно быть просто:

'terms' => $categories 
+0

Просто попробовал это, и это, кажется, дает мне ту же самую проблему –

+0

ли вы подтвердили, что '$ _GET [«категории»] 'является то, что вы ожидаете? Кроме того, вы должны дезинфицировать эту ценность ... – Chris

+0

Да, это точная ценность, которую я ожидаю, что вы подразумеваете под дезинфекцией? это происходит из выбранного тега. –