在Woocommerce中使用SQL从特定产品属性值获取产品ID

时间:2018-08-19 17:06:33

标签: php mysql sql woocommerce custom-taxonomy

我正在尝试获取产品属性为pa_color = 'Black'pa_waterproof = 'Yes'的产品ID。但是我还没有成功。

这是我的代码:

global $wpdb;

$product_id = $wpdb->get_results( "
    SELECT post_id 
    FROM $wpdb->postmeta 
    WHERE meta_key='pa_color' 
    AND meta_value='Black' 
    AND meta_key='pa_waterproof' 
    AND meta_value='Yes' 
" );

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

更新 (与您的评论有关)

您可能正试图获取变量产品ID ,但这不是一回事。

然后,您可以使用正常产品属性分类术语名称(甚至是术语ID或术语词条)

在这种情况下,请尝试以下操作:

global $wpdb;

$results = $wpdb->get_col( "
    SELECT p.ID
    FROM {$wpdb->prefix}posts as p
    INNER JOIN {$wpdb->prefix}term_relationships as tr ON p.ID = tr.object_id
    INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
    INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
    INNER JOIN {$wpdb->prefix}term_relationships as tr2 ON p.ID = tr2.object_id
    INNER JOIN {$wpdb->prefix}term_taxonomy as tt2 ON tr2.term_taxonomy_id = tt2.term_taxonomy_id
    INNER JOIN {$wpdb->prefix}terms as t2 ON tt2.term_id = t2.term_id
    WHERE p.post_type LIKE 'product'
    AND p.post_status LIKE 'publish'
    AND tt.taxonomy LIKE 'pa_color'
    AND t.name = 'Black'
    AND tt2.taxonomy LIKE 'pa_waterproof'
    AND t2.name = 'Yes'
");

// Raw output
echo '<pre>'; print_r($results); echo '</pre>';

经测试可正常工作


第一个答案。

在Woocommerce中使用SQL从特定产品属性值获取产品变体ID

在数据库中,post_meta表中产品变体的产品属性注册术语是术语条(不是术语名称),并且所有产品属性meta_key都以attribute_pa_开头,而不是{ {1}}。

因此它将改为pa_attribute_pa_color = 'black'

此外,您还需要在attribute_pa_waterproof = 'yes'表上查询wp_posts的SQL查询帖子类型product_variation表联接两次以查询每个产品属性。 / p>

所以尝试:

wp_postmeta

经测试可正常工作