2014-07-13 3 views
0

Я знаю, что в Интернете есть множество решений о том, как получить продукты WooCommerce в продаже, делая WP_Query. Тем не менее, WooCommerce, похоже, не работает полностью, если это . Объект WC_Query не заполнен. Например: фильтр или сортировкаПолучить WooCommerce продукты в продаже с WC_Query

Оба эти шаблоны называют:

woocommerce_products_will_display() 

Какого чек, чтобы увидеть, если страница является страница таксономии (очевидно, ложно, если вы используете свой собственный шаблон):

if (! is_product_taxonomy()) return false; 

Это пример простого решения, если вы просто хотите продукты: WooCommerce: Display ONLY on-sale products in Shop

Итак, я, кажется, несколько вопросов, которые я должен решить здесь:

1) Как сообщить WC, что моя страница «Продажа» является страницей таксономии? Есть ли какой-то трюк, который мне нужно сделать, чтобы заставить его войти в таксономию?

2) Как получить получить WC_Query заполнены с запросом продаж (а не просто WP_Query)

У меня есть плагины, которые зависят от:

$woocommerce->query->layered_nav_product_ids 

заселяется.

Любая помощь приветствуется! Спасибо !!!

ответ

1

Хорошо woocommerce_products_will_display() можно подключить, что означает, что вы можете определить его в своих собственных functions.php (или плагине для конкретного сайта) и изменить его, возвратив его true для вашего конкретного шаблона/страницы.

Я думаю, что это может означать некоторую настройку и фильтр.

EDIT

Я играл с этим немного больше. Обычно изменение сообщений, которые вы хотите получить, выполняется в крюке pre_get_posts. Я посмотрел, что делает WooCommerce. Они добавляют что-то к крюку pre_get_posts и вызывают от них специальный материал запроса.

Но их специальный материал запроса умирает, если вы не находитесь на странице WooCommerce. Таким образом, это заставило меня понять, что, может быть, мы могли бы просто называть это своей собственной функцией. Я поставил это вместе и в сочетании со специальным шаблоном страницы для страницы под названием «on-sale» (в основном только копия шаблона магазина), кажется, показывает только элементы для продажи с правильной сортировкой и разбиением на страницы.

Ваш пробег может отличаться, но я надеюсь, что это поможет.

function kia_pre_get_posts($q){ 

    // We only want to affect the main query 
    if (! $q->is_main_query()) { 
     return; 
    } 

    // Fix for verbose page rules 
    if (is_page('on-sale')) { 
     $q->set('post_type', 'product'); 
     $q->set('page_id', ''); 
     $q->set('page', ''); 
     $q->set('pagename', ''); 

     $meta_query = array(array(
      'key'  => '_sale_price', 
      'value' => 0, 
      'compare' => '>' 
     )); 

     $q->set('meta_query', $meta_query); 

     if (isset($q->query['paged'])) { 
      $q->set('paged', $q->query['paged']); 
     } 

     // Fix conditional Functions 
     $q->is_archive   = true; 
     $q->is_post_type_archive = true; 
     $q->is_singular   = false; 
     $q->is_page    = false; 

    } 

    $wc_query = WC()->query; 

    $wc_query->product_query($q); 

    if (is_search()) { 
     add_filter('posts_where', array($wc_query, 'search_post_excerpt')); 
     add_filter('wp', array($wc_query, 'remove_posts_where')); 
    } 

    add_filter('posts_where', array($wc_query, 'exclude_protected_products')); 

    // We're on a shop page so queue the woocommerce_get_products_in_view function 
    add_action('wp', array($wc_query, 'get_products_in_view'), 2); 

    // And remove the pre_get_posts hook 
    $wc_query->remove_product_query(); 

} 
add_action('pre_get_posts', 'kia_pre_get_posts'); 
+0

Yep - Думаю, я мог бы создать свою собственную версию. Тем не менее, это все равно не решит проблему WC_Query, которая не будет заполнена, что означает, что фильтры и количество продуктов и т. Д. Не будут работать. – TylerNZ

+0

Это правда. Я взглянул еще раз и придумал что-то новое. Никаких гарантий, но я надеюсь, что это поможет. – helgatheviking

Смежные вопросы