這不能與$_SESSION['watched']
數組一起工作,因爲$_SESSION
變量沒有鏈接到MySQL表,並且結果格式化查詢不知道它應該返回多少個帖子。
我只看到一個解決方案,以正確地解決這個任務:
您需要在數據庫中創建一個多個表可以存儲session_id
和post_id
變量。例如,我們將此表命名爲wp_watched
。
對於我們的表的示例結構將是:
CREATE TABLE wp_watched (
`watched_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`watched_SID` varchar(255) DEFAULT NULL,
`watched_POST_ID` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`watched_ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
和數據都將在我們的表存儲這樣的:
`watched_ID` | `watched_SID` | `watched_POST_ID`
---------------------------------------------------------------------------------
1 | 098f6bcd4621d373cade4e832627b4f6 | 345
2 | 88578edf8458ce06fbc5bb76a58c5ca4 | 123
3 | 1a36591bceec49c832079e270d7e8b73 | 5
4 | 2b1d3a6249c2d223c620393fa6420868 | 98
5 | 793560d7e4ef27db84dfe776fed9cea5 | 12
...
那麼你的會話的代碼,你需要重寫這樣的事情,使用custom queries:
$watchedrows = $wpdb->get_row("SELECT watched_ID FROM wp_watched WHERE watched_SID = " . session_id() . " AND watched_POST_ID = " . $post->ID);
if(!$watchedrows->watched_ID) {
$wpdb->insert('wp_watched', array('watched_SID' => session_id(), 'watched_POST_ID' => $post->ID), array('%s', '%d'));
}
然後,您需要創建自己的custom query基於wp_posts
表和wp_watched
表之間的連接來獲得職位:
$querystr = "
SELECT
$wpdb->posts.*
FROM
$wpdb->posts,
wp_watched
WHERE
$wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()
AND wp_watched.watched_SID = " . session_id() . "
AND $wpdb->posts.ID != wp_watched.watched_POST_ID
ORDER BY RAND()
LIMIT 1";
$randompost = $wpdb->get_row($querystr, OBJECT);
那麼,如果一切正常的變量$randompost
將包含隨機職位。
不知道如果代碼我提供的作品,我沒有測試它。也許有些SQL選擇需要重寫。
只是爲了向你展示你需要去的方向。
問題是什麼?代碼是否按預期工作,或者您是否想知道是否有不同/更好/更常見的解決方案? –
是的,它不能正常工作,能夠一次又一次地看到相同的帖子 – Breezer
你是否正確使用'session_start();'開始你的會話? - http://php.net/manual/en/function.session-start.php – polarblau