我有一个每天运行的功能,我想检查帖子是否过期(基于自定义的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?我不确定正确的语法是什么。非常感谢您的帮助:)
答案 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);
}