nissin note

Study is Not Study

PHP

【WordPress】 Popular Postsをquery_postsで取得する!

人気記事を表示してくれるプラグイン 「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を記入


//例,月間人気記事を10件取得
<?php $args = get_popular_args('monthly', '10');
query_posts($args); ?>

使用例はこちら

<?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(); ?>

こちらで実装が出来ました。

参考にしたサイト

WordPress Popular Posts をカスタマイズする

2 コメント

  1. Popular Postsをquery_postsで取得に関する事で質問が有ります。

    サイドバーではなく固定ページにて各カテゴリーに登録された記事全てを対象にしたランキングをページ送りを使って表示する事は出来ないかと考えております。

    もし可能ならアドバイスを頂けないでしょうか?

返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA