スポンサーリンク

【トラブル】APIを使ったワードプレスサイトで、ページネーションが機能しない

WEB

APIを使ったワードプレスサイトでページネーションが機能しないというトラブルが起きました。
APIからデータを取得するため、ワードプレスのページネーションを使う訳にはいかず、オリジナルでページネーションを用意する必要がありました。
それにより、トラブルが発生していました。
ちなみにページネーションとは、3ページ目を表示、5ページ目を表示と、ページを切り替える機能です。

原因は何なのか?

今回無事ページネーションが機能するようになったので、チャットGPTに原因はなんだったのか、聞いてみました。

◆チャットGPT先生の回答
現在のコードでは、ページ番号 (paged) を $_GET['paged'] から取得しています。
しかし、パーマリンク設定を使用している場合、paged はクエリパラメータとして渡されず、グローバルなクエリ変数として管理されます。
そのため、get_query_var('paged') を使用してページ番号を取得する必要があります。

なるほど…。
どういうことなの…?(笑)

原因を分析

今回ページ番号の取得方法を修正したことで、ページネーションのトラブルが解決しました。

$current_page = isset( $_GET['paged'] ) ? intval( $_GET['paged'] ) : 1;
$current_page = max(1, $current_page );

問題があった時のコードでは上記のようにページ番号を取得していました。
PHPの$_GETは、URLクエリパラメータを取得するものです。
例えば、example.com?page=3 のようなURLの場合、$_GET['page']3 を返します。

$current_page = max(1, get_query_var('paged'), isset($_GET['paged']) ? intval($_GET['paged']) : 1);

これを上記コードのように修正しました。
et_query_var('paged'):は、WordPressのテンプレートタグで、現在のページ番号を取得します。
互換性のために $_GET['paged'] もチェックします。
max(1, ...) を使用して、ページ番号が1未満にならないようにします。

原因はパーマリンク

詳しくチャットGPT先生に聞いてみると、原因はパーマリンクでした。
URLには「クエリパラメータ」と「パーマリンク」があります。
簡単にいうとURLの記述形式が違います。
「クエリパラメータ」は機械向けの記述形式。
「パーマリンク」は人間向けの記述形式です。

ワードプレスでは「パーマリンク」が使われます。
それなのに「クエリパラメータ」の方法でページ番号を取得しようとしていたので、上手くいかなかったのでした。

タイトルとURLをコピーしました