基于属性查询WooCommerce产品

时间:2014-01-14 18:15:15

标签: wordpress attributes woocommerce

这个让我疯狂..我正在尝试根据特定属性查询和输出WooCommerce产品。例如,我设置了一个名为on的属性,其值可能为yesno

我使用以下内容进行查询:

$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自定义元素,它会返回相关的精选帖子。帮忙,有人吗?

4 个答案:

答案 0 :(得分:6)

我知道这是一个旧的,但万一有人偶然发现它像我今天所做的那样 - Woocommerce(我使用的是v2.6.2)似乎将这些自定义属性存储为分类法。

我怀疑原始问题的正确args看起来像这样:

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

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

答案 1 :(得分:3)

对于新的woocommerce使用:

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

答案 2 :(得分:1)

如果将产品属性另存为特定产品属性(即非全局),则无法将其作为分类进行查询,而是可以使用此代码段(从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();

答案 3 :(得分: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