ランダム記事を表示させる &orderby=rand が効かなくなった時の対策

WordPress
この投稿は最終更新から7年以上経過しているため、内容が古くなっている可能性があります。

functions.phpに記述してサイドバーにランダム記事を表示させるという事をやっているのですが、ふと気付くと記事がランダムではなく新着順になってしまっていました。

原因は Post Types Order というプラグイン

こういった場合は大抵何かのプラグインと衝突しているのが原因です。
今回は記事を自由に並べ替えられる「Post Types Order」というプラグインとぶつかっていたようです。

毎回使うわけでもないので、並べ替えたあとにプラグインを停止しまえば良いという話なのですが、解決方法があるようなのでそちらを実践します。

まずは以下が、このブログのランダム記事取得の記述。
元々ちゃんと動いていたので「Post Types Order」を一旦停止すれば、きちんとランダムで表示されます。

functions.php
// ランダム記事
function random_post_list($show_num) {
    query_posts('posts_per_page=' . $show_num . '&orderby=rand');
    if(have_posts()) {
        while(have_posts()) {
            the_post();
	    echo '<li><a href="';
            the_permalink();
            echo '">';
            the_post_thumbnail(array(296,296), array('class' => 'random_post'));
            echo '<p class="tablet_random">';
            trim_str_by_chars( get_the_title(), 42 );
            echo '</p>';
            echo '</a></li>';
        }
    }
    wp_reset_query();
}

上記の3行目、「query_posts」の前に1行付け加えます。

加える内容は、フィルター除去の記述「remove_all_filters(‘posts_orderby’);」。
下記の3行目がそれに当たります。

functions.php
// ランダム記事
function random_post_list($show_num) {
    remove_all_filters('posts_orderby');
    query_posts('posts_per_page=' . $show_num . '&orderby=rand');
    if(have_posts()) {
        while(have_posts()) {
            the_post();
	    echo '<li><a href="';
            the_permalink();
            echo '">';
            the_post_thumbnail(array(296,296), array('class' => 'random_post'));
            echo '<p class="tablet_random">';
            trim_str_by_chars( get_the_title(), 42 );
            echo '</p>';
            echo '</a></li>';
        }
    }
    wp_reset_query();
}

これで「Post Types Order」を利用中でもランダムに記事が表示されるようになりました。