如果post meta字段等于value,则生成产品帖子草稿

时间:2016-11-06 01:51:46

标签: sql wordpress

我有一个每天运行的功能,我想检查帖子是否过期(基于自定义的postmeta字段),如果是这样,将帖子状态设置为草稿。我认为我的原则是正确的但是语法可能有些错误,这使得它无法正常工作。这是迄今为止的功能:

function make_product_draft( ) {
    global $wpdb; 
    $sql = "
    UPDATE $wpdb->posts 
    INNERJOIN $wpdb->postmeta on $wpdb->posts.ID = $wpdb->postmeta.post_id
    SET $wpdb->posts.post_status = 'draft' 
    WHERE $wpdb->posts.post_type = 'product' AND $wpdb->posts.post_status = 'publish' AND $wpdb->postmeta.post_type = 'expired'
    ";
    $wpdb->query($sql);
}

我认为我出错的地方是我这样做的时候:$ wpdb-> posts.ID?我不确定正确的语法是什么。非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

自从我发帖以来,我的要求发生了变化,但以下代码对我有用。感谢Niklaz的评论,你的帮助是让它正常工作的关键:)

function make_product_draft( ) {
global $wpdb; 
$sql = "UPDATE {$wpdb->posts} 
INNER JOIN {$wpdb->postmeta} on {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id
SET {$wpdb->posts}.post_status = 'draft' 
WHERE {$wpdb->posts}.post_type = 'product' AND {$wpdb->posts}.post_status = 'publish' AND {$wpdb->postmeta}.meta_key = '_product_expiry' AND {$wpdb->postmeta}.meta_value < CURDATE()
";
$wpdb->query($sql);
}