2016-11-06 51 views
0

我有一個每天運行的函數,我想檢查帖子是否過期(基於自定義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

你要「INNERJOIN」拆分爲「INNER JOIN」,另外,我會建議使用前綴,而不是調用的屬性值$ wpdb,所以而不是$ wpdb-> posts,你可以使用{$ wpdb-> prefix}帖子等等。 – niklaz

+0

非常感謝niklaz我會檢查這一點,如果它有效,我會報告回答。謝謝 :) – user1190132

回答

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); 
}