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

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

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

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

PHP

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

Q&A

解決済

2回答

2860閲覧

ページャーの設置がうまくいきません。

skk969688

総合スコア14

WordPress

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

PHP

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

0グッド

1クリップ

投稿2017/01/18 05:02

topページ全体にカスタム投稿の一覧が表示されるサイトを作成したいと思っております。
その際に、index.phpにページャーを設置したいのですが、2ページ目以降をクリックすると、
404に飛んでしまい表示されません。

プラグインは、wp site managerを使用しており、
同様のコードをarchive.phpに書いた際は問題なく表示されます。

2ページ目が表示されない場合の記事を調べ、いくつか試してみたのですが、
知識がないためかうまくいきません。

ご教示いただけますと幸いです。
宜しくお願いいたします。

■カスタム投稿一覧 <?php $toplist = array( 'post_type' => array('投稿名'), 'showposts' => 20, ); ?> <?php query_posts($toplist); ?> <?php if (have_posts()):while(have_posts()):the_post(); ?> ループ内容 <?php endwhile; endif; ?>
■ ページャー <div class="page_navi_wrap"> <?php if ( class_exists( 'WP_SiteManager_page_navi' ) ) { WP_SiteManager_page_navi::page_navi(); } ?> </div>

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

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

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

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

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

guest

回答2

0

ベストアンサー

query_posts は基本的に使わないでコーディングしたほうが問題が起きにくいです。mizさんの回答に書かれているように、テンプレート上で呼び出すのであれば WP_Queryget_posts で処理するのが定石です。

今回の質問内容のような場合は pre_get_posts フックを使ってメインクエリを書き換える方法が良いと思います。

PHP

1// functions.php 2function my_home_posts_per_page( $query ) { 3 if ( is_admin() || !$query->is_main_query() ) { return; } 4 /* トップページの表示件数を20件&投稿タイプを「投稿タイプ名」にする */ 5 if ( $query->is_home() ) { // トップページのみ 6 $query->set( 'posts_per_page', '20' ); // ページ毎に20件表示 7 $query->set( 'post_type','投稿タイプ名' ); // 投稿タイプ名(英文字のスラッグ) 8 } 9} 10add_action( 'pre_get_posts', 'my_home_posts_per_page' );

【[Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works】
https://emiac-works.com/coding/pre-get-posts-code-snipet/

【【wordpress】pre_get_postsを使ってみませんか? - Qiita】
http://qiita.com/ruka/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88

投稿2017/01/18 08:39

kei344

総合スコア69364

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

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

skk969688

2017/01/19 12:25 編集

ありがとうございます! こちらの方法で、ページャーが動きました! また、もう一点お伺いしてもよろしいでしょうか・・? 同ページにて、下記のような表示件数の切り替えボタンを設置したいのですが、 この場合でしたら、functions.phpにはどのように記載すればよろしいのでしょうか? <form method="get" action="アドレス"> <button type="submit" name="number" value="30">30件</button> <button type="submit" name="number" value="100">100件</button> <button type="submit" name="number" value="-1">すべて</button> </form> 以前は、index.phpに下記のような記載をしておりました。 <?php if(isset($_GET['number'])){ $number = $_GET['number']; } $toplist = array( 'post_type' => array('site'), 'posts_per_page' => $number, ); ?> 初歩的な質問ばかりで申し訳ございません・・ $query->set( 'posts_per_page','$number' ); との記載をしてみたのですが、3件しか表示されなくなってしまいました・・ 申し訳ございませんが、ご教示いただけないでしょうか?
kei344

2017/01/19 12:49

「'$number'」では「$number」という文字列を渡しています。
skk969688

2017/01/19 13:09 編集

勉強不足で申し訳ございません・・ <?php if(isset($_GET['number'])){ $number = $_GET['number']; } ?> index.phpに上記の記載は残しているのですが、 そもそもの書き方が間違っているのでしょうか?
kei344

2017/01/19 13:19

functions.php に書いていないのであれば動かないですよ。 functions.php に書いているのであれば「<?php」「?>」が不要です。 また、WP_SiteManager_page_navi::page_navi(); がどのようなものかはわかりませんが、ご自身で追加された要素に対応しているのでしょうか。
skk969688

2017/01/20 01:12 編集

お手数をおかけしておりまして本当に申し訳ありません・・ 現在の内容です。 ■function.php function my_home_posts_per_page( $query ) { if ( is_admin() || !$query->is_main_query() ) { return; } if ( $query->is_home() ) { // トップページのみ if(isset($_GET['number'])){ $number = $_GET['number']; } $query->set( 'posts_per_page','$number' ); // $query->set( 'post_type','site' ); // 投稿タイプ名(英文字のスラッグ) } } add_action( 'pre_get_posts', 'my_home_posts_per_page' ); ■index.php <form method="get" action=""> <button type="submit" name="number" value="30">30件</button> <button type="submit" name="number" value="100">100件</button> <button type="submit" name="number" value="-1">すべて</button> </form> <ul class="box"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li> ループ内容 </li> <?php endwhile; endif; ?> こちらでアップするとどのボタンを教えてもループ内容が3件しか表示されなくなってしまいます・・ ページャー自体は、記載プラグインを使用しておりますので、WP_SiteManager_page_navi::page_navi();と教えていただいた方法で正常に動きました!
kei344

2017/01/19 13:33

「'$number'」はコメントで指摘したつもりなのですが、そのままにしたいということでしょうか。
skk969688

2017/01/20 01:22

すみません、ご連絡遅くなりました! formの内容を受け取りたいので、$query->set( 'posts_per_page','$number' ); // でなくても問題ございません。
kei344

2017/01/20 01:33

$number = isset( $_GET[ 'number' ] ) ? $_GET[ 'number' ] : 30; $query->set( 'posts_per_page', $number );
skk969688

2017/01/23 12:01

ご回答ありがとうございます! まだ実装できていないのですが、こちらで明日実装させていただこうと思います。 お手数をおかけしたにもかかわらず、教えていただき本当に感謝しております・・ 明日実装が終わったら改めてこちらに書かせていただきます!
skk969688

2017/01/28 01:45

ご連絡が遅くなり申し訳ございません! 知識不足にもかかわらず、ご丁寧に教えていただき、 本当にありがとうございました!
guest

0

おそらく、query_posts関数のせいだと思います。
query_posts関数のかわりに、get_posts関数もしくはWP_Queryを使用してください。

ちなみに、ページネーションが動かないとき、一番に疑うのがquery_posts関数の使用です。

参考URL

投稿2017/01/18 06:27

編集2017/01/18 06:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

skk969688

2017/01/19 12:21

ご回答、ありがとうございます! ページャーについては、無事動作しました! query_postsはあまり使用しないほうが良いのですね・・ 勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問