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

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

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

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

PHP

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

Q&A

11回答

17676閲覧

【WordPress】WP-PageNaviで2ページ目が表示されない

moemaaaaaaaru

総合スコア13

WordPress

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

PHP

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

1グッド

2クリップ

投稿2015/05/31 11:05

編集2022/01/12 10:55

初めて質問いたします。
失礼がありましたら、併せてご教示いただけますと幸いです。
全くの素人同然ですので、お手柔らかにお願いいたします。

WordPressとそのプラグイン"WP-PageNavi"に関する質問です。
カテゴリーの記事一覧と、全体の新着記事一覧の両方で、
WP-PageNaviを使用して、ナビゲーションを表示させています。

以下のコードです。

lang

1<?php if(function_exists('wp_pagenavi')) {wp_pagenavi();} ?>

カテゴリー一覧(category.php)のナビゲーションは正常に表示されます。
しかし、新着記事一覧(newpost.php)のナビゲーションは、パーマリンクこそ、
http://example.com/newpost/page2等、ページ数が変わりますが、
実際表示される内容は、1ページ目のまま変化しません。

newpost.phpは、固定ページのテンプレートで、
新着記事一覧ページ自体も、このテンプレートのみで実装されています。

newpost.phpの一覧になっている記事自体は以下のコードで表示されているようです。

lang

1<?php query_posts('posts_per_page=12&offset=5&cat=-21,-20,-22&paged='.$paged); while(have_posts()) : the_post(); ?>

どうしたら、2ページ目以降が正常に表示されるようになるでしょうか。
お手数おかけいたしますが、どうぞご教示ください。
よろしくお願いいたします。


追伸

もともとは、

lang

1<?php query_posts('showpost=12&offset=5&cat=-21,-20,-22&paged='.$paged); while(have_posts()) : the_post(); ?>

でしたが、知り合いに教わった際、showpostposts_per_pageに書き換えたほうが
いいということだったので、書き換えましたが、全く表示に変化はありませんでした。


再追伸

WP-PageNaviの前までのコードは以下の通りです。

lang

1<div class="content-post-list"> 2 <?php query_posts('posts_per_page=12&offset=5&cat=-21,-20,-22&paged='.$paged); while(have_posts()) : the_post(); ?> 3 <div class="content-post"> 4 <a href="<?php the_permalink(); ?>"> 5 <figure class="post-img"><?php the_post_thumbnail(); ?><span><img class="go" src="<?php bloginfo('template_url'); ?>/img/hov-ic.png"></span></figure> 6 <div class="post-text"> 7 <p class="post-category"><?php $cats = get_the_category();$exclude = array(18,19,20,24,25,26,27,28); // 不要なカテゴリのID 8 foreach((array)$cats as $cat)if(!in_array($cat->cat_ID, $exclude)) echo $cat->cat_name ; ?></p> 9 </div> 10 </a> 11 </div> 12 <?php endwhile; ?> 13 14 <?php if(function_exists('wp_pagenavi')) {wp_pagenavi();}?>
mondaminZ👍を押しています

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

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

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

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

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

guest

回答11

0

こんにちは。

WP-PageNaviは、便利なプラグインで、テーマによってはデフォルトでインストールされているものもあります。

ところが、(多くの場合)コンテンツが複数ページにわたることが想定されていない固定ページではうまく動作しないことがあるようです。

その原因は、使っているテーマにもよるらしいのですが、
1)ループ処理に問題がある
2)固定ページでは $paged が取得されない
3)ページ名が重複している
といったことなどが考えられとのことです。

参考になるブログエントリー(リンク)がありましたので、よろしければそちらをごらんください。

僕がじっさいに試したわけではありませんので、いずれの方法でも解決にいたらない場合があるかもしれませんが、その際はご容赦ください。

投稿2015/06/02 01:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

moemaaaaaaaru

2015/06/09 11:42

的外れなことを書いていましたら申し訳ありません。 1)ループ処理に問題がある WP-PageNaviのタグのあとに`wp_reset_query();`を追加したらエラーメッセージが出てしまいました… 2)固定ページでは $paged が取得されない ```$paged = (int) get_query_var('paged'); $paged = get_query_var('paged');``` 以上のコードを書き込みましたが変化がありませんでした。 3)ページ名が重複している タクソノミーのslugとページ名が重複していることはたぶんないと思います。 (newpostというタクソノミーがないので・・・) どうしたらいいでしょうか。
退会済みユーザー

退会済みユーザー

