Popular Posts便利ですよね。人気記事を自動で取得してくれるプラグインです。当サイトでも使用しています。
ただ get_postsで記事を取得出来ないのが欠点で、サイトごとにアレンジするのはとても大変です。
get_postsで記事を取得するには、meta_keyを追加・設定しないといけなく、プラグインを直接書き換えるのは大変です。なので今回は無理やりquery_postsで取得できるようにします。
query_postsでランキングを取得する流れ
- Popular Postsのショートコード(wpp)で人気記事毎のurlを取得
- 人気記事毎のurlから投稿IDを取得
- 取得した投稿IDの配列のパラメータとして指定する。
作成したコード
function.phpに以下を追加
//popular post からquery_posts生成 function get_popular_args($range= "weekly", $limit = 8){ //urlを作成 $shortcode = '[wpp'; $atts = ' post_html="{url}," wpp_start="" wpp_end="" order_by="views" post_type="post" stats_comments=0 stats_views=1 '; $atts_2 = ' range='. $range; $atts_3 = ' limit='. $limit; $shortcode .= ' ' . $atts . $atts_2 . $atts_3 . ']'; $result = explode(",", strip_tags(do_shortcode( $shortcode ))); $ranked_post_ids = array(); //urlから投稿IDを作成 foreach($result as $_url){ if(!empty($_url) && trim($_url) != ''){ $id_string = url_to_postid($_url); array_push ($ranked_post_ids, intval($id_string)); } } //idをreturn $args = array( 'posts_per_page' => 20, 'post__in' => $ranked_post_ids, 'orderby' => 'post__in' ); return $args; }
使い方
get_popular_argsでquery_postsのパラメータを取得出来ます。
引数として、集計期間と表示する件数が指定出来ます。
集計期間で指定できる引数は以下の通りです。
引数 | 集計期間 |
daily | 1日 |
weekly | 週間 |
monthly | 月間 |
all | 全期間 |
引数を何も指定しない場合はデフォルトで週間人気記事を8件取得するようになっています。
//例,月間人気記事を10件取得 <?php $args = get_popular_args('monthly', '10'); query_posts($args); ?>
当サイトでは
スマホ版のレイアウトで使用しています。一応パソコンでも見る事が出来ます。(レイアウトは違いますが)
簡単に人気記事を取得する事が可能で、Popular_Postsのレイアウトに影響されず、自分のテーマのレイアウトで記事を取得する事が出来ます。(やったー)
余談
get_postsで人気記事を取得出来るWP-PostViewsはとても便利ですが、全期間の人気記事しか取得できないのはナンセンスです。Popular_Postsがget_postsに対応してくれればいいのに。
参考

WordPress Popular Posts のランキングを無理やりquery_postsで取得し直す | ハックノート
$shortcode = '[wpp'; $atts = ' post_html="{url}," wpp_start="" wpp_end="" order_by="views" range="monthly" stats_comments=0 stats_views
いつもお世話になっております。
The following two tabs change content below.

オーカワ
最新記事 by オーカワ (全て見る)
- AIで競馬を予想するサイトを構築します! - 2020年9月5日
- 【your-webtool】便利なツールを集めたサイトを作りました - 2020年8月8日
- 新型13インチMacbook Proを購入した - 2020年7月11日
コメント