Amazon10/19まで!プライム感謝祭開催中! セール会場へ

SWELL│ページネーション機能を簡単に実装する方法

SWELLの投稿リストは便利ですが、記事が大量にある場合はページネーションをつけたいですよね。

そういった場合はコードを書いて自作するのですが、

実はSWELLにはページネーション用の関数があるので、それを使うと簡単にページネーションをつけたカスタマイズができます。

その備忘録です。

サンプル

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

SWELLのページネーション機能の実装ポイント

ページネーションの実装のポイントを2点書いておきます。

paged の取得と適用

  • get_query_var('paged') を使って、現在のページ番号を取得
  • paged が取得できない場合は 1 をデフォルト値とする
  • これにより、ページネーションをクリックした際に、適切なページが読み込まれます
  • フロントページに設定した固定ページでは paged ではなく page を使います(WordPress公式リファレンス)。常に1ページ目になる場合はここを確認します
$paged = get_query_var( 'paged' ) ?: 1; // 現在のページ番号を取得

ページネーションの表示

  • SWELL_Theme::get_parts( 'parts/post_list/item/pagination', [...] ) を使い、ページネーションを適用
  • 'pages' => $query->max_num_pages:総ページ数を取得し、ページネーションに適用。
  • 'paged' => $paged:現在のページ番号を適用し、正しいページリンクを生成。
SWELL_Theme::get_parts( 'parts/post_list/item/pagination', [
    'pages' => $query->max_num_pages, // 総ページ数
    'paged' => $paged, // 現在のページ
] );

SWELLでページネーション機能を簡単に実装する方法

冒頭に書いた人気記事のページネーションの実装コードを書いておきます。

実装は基本、functions.phpで完結します。

// 人気記事を取得する関数(ページネーション対応)
function get_popular_posts( $limit = 10, $paged = 1 ) {
    $meta_key = defined( 'SWELL_CT_KEY' ) ? SWELL_CT_KEY : 'swell_pv_ct';

    $args = array(
        'posts_per_page'      => $limit,
        'paged'               => $paged, // ページネーション用の現在のページ番号
        'meta_key'            => $meta_key,
        'orderby'             => 'meta_value_num',
        'order'               => 'DESC',
        'post_status'         => 'publish',
        'ignore_sticky_posts' => 1,
        'meta_query'          => array(
            array(
                'key'     => $meta_key,
                'value'   => 0,
                'compare' => '>',
                'type'    => 'NUMERIC'
            ),
        ),
    );

    return new WP_Query( $args );
}

SWELLのPVはSWELL_CT_KEYから取得します。この定数が使えない環境では swell_pv_ct を使うようにしてありますが、保存先のキーが違うと一覧が空になります。何も表示されないときは、実際に投稿へ保存されているキー名を先に確認してください。

続いて記事一覧のコードです。

次のサンプルコードを参考にすれば、いろいろページネーションの実装が応用できます。

確認した環境と範囲: 掲載コードの記述内容と、冒頭のサンプルページでの表示を確認しました(WordPress 7.1 / SWELL 2.19 時点)。未確認の点: 導入先での総ページ数の計算、キャッシュ製品との組み合わせ、記事数が多い場合の処理時間は検証していません。元に戻すときは、追加した関数とテンプレートの呼び出しを外します。

カテゴリーやタグも含めたランキングにする場合はカテゴリーページも含めた人気記事ランキングの作り方、ページ送りの代わりにボタンで読み足す場合は「もっと見る」ボタン付き無限スクロール、他のカスタマイズはSWELLカスタマイズまとめにあります。

この記事だけ読みたい方は単品購入、ほかの有料記事も読みたい方は購読プランをご確認ください。

購読対象の記事・料金は、下のプラン案内で確認できます。

役に立った記事を、ブログやSNSで紹介しませんか?

紹介制度の対象記事・購読プランを購入した方は、codocで専用リンクと報酬条件を確認できます。

専用リンク経由で購入されると、設定された紹介報酬が発生します。

購読プランの紹介報酬は初回課金のみが対象です。

codocで紹介リンク・報酬条件を確認する

紹介時は、広告・PRであることが読者に分かるように明記してください。

  • URLをコピーしました!

実装を任せたい方へ

SWELLのカスタマイズ代行

記事のコードをそのまま使うのが不安な場合や、サイトに合わせた調整が必要な場合は当社が実装します。1時間 ¥8,000〜(税込)。テーマ更新に強い書き方で納品します。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次