2015/06/10 00:18

moemaaaaaaaruさん、コメント(返信)をいただきありがとうございます。 そうですか。困りましたね。 ただし、試してみた状況を考えあわせると、$paged が取得できないというのがいちばんあやしいですね。 解決できる保証はありませんが、 この質問を投稿していただいた時点の状態に一旦もどしたうえで functions.php に下記を追加してみてください。 add_action( 'parse_query', 'my_parse_query' ); function my_parse_query( $query ) { if ( ! isset( $query->query_vars['paged'] ) && isset( $query->query_vars['page'] ) ) $query->query_vars['paged'] = $query->query_vars['page']; } これで、うまくいけばいいのですが……
moemaaaaaaaru

2015/06/11 10:25

こちらこそ教えていただきありがとうございます。 function.phpに追加したのですが、変化はありませんでした…。
guest

0

あまりスマートな書き方ではないかも知れませんが、これで固定ページのページ送りは機能するはずです。

<?php //非表示カテゴリID配列 $not_show_category = array(20,21,22); //新着記事の上から任意の個数分のIDを取得 $offset =5; $sub_args = array( 'post_type' => 'post', 'post_per_page' => $offset, 'category__not_in' => $not_show_category, ); $sub_posts = get_posts($sub_args); for($i=0; $i<$offset; $i++){ $sub_posts_id[$i] = $sub_posts[$i] -> ID; } ?> <?php //サブループ $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; $args = array( 'post_type' => 'post', 'posts_per_page' => 12, 'category__not_in' => $not_show_category, 'paged' => $paged ); $my_query = new WP_Query($args); if($my_query -> have_posts()): while($my_query -> have_posts()) : $my_query -> the_post(); ?> <?php //新着記事の上から任意の個数分以外の投稿を表示 if(!in_array($post->ID,$sub_posts_id)): ?> <?php the_title(); ?><br> <?php endif; endwhile; //wp_pagenaviへサブループの値を送る if(function_exists('wp_pagenavi')) { wp_pagenavi(array('query'=>$my_query)); } wp_reset_postdata(); endif; ?>

###offsetはページネーションでトラブルの種になるので使用しない
offsetの指定とページネーションはあまり具合が良くないようです。
ですのでサンプルでは先頭から任意の個数分の投稿記事IDを取得して、それらを非表示にしてあります。

###固定ページなのでサブループを使用する。
固定ページテンプレートでの運用ですので、ループはサブループで書きます。
ちなみにquery_postsは現在非推奨になっています。
あと他の方が$pagedについて指摘されていますが、ページ送りに必要な要素です。
長くなるのでここでの説明は割愛します。「ページ送り $paged」などで調べてみてください。

###wp_pagenaviにサブループのクエリを渡す。
通常の書き方ですとメインループへの書き方になるので、サブループのクエリ(ここでは$my_query)を渡します。

投稿2016/07/08 03:51

kchiku

総合スコア146

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

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

0

ループにquery_postsを使うとたしか
WP-PageNaviは動かなかったようなきがします。。
↓のurl見てみて

http://www.machiiro.jp/machiblog/blog/query_posts/

理由は
おそらくindexページなどもできなかったと思います。
固定ページやカテゴリページは
ワードプレスの設定画面の投稿数設定の定義が
されるからWP-PageNaviはそれと連動して動いてる。
indexはそれが効かないので!
だからループをかえるか
ループのプラグインとWP-PageNaviを
一緒に使うといけるかも。。

投稿2015/06/25 08:31

編集2015/06/25 20:32
YasumitsuFujii

総合スコア15

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

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

0

wordpressのバージョン4.2.2
使用テンプレート Twenty Fifteen

○adminページで
設定ー>パーマリンク設定でデフォルトに設定
○WP-PageNaviをインストール有効化し、index.phpの適当な所にif(function_exists('wp_pagenavi')) {wp_pagenavi();} を貼り付ける
○twentyfifteenのフォルダ内のfunction.phpの最後に次を貼り付ける
//////////////////////////////////////////////////
$GLOBALS['hyoujisuu']="2";//1ページあたり表示させる記事数
$GLOBALS['mae']=intval(time())-60601;//この時間内なら表示させる、time()は、私の環境では日本時間より9時間遅いのがかえってきました。
add_filter( 'post_limits', 'func_limit' );
function func_limit($limit){

$pagesuu=$GLOBALS['hyoujisuu'];
if($_GET['paged']>=2){
$ofuseto=(intval($_GET['paged'])-1)*$pagesuu;
}else{
$ofuseto="0";
}
if($_GET['pagemei']==="newpost"){
set_query_var('posts_per_page', $pagesuu);
$limit="LIMIT ".$ofuseto.','.$pagesuu;
}

return $limit;
}

add_filter('posts_where_paged','func_where');
function func_where($where){

if($_GET['pagemei']==="newpost"){
$where .= " AND post_date > '" . date('Y-m-d H:i:s', $GLOBALS['mae']) . "'";
}
return $where;
}
//////////////////////////////////////

○index.phpの<?php if ( have_posts() ) : ?>の上に次を貼り付ける
///////////////////////////////////////
if($_GET['pagemei']==="newpost"){
$wp_query->query($query_string ."&cat=-20,-21,-22");
}
///////////////////////////////////////
○function.phpにはりつけたものの一番上の
$GLOBALS['hyoujisuu']と$GLOBALS['mae']
でそれぞれ、一ページあたり表示数と、表示させる投稿時間を指定できます
index.phpにはりつけたもののcat=以降で、表示させるカテゴリーIDを指定できます。

○サイト名?pagemei=newpostで、アクセスすればいけるはずです。

○注意
ざっと確認しただけなので、バグがあるかもしれません。
サイドバーなどでquery()と同じことをしたりすると恐らくうまくいきません。
うまくいかなくても責任は取りませんので悪しからず
function.phpにはりつけないで、index.php内でやろうとすると
wp()でquery()されたとき
$_GET['paged']が表示数の初期値では、最大ページ数を越える時、エラーになってしまいます。
ですので、function.php内でしないといけないようです。
ただし、カテゴリー番号の指定は、難しそうだったので、
index.php内でするということにしました。

投稿2015/06/22 02:23

phpbenkyo

総合スコア99

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

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

0

管理画面から、設定→パーマリンク設定でデフォルトに設定し
query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']);

これでどうでしょうか
prettyパーマリンクはpathの取得の仕方がわかりませんでした。

投稿2015/06/17 12:29

編集2015/06/17 13:48
phpbenkyo

総合スコア99

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

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

0

メインループ以外のページングってなかなか難しいですよね。

発想を変えて、home.phpで新着記事一覧を作ってみてはいかがでしょうか?
その際に、フロントページ用にfront-page.phpを用意する必要がありますが…

1.空の固定ページを2つ用意し、
2.トップページ用のfront-page.php、新着記事一覧用のhome.phpを作り、
3.管理画面の表示設定で、用意した空の固定ページをそれぞれ設定する。

front-page.php、home.phpはメインループなので、query_posts()を使わないで、通常のループを使用します。
もし、表示をカスタマイズ(特定のカテゴリーを非表示など)したい場合はfunctions.phpにpre_get_postsフックを使っていじってください。

投稿2015/06/21 07:53

RyujiTakada

総合スコア38

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

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

moemaaaaaaaru

2015/06/21 09:58

ご回答ありがとうございます。 勉強不足で大変申し訳御座いませんが、全くの素人同様で、 いただいた解決法がよくわかっておりません。 よろしければ一つ一つ順に教えていただけますと幸いです。 まず、front-page.phpとhome.phpという2つのphpファイルをテーマフォルダに作成してアップロードすればよろしいのですよね・・・? その後、この2つのファイルには何を書き込んだらよろしいでしょうか?
RyujiTakada

2015/06/24 01:16

ひとまず、index.phpを複製でよいと思います。 フロント部分の細かい部分で必要に応じて変更して下さい。 ループの設定がしたい場合(カテゴリーを選んだり…表示数を変えたり…)はfunctions.phpにpre_get_posts()を使って行って下さい。 この記事が参考になるかと。 http://notnil-creative.com/blog/archives/1688 WordPressの10年以上の歴史の中で、テンプレートファイルが増え、それと同時にファイル名と動作の微妙な差が出てしまってます。 index.phpは、なにも引っかからなかった場合に呼び出されるテンプレート front-page.phpは、トップページ用のテンプレート home.phpは、front-page.phpがない場合はトップページ用、ある場合は、表示設定で設定した新着記事一覧用のテンプレートです。 ややこしいですよね。
RyujiTakada

2015/06/24 01:23

[追記] ちなみにWP4.1+では、 ```the_posts_pagination()``` という関数が使えます。
guest

0

