WordPress  
  投稿をページネーション付きでカテゴリー順に表示する方法
2021
13
Jun

投稿をページネーション付きでカテゴリー順に表示する方法

最終更新日: 2021年6月16日

  ポイントは

  • ページネーションを独自に作成すること。
  • カテゴリー順に投稿を取得すること。

  背景

  • 投稿をカテゴリー順に表示したい。
  • ページネーションにも対応させたい。
  • orderbyフィルターが使えなかった。

テンプレートファイル


global $wpdb;

$post_type = 'post';
$all_of_posts = wp_count_posts($post_type)->publish;//公開記事の総数
$p_per_p = get_query_var('posts_per_page');//管理画面で設定されている1ページ当たりの記事数

//ここから下はpaginate_linksへの引数にする値を取得
$paged = (get_query_var('paged')) ?: 1;//現在のページ番号
$base = get_pagenum_link(1);//番号付きのリンクを作るための基本となるurl
$format = (substr($base, -1) == '/' ? '' : '/') .
    user_trailingslashit('page/%#%/', 'paged');//ページネーションの構造を指定するの使用する
$base .= '%_%';
$total = ceil($all_of_posts / $p_per_p);//全体のページ数
$mid_size = 3;//現在のページの両側にいくつの数字を表示するか

//ページネーションを出力する
echo paginate_links(array(
    'base' => $base,
    'format' => $format,
    'total' => $total,
    'mid_size' => $mid_size,
    'current' => $paged,
));

//ここからはページ番号に応じた記事を取得して表示するためのもの
$offset = ($paged - 1) * $p_per_p;//2ページ以降でつかいます。記事をいくつスキップするか。

//sqlの組み立て
$sql = "SELECT DISTINCT * FROM " . $wpdb->posts . " AS p JOIN " . 
$wpdb->term_relationships . " AS r ON p.ID = r.object_id JOIN " . 
$wpdb->term_taxonomy . " AS t USING term_taxonomy_id WHERE post_type = %s 
ORDER BY t.term_id ASC LIMIT %d, %d";

//sqlを安全なものに
$query = $wpdb->prepare($sql, $post_type, $offset, $p_per_p);

//ページに表示する記事を連想配列で取得
$results = $wpdb->get_results($query, ARRAY_A);

foreach ($results as $result) {
    //ここに出力内容を記入。titleを出力すると
    echo $result['title'];
}

 

top