gpt4 book ai didi

php - WooCommerce SQL 查询查找具有特定元键和元值的产品

转载 作者:行者123 更新时间:2023-12-02 01:57:35 26 4
gpt4 key购买 nike

我正在尝试从数据库获取带有值条件的自定义字段的产品。

Custom field is named: "_filtered_product".
I want to get products only with value = 1

这是我编写的 SQL 查询。

$view_low_filt_sql =
"LEFT JOIN $wpdb->postmeta manage ON (p.ID = manage.post_id AND manage.meta_key = '_manage_stock')
LEFT JOIN $wpdb->postmeta stock ON (p.ID = stock.post_id AND stock.meta_key = '_stock')
LEFT JOIN $wpdb->postmeta threshold ON (p.ID = threshold.post_id AND threshold.meta_key = '_low_inventory_number')
LEFT JOIN $wpdb->postmeta filtered ON (p.ID = filtered.post_id AND filtered.meta_key = '_filtered_product')
WHERE (p.post_type = 'product' OR p.post_type = 'product_variation')
AND (p.post_status = 'publish' OR p.post_status = 'private' OR p.post_status = 'draft')
AND manage.meta_value = 'yes'
AND threshold.meta_value IS NOT NULL
AND filtered.meta_value = '1'
AND IFNULL(CAST(stock.meta_value AS SIGNED),0) <= CAST(threshold.meta_value AS SIGNED)
";

最佳答案

不知道为什么要为这个简单的任务编写自己的 sql 查询,而您可以使用 wp_query!

话虽这么说,您可以使用以下代码片段来获取具有特定元键和元值的所有产品:

global $wpdb;

$meta_key = '_filtered_product';

$meta_value = '1';

$sql_statement = "SELECT {$wpdb->prefix}posts.* FROM {$wpdb->prefix}posts INNER JOIN {$wpdb->prefix}postmeta ON ( {$wpdb->prefix}posts.ID = {$wpdb->prefix}postmeta.post_id ) WHERE 1=1 AND ( ( {$wpdb->prefix}postmeta.meta_key = '{$meta_key}' AND {$wpdb->prefix}postmeta.meta_value = '{$meta_value}' ) ) AND {$wpdb->prefix}posts.post_type = 'product' AND ({$wpdb->prefix}posts.post_status = 'publish' OR {$wpdb->prefix}posts.post_status = 'private') GROUP BY {$wpdb->prefix}posts.ID ORDER BY {$wpdb->prefix}posts.post_date DESC";

$sql = $wpdb->prepare($sql_statement);

$sql_results = $wpdb->get_results($sql, ARRAY_A);

if ($sql_results) {

foreach ($sql_results as $result) {

echo "<p>Product id: " . $result['ID'] . " and product title: " . $result['post_title'] . "<p>";

}

} else {

echo "Sorry can't find anything at the moment!";

}

wp_reset_postdata();

这将输出:

Product id: {the product id} and product title: {the product name that matches the query} 

注意:

  • 上面的查询将检索产品的所有数据。我只是用 IDtitle 来给你举个例子。
  • 如果您的 $meta_value 是字符串,那么您就已准备就绪,这意味着我已经编写了查询,假设您的元值是字符串。但是,如果不是,则使用此 {$meta_value} 而不是 '{$meta_value}'
  • 我使用了全局 $wpdb 并利用了它的属性和方法。
  • 我没有使用硬编码数据库表前缀(默认情况下为 wp_),而是使用了 {$wpdb->prefix}
  • 我还使用了 $wpdb->prepare 语句来保护 sql 语句。
  • 此外,我还使用了 ARRAY_A 作为 $wpdb->get_results 函数中的第二个参数,以获取关联数组形式的数据!
  • 此外,请注意,此查询按日期降序排序,这意味着最近的产品将首先输出!

使用 wp_query 执行相同的查询:

$meta_key = '_filtered_product';

$meta_value = '1';

$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => $meta_key,
'value' => $meta_value,
'compare' => '=',
)
)
);

$woo_custom_query = new WP_Query($args);

if ($woo_custom_query->have_posts()) {

while ($woo_custom_query->have_posts()) {

$woo_custom_query->the_post();

the_title();
}

} else {

echo "Sorry can't find anything at the moment!";

}

wp_reset_postdata();

这个答案已经在 woocommerce 5.x+ 上经过全面测试并且工作正常!

关于php - WooCommerce SQL 查询查找具有特定元键和元值的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69429237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com