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

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

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

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2442閲覧

カスタム投稿のページングの形式を改変したい

xminimx

総合スコア53

WordPress

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

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/03/18 02:38

newsというタイプのカスタム投稿を作成し、アーカイブページ、記事ページ共に正常に表示されています。
今後記事の数が増えてきたときのために、こちらこちらを参考にして以下の通りページングを作成しました。

php

1/** 2* function.php 3*/ 4 $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; 5 $args = array( 6 'post_type' => 'news', 7 'posts_per_page' => 10, 8 'paged' => $paged 9 ); 10 $the_query = new WP_Query($args);

php

1/** 2* archive-news.php 3*/ 4<ul class="list"> 5 <?php 6 global $wp_query; 7 $list = new WP_Query("post_type=news&paged=$paged"); 8 $max_num_pages = $list->max_num_pages; 9 $big = 999999999; 10 echo paginate_links( array( 11 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 12 'format' => '?paged=%#%', 13 'current' => max( 1, get_query_var('paged') ), 14 'total' => $max_num_pages 15 ) ); 16 ?> 17 </ul>

こちらで出力されたのが以下のhtmlです。

html

1<ul class="list"> 2 <span aria-current="page" class="page-numbers current">1</span> 3 <a class="page-numbers" href="https://〜〜/news/page/2/">2</a> 4 <a class="page-numbers" href="https://〜〜/news/page/3/">3</a> 5 <a class="next page-numbers" href="https://〜〜/news/page/2/">次へ &raquo;</a> 6</ul>

正常に表示はされているのですが、例えば全ページが6ページ以上あるときは最後のページへのジャンプを表示させたり、「前へ」「次へ」の表示を変更させたりしたいときはどこを編集する必要があるのかわからず手詰まり状態です…
$bigを始めそれぞれの関数の意味も理解できていません。
お知恵を貸してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

「前へ」「次へ」のテキストはパラメータがあります。
最終ページについてもパラメータを試してみてください。

【paginate_links – WordPress私的マニュアル】
https://elearn.jp/wpman/function/paginate_links.html

投稿2020/03/18 03:10

kei344

総合スコア69364

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

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

xminimx

2020/03/18 05:53

ありがとうございます。パラメータについて把握できておらず非常に参考になりました。 ある程度形は整ったのですが、$max_num_pagesを正常に取得できていないようで、'total' => $max_num_pages の値が変わりません。 現在24件の記事を1ページに10件ずつ表示させているのでpagedは3になるのですが、1ページに3件ずつ表示に変更してもpagedが変わらないのは何が原因になるのでしょうか。
kei344

2020/03/18 12:49

function.php → functions.php なのは置いておいて、$the_query = new WP_Query($args); と $list = new WP_Query("post_type=news&paged=$paged"); は関係ないのでどうしたいかわかりません。 また、カスタム投稿タイプを作成する際に「'has_archive' => true」にしている場合、「new WP_Query」する必要がそもそも無く、通常のループで処理できます。
xminimx

2020/03/19 01:59

>function.php → functions.php なのは置いておいて、 誤字ですね…ご指摘ありがとうございます。 functions.phpの $the_query = new WP_Query($args);  の記述を削除いたしました。 実現させたいこととして、 archive-news.phpの中の 'total' => $max_num_pages で呼び出している最終ページ(ページ合計数)の変更を反映させたいのです。 今の状態では、1ページあたりの記事数を少なくしてもページネーション内のリンクが最後まで表示されず(5ページあるはずなのに2ページ目までのボタンしか表示されない)、後半の記事が見れないことになっています。 URLを直接叩けば3ページ目、4ページ目に飛べるのですがそれらのページにはページネーションが表示されておらず… どこがどう影響しているのかお手上げ状態です。
kei344

2020/03/19 02:22

どのように記事数を変えているかを提示してください。管理画面からですか?WP_Queryですか?フックですか? $list = new WP_Query("post_type=news&paged=$paged"); は何のために使用しているのでしょうか。提示されているコードではページネーションにしか使われていません。 $max_num_pages = $wp_query->max_num_pages; で良いのでは。
xminimx

2020/03/19 02:39

