Vla*_*pov 2 php mysql sql wordpress woocommerce
我正在尝试从数据库获取具有值条件的自定义字段的产品。
自定义字段名为:"_filtered_product"。
我只想获得价值 = 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)
";
Run Code Online (Sandbox Code Playgroud)
不知道为什么你想自己编写sql query这个简单的任务,而你可以使用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();
Run Code Online (Sandbox Code Playgroud)
这将输出:
Product id: {the product id} and product title: {the product name that matches the query}
Run Code Online (Sandbox Code Playgroud)
笔记:
IDandtitle给你举个例子。$meta_value元值是字符串,那么您就已准备就绪,这意味着我已经编写了查询,假设您的元值是字符串。但是,如果不是,则使用它{$meta_value}代替'{$meta_value}'.$wpdb并利用了它的属性和方法。wp_我没有使用硬编码数据库表前缀(默认情况下为 ) ,而是使用{$wpdb->prefix}.$wpdb->preparestatement 来保护sql 语句。ARRAY_A中的第二个参数$wpdb->get_results,以将数据作为关联数组获取!wp_query:Product id: {the product id} and product title: {the product name that matches the query}
Run Code Online (Sandbox Code Playgroud)
这个答案已经在 woocommerce 上经过充分测试5.x+并且工作正常!
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |