問題描述
我發現 Wordpress 支援這個問題,不幸的是現在已經關閉了。我有同樣的問題…(見下文)
我們建立了一個網站,會員可以推薦喜歡的書籍,電影,歌曲等等。對於這個問題,我將以 「電影」 頁面為例。
“Movies” 頁面最終是一個自定義頁面模板,它要求 WordPress 顯示已經給出類別”movies”(類別 31) 的所有帖子的隨機列表。它使用以下程式碼以隨機順序顯示這些電影的標題。
<?php
$rand = new WP_Query("cat=31&showposts=-1&orderby=rand");
while($rand->have_posts()) : $rand->the_post();
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
問題是列表越來越長,我想將它分成兩個或更多的每個約 10 部電影的頁面。為了實現這一點,我使用了下面的程式碼。
<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("cat=31&orderby=rand&showposts=10&paged=$page");
while ( have_posts() ) : the_post()
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
但是有一個問題,因為儘管它將資料分成 10 頁 (每頁分頁),但它沒有在第 2 頁上新增一組新的 10 個帖子等等。換句話說,因為它是按照隨機順序排列的,所以它只是出來,並獲得另外 10 個隨機的帖子 (或在這種情況下是電影標題) 。因此,我們有一些重複的電影標題帖子,而不是第 2 頁上的一組新的 10 個隨機電影。
我的問題是 – 我可以新增到這個程式碼,以獲得 wordpress 到”remember” 哪裡隨機 10 個帖子它包含在第 1 頁,然後它得到一組新的 10 個帖子放在第 2 頁,3 等,直到所有的帖子被顯示。我希望每頁只能發生一次,每次按 10 進行排序。
最佳解決方案
您可以使用過濾器修改 WP_query 的 ORDER BY 語句。
這樣你可以手動設定查詢使用 ORDER BY RAND($ seed);
Mysql RAND() 接受種子作為可選引數。使用種子,它將每次返回相同的隨機結果集。
因此,您可以在第一頁載入上生成隨機數,然後將其儲存在 SESSION 變數中,並將其用作進一步分頁請求的 $ seed 。
例如,如果您嘗試在主迴圈中執行此操作,則可以將以下內容新增到 functions.php 檔案中。
session_start();
add_filter('posts_orderby', 'edit_posts_orderby');
function edit_posts_orderby($orderby_statement) {
$seed = $_SESSION['seed'];
if (empty($seed)) {
$seed = rand();
$_SESSION['seed'] = $seed;
}
$orderby_statement = 'RAND('.$seed.')';
return $orderby_statement;
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。