2012-03-12 81 views
1

我想我的WordPress的帖子15天后自動過期(變成草稿),但也保護某些類別的帖子。我正在閱讀一些關於此的主題,並將以下代碼添加到了我的主題功能中,但它不起作用。我在這裏做錯了什麼?請幫忙!wordpress帖子自動過期

function expire_posts() { 
global $wpdb; 
$daystogo = "15"; 
$protcats = array(9,10); 
$sql = "UPDATE wp_posts SET `post_status` = 'draft' WHERE `post_type` = 'post' AND `post_category` != '$protcats' AND DATEDIFF(NOW(), `post_date`) > '$daystogo')"; 
$wpdb->query($sql); 
} 

add_action('wp_head', 'expire_posts'); 

回答

2

有一個post expirator插件來完成這項工作。您只需將其配置爲您的要求即可。安裝過程和其他細節隨插件提供。它肯定有配置選項。

+0

是的,我知道這個,但它不提供選項的類別。我想我的代碼的問題是也承認類別,因爲在wp_post數據庫中沒有列「post_category」,我只是不知道如何檢索它,或它分配在哪裏:s – Ado 2012-03-12 02:05:36

1

您正在將一個數組($ protcats)放入一個字符串中。
嘗試echo $sql;,您會看到它不會將您的貓ID置於查詢中,而是array
試試這個:

$protcats = array(9,10); 

$excludeCats = ''; 
foreach($protcats as $cat){ 
    $excludeCats .= " AND `post_category` != '$cat' "; //add each category to it's own exclude 
} 
$sql = "UPDATE wp_posts SET `post_status` = 'draft' WHERE `post_type` = 'post' ". $excludeCats ." AND DATEDIFF(NOW(), `post_date`) > '$daystogo')"; 
+0

謝謝janw它看起來不錯,因爲你編碼。但它不起作用:因爲wp_post數據庫中沒有post_category列,我必須找到如何提取數據,但是我找不到它:即使我嘗試不添加類別,它也不會不工作,我顯然做錯了什麼... – Ado 2012-03-12 10:03:44

+0

哦,是的,我沒有檢查查詢本身,我會回來後用awnser – janw 2012-03-12 10:59:38

+0

檢查http://codex.wordpress.org/Class_Reference/WP_Query不知道它會起作用。但很容易選擇類別,排除 – janw 2012-03-12 12:03:49