人気記事を表示してくれるプラグイン 「Wordpress Popular Posts」はとても便利です。
前回記事にした「WordPress Popular Posts を週間・月間・全期間 PHPで吐き出す方法」でサイトの制作を行っておりましたが、最近投稿の中にあるカスタムフィールドを表示しなければいけない案件が発生しました。
「人気記事を表示する「WordPress Popular Posts」でカスタムフィールドの値を出力する」の記事を参考に取り組んではみたのですが、吐き出したPHP全てに反映されるため、別の内容を表示したい時に使えませんでした。
なので個別PHPで表示させる為にquery_postsでPopular Postsを表示する方法に取り組みました。
この記事の目次
functions.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;
}
表示したい場所にquery_postsを記入
[code lang=”php”]
//例,月間人気記事を10件取得
<?php $args = get_popular_args(‘monthly’, ’10’);
query_posts($args); ?>
使用例はこちら
[code lang=”php”]
<?php $args = get_popular_args(‘monthly’, ’10’);
query_posts($args); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li>
<a href="<?php echo get_permalink(); ?>">
<h3><?php the_title() ?></h3>
<p><?php echo get_post_meta($post->ID , ‘カスタムフィールド名’ ,true); ?></p>
</a>
</li>
<?php endwhile; else : ?>
<li>該当なし</li>
<?php endif;
wp_reset_query(); ?>
こちらで実装が出来ました。
コメント
Popular Postsをquery_postsで取得に関する事で質問が有ります。
サイドバーではなく固定ページにて各カテゴリーに登録された記事全てを対象にしたランキングをページ送りを使って表示する事は出来ないかと考えております。
もし可能ならアドバイスを頂けないでしょうか?
返信が遅くなって申し訳ないです。
PHPをショートコードで呼び出す方法があります。
ショートコードなら固定ページでも使用出来るので僕は以下のやり方で実装してます。
【WordPress】PHPファイルをショートコードで読み込む方法