在Wooccommerce中通过_sale_price_dates_to获取产品ID



我试图从postmeta中获取post_id,其中_sale_price_dates_to现在较少。我做了这样的事:

global $wpdb;
$publishid = $wpdb->get_results('SELECT meta_value FROM ' . $wpdb->postmeta . ' WHERE meta_key="_sale_price_dates_to" and meta_value<=' .time().'') or die("Error: Cannot create object");

但它不起作用。可能是因为_sale_price_dates_to的格式是longtext而不是date。如何在查询中更改它?

但这还没有结束。我想添加产品必须发布的条件,然后我必须加入:

$publishid = $wpdb->get_results('SELECT meta_value FROM ' . $wpdb->postmeta . 'join' . $wpdb->posts . ' ON wp_posts.ID = wp_postmeta.post_id WHERE wp_postmeta.meta_key="_sale_price_dates_to" and wp_postmeta.meta_value<=' .time().' and wp_posts.post_status="publish" ') or die("Error: Cannot create object");

但由于第一个问题,我不知道它是否有效。

更新: 在代码中设置正确的时区

尝试以下操作,使用WPDB进行功能性SQL查询,以获取Post-ID,其中Post-meta_sale_price_dates_to时间戳小于now时间戳:

global $wpdb;
// Set the correct time zone  (http://php.net/manual/en/timezones.php)
date_default_timezone_set('Europe/Paris');
// An array of IDs
$results = $wpdb->get_col("
SELECT p.ID
FROM {$wpdb->prefix}posts AS p
JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
WHERE p.post_status = 'publish'
AND pm.meta_key = '_sale_price_dates_to'
AND pm.meta_value <= '".time()."'
AND pm.meta_value != ''
");
// Raw Output (array of post IDs)
print_r($results);

测试并工作。

需要

meta_value != ''来避免查询具有空值的Post ID。

相关内容

最新更新