Published on

WordPress Popular Postsをウィジェット外で表示する方法

目次

ふと思い立ったので記事にしました。
お役に立てれば幸いです。

WordPress Popular Postsは人気記事をランキング形式で表示するプラグインで、基本的にウィジェット(サイドバー)で表示するものですね。

ときには別の場所に表示させたいこともあるかと思います。

任意の場所に表示する

そんなときに使う基本的なコードがこちら

//デフォルトで過去24時間で最も多く表示された投稿(最大10件)が表示される
<?php
if(function_exists('wpp_get_mostpopular')){
    wpp_get_mostpopular();
}
?>

このコードを任意のテンプレートに埋め込めば人気記事が表示されます。

任意のテンプレートはたとえば、「single.php」「page.php」などです。
フロントページ(TOPページ)が任意のテンプレートに設定されている場合はそのテンプレートに追記します。

テンプレートに埋め込む例

//single.phpの例
<?php
get_header();
?>

<article id="post-<?php the_ID(); ?>" <?php post_class('article') ?> itemscope="itemscope" itemprop="blogPost" itemtype="https://schema.org/BlogPosting">
  <?php
  if ( have_posts() ) {
    while ( have_posts() ) {
      the_post(); ?>

<?php
    } // end while
  } //have_posts end if ?>
</article>

<!--WordPressPopularPosts追加部分 -->
<h3>今日の人気記事</h3>
<?php
if(function_exists('wpp_get_mostpopular')){
    wpp_get_mostpopular();
}
?>
<!--WordPressPopularPosts追加部分ここまで -->

<?php
get_footer();
?>

PV数を消す設定

これで表示はできます。が、PV数がそのまま表示されているので消してみます。

//PV数を消して任意の場所に表示する
$args = array(
    'stats_views' => 0
);
wpp_get_mostpopular($args);

設定できるパラメータの例

他にも期間や表示数、PVではなくコメント数順など設定できることは色々ありまして、パラメータを設定することで反映させます。

//パラメーターの例
$args = array(
        'limit' => 5, //5記事分を表示
        'range' => 'last7days', //過去7日間、 他に設定できる期間"last24hours", "last7days", "last30days", "all"
     'pid' => '60,25,31' //除外したい投稿ID
     'cat' => '1,55,-74' //カテゴリーで絞り込む(−をつけるとそのカテゴリが除外になる)
     'taxonomy' => 'post_tag', // タクソノミーで絞り込む(タグ)
       'term_id' => '118,75,15', //絞り込むタクソノミーのID
        'order_by' => 'comments', //コメント数で並び替え
        'title_length' => 25', //表示するタイトルの文字数を制限
     'excerpt_length' => 55, //抜粋する文字数
      //抜粋を表示するときは以下のタグ出力もセットで使う(クラス名などはカスタム可)
      'post_html' => '<li>{thumb} {title} <span class="wpp-excerpt">{summary}</span></li>',
        'thumbnail_width' => 30, //サムネイルの幅を指定
        'thumbnail_height' => 30 //サムネイルの高さを指定
    );
wpp_get_mostpopular($args);

より詳細なパラメータは[設定]>[WordPress Popular Posts]>[パラメーター]で確認できます。

記事一覧ページの最初に人気記事を抜粋して表示させたり、記事の最後に人気記事を表示させることもできるので、カスタマイズの幅が広がると思います。

PV数だけを表示させる場合

記事のPVだけを表示させたいときもあると思います。
そんなときはこちら

<?php 
echo wpp_get_views(); //PV数だけが表示される

//指定した記事のPVを表示
echo wpp_get_views('12'); //記事IDが12のPV数が表示される

//記事一覧で各記事のPVを表示する場合(記事を取得するループ内で使う)
wpp_get_views(get_the_ID()) //get_the_ID()は自動で記事IDを取得してくれます

?>

記事のループの目印はhave_posts

記事のループってなんだ?どこ?ってときに簡単にみつける方法は、have_postsを探すといいと思います。

//基本的なループ
//パターン1
if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//
		// 投稿がここに表示される
		//
	} // end while
} // end if

//パターン2
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//省略
<?php endwhile; else: ?>
//省略
 <?php endif; ?>

ループ内でテンプレートを読み込んでいるケースも多いです。

if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		//テンプレートを読み込んでいる例
		get_template_part( 'template-parts/content');
		//
	} // end while
} // end if

記事一覧ページの記事タイトル横にPVをそれぞれ表示させたい場合

上記でループの説明をしましたが、もう少し具体的な説明をします。

タイトルはだいたい h2 などの見出しタグで囲まれているので、みつけたらその前後など好きな場所に追記します。

get_template_partのようにループ内でテンプレートを読み込んでいる場合はそのテンプレートを追っていきます。

get_template_part( 'template-parts/content');
この場合はtemplate-partsというディレクトリの中のcontent.phpを読み込んでいるのでそのファイルを探す

一部省略していますが以下のようなコードが見つかると思います。

if ( have_posts() ) {
	while ( have_posts() ) {
		the_post(); 
		
		// タイトルの最後にPVを表示する場合
               <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a><?php echo wpp_get_views(get_the_ID()); ?></h2>
		
	} // end while
} // end if


//要素を別に作って表示させる
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<span class="post_pv"><?php echo wpp_get_views(get_the_ID()); ?></span>

タイトルが関数で出力されているときは以下のように追記します。

//追記前
the_title( '<h2 class="entry-title heading-size-1"><a href="' . esc_url( get_permalink() ) . '">', '</a></h2>' );
//追記後
the_title( '<h2 class="entry-title heading-size-1"><a href="' . esc_url( get_permalink() ) . '">', '</a>'.wpp_get_views(get_the_ID()).'</h2>' );

ざっと説明させていただきましたが、いかがでしょうか。

気になっていた方はぜひカスタマイズしてみてください。