[WordPress]Cocoonのget_access_ranking_records()を利用して、投稿を表示する

結論

<?php
  $days = '30';
  $entry_count = 10;
  $entry_type = ET_DEFAULT;
  $ranking_visible = 0;
  $pv_visible = 0;
  $cat_ids = array();
  $exclude_post_ids = array();
  $exclude_cat_ids = array();
  $records = get_access_ranking_records($days, $entry_count, $entry_type, $cat_ids, $exclude_post_ids, $exclude_cat_ids);

  foreach ( $records as $record ) { 
    $post_id = $record->ID; //投稿ID
    $post_pv_count = $records->sum_count; //投稿のPV
    $post_title = $record->post_title;
    echo "<a href='<?php echo get_permalink( $post_id ); ?>'"; //リンクを表示
    echo get_the_post_thumbnail( $post_id ); //サムネイルを表示
    echo get_the_category( $record->ID )[0]->name; //カテゴリ名を表示        
  }  
?>

調査したこと

記述されているファイル

/cocoon-master/lib/page-access/access-func.php

最終的に何を出力しているのか

SELECT 
  ID, sum_count, post_title, post_author, post_date, post_modified, post_status, post_type, comment_count 
FROM 
  ({$query}) AS {$ranks_posts}
  INNER JOIN {$wp_posts} ON {$ranks_posts}.post_id = {$wp_posts}.id
WHERE post_status = 'publish' AND
      post_type = '{$post_type}'

get_access_ranking_recordsの最後でwrap_joined_wp_posts_query($query)というfunctionで上記のSQLを発行している

なので、上記のオブジェクトの配列が返ってくる。返ってきた各オブジェクトのプロパティは、下記のようになる。

ID (投稿ID)
sum_count (投稿のPV数)
post_author (投稿のauthor)
post_date (投稿の投稿日付)
post_modified (投稿の更新日付)
post_status (投稿のステータス 下書きとか公開とか)
post_type (投稿タイプ 投稿とか固定ページとか)
comment_count (投稿のコメント数)

[結果オブジェクト]->IDや[結果オブジェクト]->post_statusで値を取得できる。

取得した値は配列なので、foreachやforを使いループして各要素を取得する。
配列の順番がそのままPVの多い順なので、配列の最初から順番にループを回せば多い順で取得・表示できる。

<?php
foreach ( $records as $record ) { 
  $post_id = $record->ID;
  $post_pv_count = $records->sum_count; }
?>

で利用できる。

リンクがほしい場合は、

echo get_permalink( $record->ID );

アイキャッチが欲しい場合は、

echo get_the_post_thumbnail( $record->ID );

カテゴリ名が欲しい場合は、

echo get_the_category( $record->ID )[0]->name;

コメント