现在通过Woocommerce获取_sale_price_dates_to之前的产品ID

时间:2018-10-30 14:07:32

标签: php mysql sql wordpress woocommerce

我尝试从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的格式为长文本而不是日期。如何在查询中更改它?

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

$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");

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

1 个答案:

答案 0 :(得分:0)

更新在代码中设置right time zone

尝试以下操作,使用WPDB进行功能性SQL查询,以获取帖子ID,其中帖子元_sale_price_dates_to时间戳比现在的时间戳要短:

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 != ''可以避免查询具有空值的帖子ID。