エラーが出たソースコードを貼り付けてもらえないですか
とにかく、
管理画面から、設定→パーマリンク設定でデフォルトに設定し
query_posts('posts_per_page=12&offset=5&cat=-21,-20,-22&paged='.$paged);を
query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']);
にかえてもらったらいけると思います。
はっているのは、カテゴリ一覧ページのほうでしたね。
新着記事一覧のほうは大丈夫だったんですね

投稿2015/06/19 02:46

編集2015/06/19 03:10
phpbenkyo

総合スコア99

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

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

moemaaaaaaaru

2015/06/19 03:14

エラーが出たソースコードとは・・・? いただいたコードのうちの、 query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']); の部分のようです。
phpbenkyo

2015/06/19 14:35

失礼しました。 query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged'])); ですね )がひとつ足りませんでした。 index.phpを書き換えてうまくいったのですが、そちらのコードでためしてみたのですが、うまくいかないようですね。又、時間があれば挑戦してみます。
guest

0

the_post_thumbnail();とか使ってたんですね。
ちょっとその辺は、見てませんでしたが、とりあえず、内の環境では、
記事の表示と、wp_pagenaviの表示はうまくいったようでした。

投稿2015/06/17 21:12

phpbenkyo

総合スコア99

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

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

0

function filter_where( $where = '' ) {
$mae=intval(time())-60601;
$where .= " AND post_date > '" . date('Y-m-d H:i:s', $mae) . "'";
return $where;
}
add_filter( 'posts_where', 'filter_where' );
query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']);

新着記事一覧ということなので、こういうのはどうでしょうか
$maeを色々変更すれば、何時間前までの投稿を表示するのか設定できるはずです
ただ、ちょっと、確かめただけなので、そちらの環境でうまくいくかはわかりませんし、ずっとうまく動くかどうかはわかりません。
time()は、私のseverは、日本時間より9時間遅れたのがかえってくるようですが、
環境によってかわるようです。

こちらを参考にしました。

http://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF.E3.83.BC

投稿2015/06/17 14:52

編集2015/06/17 15:39
phpbenkyo

総合スコア99

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

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

moemaaaaaaaru

2015/06/17 20:47

ご回答いただきありがとうございます。 大変初心者な質問で申し訳ありませんが、 こちらはnewpost.phpの <?php query_posts('posts_per_page=12&offset=5&cat=-21,-20,-22&paged='.$paged); while(have_posts()) : the_post(); ?> を置き換えればいいという認識であっていますでしょうか。 それともfunction.phpに追加しますか。 ご教示いただけますと幸いです。 よろしくお願いいたします。
phpbenkyo

2015/06/17 21:03

query_posts('posts_per_page=12&offset=5&cat=-21,-20,-22&paged='.$paged);を function filter_where( $where = '' ) { $mae=intval(time())-60*60*1; $where .= " AND post_date > '" . date('Y-m-d H:i:s', $mae) . "'"; return $where; } add_filter( 'posts_where', 'filter_where' ); query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']); におきかえてもらえれば、多分いけると思うんですが、
moemaaaaaaaru

2015/06/18 03:34

syntax error, unexpected ';' in ~/newpost.php on line 21 と出てしまいました。 21行目は、 query_posts('posts_per_page=12&cat=-21,-20,-22&paged='.intval($_GET['paged']); です。 どうしたらいいでしょうか。 よろしくお願いいたします。
guest

0

WordPressの設定で最大投稿数を10から1にしてみてください

投稿2015/06/07 15:30

the

総合スコア112

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

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

moemaaaaaaaru

2015/06/09 11:45

回答ありがとうございます。 今、posts_per_page=12 と、ある部分を1にする、ということでしょうか。 1にしましたところ、1ページに1つしか記事が表示されなくなりました… 12個の記事を表示させ続けたいです。 もし、違う部分を訂正すべきでしたら申し訳ありません。 ご教示いただけますと幸いです。
the

2015/06/09 12:25

ダッシュボードの設定で、最大投稿数を10から1にしてみてください。以前、1変えてみたところこの問題が解決したことがあります。
moemaaaaaaaru

2015/06/09 14:12

やってみたのですが、変化はありませんでした。 回答ありがとうございます。
guest

0

私も初学者なので求める答えとずれてしまう気もしますが、
私は以下のようにしました。

<?php the_posts_pagination(); ?>

設定>表示設定にて表示する記事数を5記事にする
(サンプルとして11記事投稿し、切り替わるかどうかを試しつつ作成しました)

宜しければ私の質問も見てみて下さい。
頑張りましょう

投稿2020/08/13 03:47

shinnyan

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問