問題描述

我發現 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。