質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2775閲覧

WP 複数のカスタム投稿一覧で2ページ目までしか表示されない

mmmmnet

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/07/07 03:05

編集2021/07/07 03:16

いつも大変お世話になっております。

現在WordPressのhome.phpで複数のカスタム投稿一覧ページを作成中です。
表示まではできましたが、3ページ目以降がNotFoundになってしまいます。

なんとなくページ送りがpost分しか取得できていないような感じがしているのですが、
解決方法が見つからず質問させていただきました。

実現したいこと

投稿(post)
カスタム投稿①(blog)
カスタム投稿②(faq)

上記3つの投稿を全て一覧に表示する。

1ページの表示件数は10件、ページ切り替えを行う。

発生している問題

ページネーションは4ページ目まで表示されていますが、
ページ切り替えで3ページ目以降が404エラーになります。

URLは「/whatsnew/?paged=2/」で表示しており、見ることができています。

現在の状態

1ページ目、2ページ目は問題なく表示されます。
試しにposts_per_pageを100にすると記事自体は全て表示されます。

利用したソースコード

投稿一覧

PHP

1<?php 2 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 3 $args = array( 4 'posts_per_page' => '10', 5 'post_type' => array('post','blog','faq'), 6  'post_status' => 'publish', 7 'caller_get_posts' => 1, 8 'paged' => $paged 9 ); 10 $posts = get_posts( $args ); 11 if( $posts ) : foreach( $posts as $post ) : setup_postdata( $post ); 12?> 13 14記事ループ 15 16<?php endforeach; ?> 17<?php endif; wp_reset_postdata(); ?>

ページネーション(function.php)

function pagenation($limit = NULL, $post_typed = 'posts') { global $wp_rewrite; global $paged; global $wp_query; // 検索条件 $query = array(); if ($limit != NULL) { $query['posts_per_page'] = $limit; } if (count($query) != 0) { $wp_query->query($query); } $wp_query->query(array( 'post_type' => $post_typed, )); $paginate_base = get_pagenum_link(); if( strpos( $paginate_base, '?' ) || !$wp_rewrite->using_permalinks() ) { $paginate_format = ''; $paginate_base = add_query_arg( 'paged', '%#%' ); } else { $paginate_format = (substr( $paginate_base, -1, 1 ) == '/' ? '' : '/') . user_trailingslashit('page/%#%/','paged'); $paginate_base .= '%_%'; } if( $paged < 2 ) { $paged = 1; } $args = array( 'base' => $paginate_base, 'format' => $paginate_format, 'total' => $wp_query->max_num_pages, 'current' => $paged, 'show_all' => false, 'prev_next' => true, 'prev_text' => '&laquo;', 'next_text' => '&raquo;', 'type' => 'array', ); $pagenate_array = paginate_links($args); // 配列がある場合のみ if (is_array($pagenate_array) == TRUE) { $pagenate .= '<div class="wp-pagenavi">'; foreach ($pagenate_array as $key => $value) { if (preg_match('/current/', $value) == TRUE) { $class = ''; } else { $class = ''; } // $value = "<span class=\"{$class}\">".$value.'</span>'; // リンク追加 $pagenate .= $value; } $pagenate .= '</div>'; echo $pagenate; } }

【WordPress】カスタム投稿タイプにも対応しているページネーション用関数より

その他、不足している情報等ございましたらご指摘いただければ幸いです。
恐れ入りますが、ご教授のほどよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ページ送りがpost分しか取得できていない

はい、そうです

ページングのURLではメインクエリでそのページが存在するかどうかが判定されます
メインクエリが'post','blog','faq'の投稿タイプを含めたものになっていないし
ページあたりの表示数も指定のものになっていないので
通常投稿の検索結果と管理画面で指定したページあたりの表示数でページングがされています

WordPressのページング機能を使ってページングを行うのであれば
サブクエリではなくリクエスト時にメインクエリを上書きするような形で対応しましょう

parse_request
pre_get_posts
is_main_query

投稿2021/07/07 03:24

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmmmnet

2021/07/07 09:56

リンクいただいたコードを拝見し、色々試したところ目標とした動作に近づくことができました。 早急にお返事いただき誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問