2014-01-14 3 views
7

Этот человек меня заводит. Я пытаюсь запросить и выводить продукты WooCommerce на основе определенного атрибута. Например, я настроил атрибут on с возможными значениями yes или no.Query WooCommerce Продукты на основе Атрибут

я запрос, используя следующие:

$args = array( 
    'post_type' => 'product', 
    'meta_key' => 'pa_on', 
    'meta_value' => 'yes', 
    'posts_per_page' => -1 
); 

query_posts($args); 

meta_key имеет решающее значение, возможно, если я его назову on Я ничего не получаю. Если я назову это pa_on (потому что я так понимаю, что настраиваемые пользовательские атрибуты WooCommerce), я ничего не получаю.

Однако, если я попробую другой запрос и воспользуюсь _featured, который является обычным обычным элементом WooCommerce, он возвращает соответствующие размещенные сообщения. Помогите, кто-нибудь?

+0

Кажется вне границ для StackOverflow. Это не явный вопрос PHP. Это специфично для WordPress, и поэтому сообщение должно быть перенесено на wordpress.stackexchange.com – Chris

+0

Спасибо Крис - я оставлю его висящим, и если модератор перемещает нить, пусть будет так :) –

ответ

0

Угадайте, что вам нужно, это запрос с набором значений meta_query:

$args = array(
'post_type' => 'product', 
'meta_query' => array(
    array(
     'key' => 'pa_on', 
     'value' => 'yes', 
     'compare' => '=' 
    ) 
) 
); 
$query = new WP_Query($args); 

Вы можете узнать больше о тех, кто здесь: http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

+1

Спасибо Kriesi, но я боюсь, что это тоже не сработает :(Обычно я использую этот формат для запросов и уже пробовал - вы думаете, что это будет работать где угодно в теме, правильно ?! Я, очевидно, неправильно рассматриваю атрибуты WooCommerce - здесь что-то не так. –

+0

вы знаете, как это сделать с sql-запросом raw? – huykon225

6

Я знаю, что это старый, но только в том случае, если кто натыкается на него, как я сделал сегодня - Woocommerce (я использую v2.6.2), похоже, сохраняет эти пользовательские атрибуты в качестве таксономий.

Я подозреваю, что правильные аргументы для первоначального вопроса будет выглядеть следующим образом:

$args = array(
    'post_type' => 'product', 
    'tax_query' => array(
     array(
     'taxonomy' => 'pa_on', 
     'field' => 'name', 
     'terms' => 'yes' 
    ) 
    ) 
); 

Используя соответствующие значения для моей установки, то решить мою проблему.

3

Для нового использования WooCommerce:

$attribute = 'on'; 
$value = 'yes'; 
$args = array(
    'post_type' => 'product', 
    'tax_query' => array(
    array(
     'taxonomy'  => 'pa_' . $attribute, 
     'terms'   => $value, 
     'field'   => 'slug', 
     'operator'  => 'IN' 
     ) 
    ) 
); 
0

Если атрибут продукта сохраняется как атрибут конкретного продукта (т.е. не глобальные), то вы не можете запросить его в систематике, вместо этого вы можете использовать этот фрагмент (копируется из http://snippet.fm/snippets/query-woocommerce-products-product-specific-custom-attribute/):

// Set custom attribute name and value to search for 
$attribute_name = 'color'; 
$attribute_value = 'green'; 

$serialized_value = serialize('name') . serialize($attribute_name) . serialize('value') . serialize($attribute_value); // extended version: $serialized_value = serialize($attribute_name) . 'a:6:{' . serialize('name') . serialize($attribute_name) . serialize('value') . serialize($attribute_value) . serialize('position'); 
$args = array(
    'post_type'  => 'product', 
    'post_status' => 'any', 
    'posts_per_page' => -1, 
    'orderby'  => 'title', 
    'order'   => 'ASC', 
    'meta_query' => array(
     array(
      'key'  => '_product_attributes', 
      'value' => $serialized_value, 
      'compare' => 'LIKE', 
     ), 
    ), 
); 
$loop = new WP_Query($args); 
while ($loop->have_posts()) { 
    $loop->the_post(); 
    // do stuff here... e.g. get_the_ID() 
} 
wp_reset_postdata(); 
Смежные вопросы