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

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」を利用中でもランダムに記事が表示されるようになりました。

コメント

 DISQUSコメントシステムとは?
DISQUSコメントシステムFacebook Twitter Google などのアカウントを使用してコメントを残すことができます。
また、それらを使いたくない場合でも メールアドレスのみ でコメントが可能で、その際のアドレスはもちろん非公開です。
YouTubeTweet などはURLを貼ると自動で埋め込み表示されますし、画像をアップすることもできます。
お気軽にコメント頂けると嬉しいです。

New Post



Random


CLOSE