記事の表示数は、 archive.php内 <?php  $news_query = new WP_Query(   array(    'post_type' => 'news',    'posts_per_page' => 3,//ここの数値を変更     'post_status' => 'publish',    'paged' => $paged,   )  ); ?> で変更しています。 $list = new WP_Query("post_type=news&paged=$paged"); こちらはカスタム投稿newsの記事を取得するために必要だと思っていたのですが… archive-news.phpの  $list = new WP_Query("post_type=news&paged=$paged");  $max_num_pages = $list->max_num_pages; この部分を  (削除 $list = new WP_Query("post_type=news&paged=$paged");) $max_num_pages = $wp_query->max_num_pages; としたところ、ページネーション自体が表示されなくなってしまいました。
kei344

2020/03/19 02:55

$news_queryと$wp_queryが関係ないからです。$max_num_pagesは表示したいWP_Queryインスタンスの物を使う必要があります。 例)$news_query->max_num_pages; 前にも書きましたが、カスタム投稿タイプを作成する際に「'has_archive' => true」にしている場合、「new WP_Query」する必要がそもそも無く、通常のループで処理できると思いますが・・・。(固定ページをアーカイブページにしているとかそういう状況なのかな)
xminimx

2020/03/23 02:07

お返事遅くなりすみません。 おっしゃる通り、>(固定ページをアーカイブページにしているとかそういう状況なのかな) まさしくこの状況でした。 一度考え方を変えて、アドバイスの通り通常のループで再度アーカイブページを作り直してみます。
guest

0

出力されるHTMLにそれほど強いこだわりがない(CSSでなんとでもする)ということが可能なら、
archive-news.php のルーブ「外」(endwhile;より後)に
下記のようなテンプレートタグを入れるのが、最も簡単なページネーションかな、と個人的には思っております。(functions.php の記載は不要となります)
こちらもご検討ください。

PHP

1<?php the_posts_pagination( array( 2 'mid_size' => 2, 3 'prev_text' => '前へ', 4 'next_text' => '次へ', 5) ); ?>

https://wpdocs.osdn.jp/関数リファレンス/the_posts_pagination

追記です。
かなりざっくりした使い方ですが、実際のテンプレート(archive-news.php)に書き込んでみた感じは、こんな風になりますです。

PHP

1<?php get_header(); ?> 2 3 <section id="primary" class="content-area"> 4 <main id="main" class="site-main" role="main"> 5 6 <?php if ( have_posts() ) : ?> 7 8 <header class="page-header"> 9 <?php 10 the_archive_title( '<h1 class="page-title">', '</h1>' ); 11 the_archive_description( '<div class="taxonomy-description">', '</div>' ); 12 ?> 13 </header><!-- .page-header --> 14 15 <?php 16 // Start the Loop. 17 while ( have_posts() ) : 18 the_post(); 19 20 get_template_part( 'content', get_post_format() ); 21 22 // End the loop. 23 endwhile; 24 25 // ここで使います、ページネーション 26 the_posts_pagination( array( 27 'mid_size' => 2, 28 'prev_text' => '前へ', 29 'next_text' => '次へ', 30 ) ); 31 32 // If no content, include the "No posts found" template. 33 else : 34 get_template_part( 'content', 'none' ); 35 36 endif; 37 ?> 38 39 </main><!-- .site-main --> 40 </section><!-- .content-area --> 41 42<?php get_footer(); ?>

投稿2020/03/18 12:28

編集2020/03/19 09:21
marlboro_tata

総合スコア525

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

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

xminimx

2020/03/19 02:03

ありがとうございます。 参考リンク元も拝読いたしました。 これは記事の前後へのページネーションリンクでしょうか? (理解度が低く申し訳ございません。)
marlboro_tata

2020/03/19 09:14

>これは記事の前後へのページネーションリンクでしょうか? いいえ、アーカイブページのページングとして機能します。
marlboro_tata

2020/03/19 09:28

kei344 さまからも指摘がありますが、 カスタム投稿タイプの「news」は、何か、特殊な方法でアーカイブページを作っているのでしょうか? もし、あまり難しいことをせず、「通常のループ」を使っているなら、 ページングを実装しようとした前の、「アーカイブページ、記事ページ共に正常に表示されています」の状態の時のアーカイブのテンプレートは、回答の追記に書いた感じのループに、近いものだったのではないかな、と推測しております。その点、いかがでしょうか?
xminimx

2020/03/23 02:08

お返事遅くなりすみません。 kei344さんにアドバイスいただいた通り通常のループでアーカイブページを作り直しています。 その後改めてご提示いただいたリンク先も見直してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問