2014-01-14 142 views
7

这是一个驱使我坚果..我试图查询和输出基于特定属性的WooCommerce产品。例如,我设置了一个名为on的属性,可能的值为yesno基于属性查询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查询原始数据吗? – huykon225

6

我知道这是一个古老的一个,但以防万一有人像我今天所做的那样绊倒它 - Woocommerce(我正在使用v2.6.2)似乎将这些自定义属性存储为分类法。

我怀疑原始问题的正确ARGS是这样的:

​​

使用适当的值,我安装的,它解决了我的问题。

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();