こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ワードプレス固定ページのページングについて

初めまして。WordPress・PHPの初心者で大変恐縮ではございますが、
ご質問させていただきます。

この度、固定ページに検索結果を表示し、その検索結果を件数指定し、
ページングを行いたいと考えています。

既にWordPress外では、実装でき正常動作を確認しているのですが、
WordPressの固定ページに組み込むと、2ページ目のリンク設定が
上手く行えておらず、誤動作してしまう状態です。

コードは同一ファイルに
【PHP】
if ($_POST["page"] !== "all") {
   //取り出す最大レコード数
   $lim = $_POST["page"];

   //最初と最後のページ番号を定義
   $first = 1;
   $last = ceil ($num / $lim);
   
   //表示するページ位置を取得
   $p = intval ($temp_p);
   if ($p < $first) {
     $p = $first;
   } elseif ($p > $last) {
     $p = $last;
   }

   //表示するレコード位置を取得
   $st = ($p - 1) * $lim;

   //前後のページ移動数と表示数
   //$page = 10 現在のページの前後10ページへのリンク番号を表示
   //$page = 10 現在のページの前後10ページ目に移動
   $page = 3;

   //前後$pageページ移動した際のページ番号を取得
   $prev = $p - $page;
   $next = $p + $page;

   //前後1ページ移動した際のページ番号を取得
   $prev01 = $p - 1;
   $next01 = $p + 1;

   //$stから$lim件のデータを取得し、並べ替える
   $sql .= " ORDER BY hoge LIMIT " . $st . "," . $lim . ";";

   //ページ移動リンクの組み立て

   //1ページ前のページ
   if ($p > 1) {
    $pagePrev = "<a href=\"$_SERVER[PHP_SELF]?p=$prev01\"><</a> ";
   }

   //各ページ番号への移動リンクを表示
   for ($cnt = $p - $page; $cnt <= $last; $cnt++) {
    if ($cnt < 1) {
      $cnt = 1;
    }
    $pageNo = "<a href=\"$_SERVER[PHP_SELF]?p=$cnt\">$cnt</a> ";

    //表示番号を指定数に区切る
    //ページ番号と現在のページが同一の場合は
    //リンク無しにする
    if ($cnt <= $p + $page) {
      if ($cnt == $p) {
         $pageNo = $p;
      }
     }
   }

   //1ページ後のページ
   if (($next01 - 1) * $lim < $reccnt) {
      $pageNext = "<a href=\"$_SERVER[PHP_SELF]?p=$next01\">></a> ";
   }

   //最初のページへ移動
   if ($p > 1) {
      $pageFirst = "<a href=\"$_SERVER[PHP_SELF]?p=$first\">最初</a> ";
   }

   //前の$pageページへ移動
   if ($p > $page) {
      echo "<a href=\"$_SERVER[PHP_SELF]?p=$prev\"><<</a> ";
   }

   //次の$pageページへ移動
   if (($next - 1) * $lim < $reccnt) {
      echo "<a href=\"$_SERVER[PHP_SELF]?p=$next\">>></a> ";
   }

   //最後のページへ移動
   if ($p < $last) {
      $pageLast = "<a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a> ";
   }
}

【html】
<?php
echo $pageFirst;
echo $pagePrev;
echo $pageNo;
echo $pageNext;
echo $pageLast;
?>

としており、a href=\"$_SERVER[PHP_SELF]?p=$hoge が上手く行えて
いないからだと自分では考えているので、hrefにこのファイルの指定や
私が思い当たる方法では試してみたのですが、やはり解決することはできませんでした。

説明が不十分で大変失礼かと思いますが、どういった原因が考えられるでしょうか?
リンク以外の観点からも、アドバイスをいただければと考えております。

お力を貸していただければ大変嬉しく思います。よろしくお願いいたします。

投稿日時 - 2012-12-17 16:04:24

QNo.7849160

すぐに回答ほしいです

質問者が選んだベストアンサー

>>2

聞く限り余裕でWordpressの範疇だと思います
WP_queryとかいじくらないでもいいんじゃないかと思えるぐらいです

まず商品情報を登録するなら固定ページではなく通常の投稿
もしくは通常の投稿はすでにつかっているなら
カスタム投稿を作ってそこに入れるようにしましょう
(カスタム投稿の登録については言い出すと
話がややこしくなりそうなのでここでは割愛します)
固定ページはそういう用途に想定されてません

テーマファイルの
search.phpが検索結果一覧ページ
single.phpが個別ページになります
要はsearch.phpとsingle.phpの
ループの内容を変えてやればいいのです

http://wpdocs.sourceforge.jp/テンプレート階層

wordpressテーマ作り初心者はまずこのページから


search.phpでのページングは『wp-pagenavi』というプラグインで簡単に実現します

