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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

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

PHP

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

HTML

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

Q&A

解決済

1回答

3149閲覧

WordPressでページネーションを表示させることができない

makirons

総合スコア20

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

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

PHP

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

HTML

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

0グッド

0クリップ

投稿2018/11/28 17:48

編集2018/11/30 10:03

###実現したいこと
WordPressで閲覧履歴のリストを作成しているのですが、ページネーションが出力できません。

後述するコードは、<?php readpost_typecheack(100); ?>で閲覧履歴を100件出力し、それを15件ずつに分割してページネーションを付ける。という機能を実現せんとするものです。

このうち、15件ずつの分割についてはできているものの、「★ページネーション表示」と「★ページネーション出力関数」がうまくいかないという状況でございます。

###該当のソースコード

php

1/** 2* 履歴の登録 3*/ 4add_action( 'get_header', 'readpost'); 5 6function readpost() { 7 global $browsing_histories; 8 $browsing_histories = null; 9 $set_this_ID = null; 10 if( is_single() ){ 11 if( isset($_COOKIE['postid_history']) ){ 12 //cookieの値を呼び出し 13 $browsing_histories = explode(",", $_COOKIE['postid_history']); 14 if( $browsing_histories[0] != get_the_ID() ){ 15 if( count($browsing_histories) >= 50 ){ 16 $set_browsing_histories = array_slice($browsing_histories , 0, 49); 17 }else{ 18 $set_browsing_histories = $browsing_histories; 19 } 20 //値の先頭が現在の記事IDでなければ文字列の一番最初に追加 21 $set_this_ID = get_the_ID().','.implode(",", $set_browsing_histories); 22 setcookie( 'postid_history', $set_this_ID, time() + 60 * 60 * 24 * 365 * 1,'/' ); 23 // }else{ 24 // $set_this_ID = $_COOKIE['postid_history']; 25 } 26 }else{ 27 //cookieがなければ、現在の記事IDを保存 28 $set_this_ID = get_the_ID(); 29 setcookie( 'postid_history', $set_this_ID, time() + 60 * 60 * 24 * 365 * 1,'/' ); 30 } 31 //呼び出しのみ 32 }else{ 33 if( isset($_COOKIE['postid_history']) ){ 34 $browsing_histories = explode(",", $_COOKIE['postid_history']); 35 } 36 } 37 $postread = explode( ",", $_COOKIE['postid_history'] ); 38 $postread = array_unique( $postread ); 39 $postread = array_values( $postread ); 40 return $postread; 41} 42 43/** 44* 履歴の出力(ご回答を受けてコードを修正致しました。) 45*/ 46function readpost_typecheack( $postnum ) { 47 $postdate = readpost(); 48 $numlist = 0; 49 if( !empty($postdate) ): ?> 50 <ul> 51 <?php 52 $paged = get_query_var('paged') ?: 1; 53 $args = array( 54 'paged' => $paged, 55 'posts_per_page' => 15, 56 'post__in' => $postdate, 57 'post_type' => 'mypost' 58 ); 59 $the_query = new WP_Query( $args ); 60 61 if($postnum==$numlist){ break; } 62 63 if ( $the_query->have_posts() ) : 64 while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 65 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 66 <?php endwhile; 67 endif; 68 69 /* ページネーション表示 */ 70 if ( function_exists( 'pagination' ) ) : 71 pagination( $the_query->max_num_pages, $paged ); 72 endif; 73 74 wp_reset_postdata();?> 75 </ul> 76 <?php endif; 77} 78 79/** 80* ★ページネーション出力関数 81* $paged : 現在のページ 82* $pages : 全ページ数 83* $range : 左右に何ページ表示するか 84* $show_only : 1ページしかない時に表示するかどうか 85*/ 86function pagination( $pages, $paged, $range = 2, $show_only = false ) { 87 88 $pages = ( int ) $pages; //float型で渡ってくるので明示的に int型 へ 89 $paged = $paged ?: 1; //get_query_var('paged')をそのまま投げても大丈夫なように 90 91 //表示テキスト 92 $text_first = "« 最初へ"; 93 $text_before = "‹ 前へ"; 94 $text_next = "次へ ›"; 95 $text_last = "最後へ »"; 96 97 if ( $show_only && $pages === 1 ) { 98 // 1ページのみで表示設定が true の時 99 echo '<div class="pagination"><span class="current pager">1</span></div>'; 100 return; 101 } 102 103 if ( $pages === 1 ) return; // 1ページのみで表示設定もない場合 104 105 if ( 1 !== $pages ) { 106 //2ページ以上の時 107 echo '<div class="pagination"><span class="page_num">Page ', $paged ,' of ', $pages ,'</span>'; 108 if ( $paged > $range + 1 ) { 109 // 「最初へ」 の表示 110 echo '<a href="', get_pagenum_link(1) ,'" class="first">', $text_first ,'</a>'; 111 } 112 if ( $paged > 1 ) { 113 // 「前へ」 の表示 114 echo '<a href="', get_pagenum_link( $paged - 1 ) ,'" class="prev">', $text_before ,'</a>'; 115 } 116 for ( $i = 1; $i <= $pages; $i++ ) { 117 118 if ( $i <= $paged + $range && $i >= $paged - $range ) { 119 // $paged +- $range 以内であればページ番号を出力 120 if ( $paged === $i ) { 121 echo '<span class="current pager">', $i ,'</span>'; 122 } else { 123 echo '<a href="', get_pagenum_link( $i ) ,'" class="pager">', $i ,'</a>'; 124 } 125 } 126 127 } 128 if ( $paged < $pages ) { 129 // 「次へ」 の表示 130 echo '<a href="', get_pagenum_link( $paged + 1 ) ,'" class="next">', $text_next ,'</a>'; 131 } 132 if ( $paged + $range < $pages ) { 133 // 「最後へ」 の表示 134 echo '<a href="', get_pagenum_link( $pages ) ,'" class="last">', $text_last ,'</a>'; 135 } 136 echo '</div>'; 137 } 138} 139

長いコードで誠に恐れ入りますが、対処法について何かアドバイス頂戴できましたら幸甚に存じます。
識者の皆様、何卒宜しくお願い申し上げます。

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

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

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

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

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

kei344

2018/11/28 18:03

「うまくできない」とは「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
makirons

2018/11/30 09:20

遅くなりまして申し訳ございません。不備についてのご指摘、誠にありがとうございます。主観的にはコメントアウントの部分で表現したつもりではありましたが、改めて考えると仰る通り全く至らず、心苦しい限りです。
guest

回答1

0

ベストアンサー

PHP

1// public static function pagination( $pages, $paged, $range = 2, $show_only = false ) { 2// ↓ 3 function pagination( $pages, $paged, $range = 2, $show_only = false ) {

投稿2018/11/29 15:37

kei344

総合スコア69364

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

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

makirons

2018/11/30 09:40

ご回答ありがとうございます。 そちらの部分は削除致しました。 どうやら$pagesが代入されないようで、 <div class="pagination"><span class="page_num">Page 1 of 0</span></div> がechoされたものの、ifの中の「前へ」などがechoされませんでした。 そこで重ねて質問させて頂きたいのですが、$pagesへの代入は、$posts_array->max_num_pagesではいけないのでしょうか?
kei344

2018/11/30 09:44

$posts_array = get_posts( $args ); としているので$posts_array は配列です。 $posts_array->max_num_pagesとして取得できるのは $posts_arrayに new WP_Query で作ったオブジェクトが入っているときです。
makirons

2018/11/30 10:04

こんばんは。お世話になっております。ご返信ありがとうございます。 それでは ➀$posts_array->max_num_pagesではない方法で取得する。 ➁「/* 履歴の出力 */」の部分を書き直す。 というわけですね。 試しに➁の場合ですと、質問のように修正したコードに間違いはどこにありますでしょうか?
kei344

2018/11/30 10:18

「うまくできない」とは「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。 また、WordPressのデフォルト動作と違うURLでのページングを設置することは関係する設定が多いため、お勧めしません。別の方法を模索されることをお勧めします。
makirons

2018/11/30 13:42 編集

重ね重ね大変失礼致しました。 どうやらトップページでのみ動作しないようでしたので、その点に絞って改めて質問を投稿するように致します。 今回の件は「2018/11/30 18:44」のご返信でもって解決致しました。どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問