あと『CustomFieldTemplate』というプラグインを探して入れてみてください
このプラグインとdo_shortcode()やpost_custom()使うだけで
商品検索CMSには必要充分な機能を実現する道具が揃うはずです

投稿日時 - 2012-12-19 00:01:10

お礼

度重なるご回答誠にありがとうございます。

WordPressのマニュアルもろくに見ず、
手探りで行った結果だと反省しております。

H240S18B73様のおっしゃることが大分理解できました。
確かにこれなら実装可能ですし、なによりWordPressの
機能を今よりも利用することができるので、より良い
サイトが制作できそうです。

是非これからチャレンジしてみたいと思います。
この度は、お力添えいただきましてありがとうございました。

投稿日時 - 2012-12-19 11:40:06

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

とりあえず『?p=$hoge』はマズイです
pはWordpressが投稿IDとして解釈します
その他s,cat,tax,tagとかはwordpressが使います
qとかもプラグインで使うヤツが結構いるので避けたいです
current_pageとか被らない名前にしときましょう

あと
固定ページで検索結果をループをさせるってことは
WP_query使ってるのですよね?

自力で表示ページ数とか計算・格納して
クエリ生成とかしなくても
WP_queryにはページ分割の手段が
ちゃんと用意されてます
(それにページングのリンクでは
GETしか渡してないんだから
『$lim = $_POST["page"];』
がちゃんと入るはずないと思うのですが…
そのためのエラーであると予想します)

http://wpdocs.sourceforge.jp/関数リファレンス/WP_Query

Wordpressのテーマ自作するならとりあえずこのページはブクマ必須です

それから、質問の趣旨をひっくり返すような提案なのですが
可能なら検索ページ(search.php)に固定ページのコンテンツを表示する方が
ページングのプラグインも使えたりとずっと楽だと思いますよ

投稿日時 - 2012-12-18 10:05:16

補足

度々ご回答いただきましてありがとうございます。
ご親切なご対応に大変感謝しております。

H240S18B73様のおっしゃるとおりGETの値を見直すことによって、
解決することができました。
初歩的なミスで申し訳ございませんでした。

WordPressもPHPも初心者で分からないことばかりで大変恐縮なのですが、
今回は元々WordPress外で作った検索機能を移設しておりまして、
mySQLもWordPress以外に自作のテーブルを用意し、
「検索」という固定ページに検索フォームを設置し、「検索結果」という
固定ページ1ページにmySQLより無理矢理データ表示しているという状況です。

WordPressであれば、そのような複雑なことをしなくても、実装できるのだと
思うのですが、分からないなりに手探りで行った結果、このような形となってしまいました。

解決後の質問申し訳ございませんが、こういった場合でも、
例えば現在実装されている「検索結果」の情報1件1件を
固定ページ1ページずつに分けて制作し、search.phpなどで、
その固定ページをソートした検索結果として表示することは
可能なのでしょうか?

【固定ページに検索結果の子要素を分割して制作】
・みかん=100円 固定ページ名「みかん」
・りんご=120円 固定ページ名「りんご」
        ↓
【固定ページに検索結果を一括して表示】
固定ページ名「検索結果」
・みかん=100円
・りんご=120円
        ↓
【検索結果に表示されたリンクをクリックし投稿ページに移動】
みかんについての詳細説明

このような流れをWordPressで行いたい場合、どのような方法が
ございますでしょうか?

もし差し支え等、ございませんでしたらアドバイスいただければと思います。
よろしくお願いいたします。

投稿日時 - 2012-12-18 14:54:49

ANo.1

wordpressはhtaccessでURLかなり書き換えるので
$pageLast = "<a href=\"$_SERVER[PHP_SELF]?p=$last\">最後</a> ";
じゃなく
$pageLast = sprintf('<a href="%s?p=%s\">最後</a> ',home_url(/固定ページ名),$last);
とかにすれば動くと思います

wordpressは内部処理でなんやとやってるのでいろいろ自分で頑張るより
大人しくWPの関数使っといた方がコンフリクトもしないし無難なカンジです

投稿日時 - 2012-12-17 18:25:04

補足

早急なご回答ありがとうございます。

早速試させていただいたところ、ソースを確認すると
<a href="http://www.hogehoge.com/固定ページ?p=2\">
とすることができたので、接続自体は正常に行えたようです。
大変ありがとうございました。

しかしページを移動してみるとなぜか、シンタックスエラー

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-0,' at line 1

が表示され、上手く表示することができない状態です。

単純なコード記載ミスなのか予約語関係なのか、両方を調べていますが、
解明することができません。

お手間お掛けして申し訳ございませんが、再度お力を貸していただけれと思いますので
よろしくお願いいたします。

投稿日時 - 2012-12-17 21:42:20

あなたにオススメの質問