WordPress

WordPress:ページ送り(ページネーション)をプラグイン無しで設置【スマホも1行表示】

eye_20160810

ページ送り(ページネーション)は記事一覧などを複数のページに分割して、情報を見やすくするためのものですね。

WordPressではページネーションを実装するプラグインもたくさんありますが、プラグインは環境によってエラーが出たり使えなくなってしまうこともあります。

できればプラグインを使わずに実装したい!ということで自分好みのページネーションを設置してみたので、やり方をご紹介します。スマホでも改行しないで1行で表示するようにしてみました。

functions.phpに追加

まずは以下のコードを「functions.php」に追加してください↓

function pagination($pages = '', $range = 1)
{
     $showitems = ($range * 2)+1;  
 
     global $paged;
     if(empty($paged)) $paged = 1;
 
     if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     }   
 
     if(1 != $pages)
     {
         echo "<div class=\"pagination\"><div class=\"pagination-box\"><span class=\"page-of\">Page ".$paged." of ".$pages."</span>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo;</a>";
         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo;</a>";
 
         for ($i=1; $i <= $pages; $i++)
         {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
             {
                 echo ($paged == $i)? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\">".$i."</a>";
             }
         }
 
         if ($paged < $pages && $showitems < $pages) echo "<a href=\"".get_pagenum_link($paged + 1)."\">&rsaquo;</a>";
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>&raquo;</a>";
         echo "</div></div>\n";
     }
}

functions.phpをカスタマイズする時は十分注意してください。
一文字でも間違うと画面が真っ白になりますからね。(めちゃ焦ります。。)

ページネーションを表示する

次にページネーションを表示したい場所に下記コードを挿入します↓

<?php if (function_exists("pagination")) {
    pagination($additional_loop->max_num_pages);
} ?>

使っているテーマによって編集するファイルも変わってきますが、home.php、archive.php、category.php、search.phpなど、記事一覧ページを生成しているファイルに挿入していく感じですね。

CSSで見た目を整える

仕上げにCSSで見た目を調整します。

四角タイプ

まずは通常の四角タイプです↓

.pagination {
  clear: both;
  padding: 20px 0;
  position: relative;
  font-size: 14px;
  line-height: 14px;
        text-align: center;
}
.pagination-box {
  display: inline-block;
}
.pagination span, .pagination a {
  display: block;
  float: left;
  margin: 2px 2px 2px 0;
  padding: 10px 15px 10px 15px;
  text-decoration: none;
  width: auto;
  color: #fff; /* 通常の文字色 */
  background: #47BEA0; /* 通常の背景色 */
}
.pagination a:hover{
  color: #47BEA0; /* マウスホバー時の文字色 */
  background: #F9D635; /* マウスホバー時の背景色 */
}
.pagination .current{
  padding: 10px 15px 10px 15px;
  color: #47BEA0; /* 現在のページの文字色 */
        background: #F9D635; /* 現在のページの背景色 */
}
@media only screen and (max-width: 413px) {
.pagination {
  font-size: 12px;
  line-height: 12px;
}
.pagination span, .pagination a {
  padding: 8px 10px 8px 10px;
}
.pagination .current{
  padding: 8px 10px 8px 10px;
}
}

スマホの画面サイズでも1行で収まるように、PrevとかNextみたいな文字は無くしてシンプルにしています。

あとスマホサイズでは文字も少し小さめにしていますが、「@media only screen and (max-width: 413px) 」以下がスマホ用のコードなのでお好みで調整してください。

ブレイクポイントも「413px以下」にしていますが、これも使っているテーマによって変わってくると思うので適宜変更してくださいね。

上記CSSだとこんな感じ↓

20160810a

丸型タイプ

続きまして丸型にしてみたのがこちら↓

.pagination {
  clear: both;
  padding: 20px 0;
  position: relative;
  font-size: 14px;
  line-height: 1em;
        text-align: center;
}
.pagination-box {
  display: inline-block;
}
.pagination span, .pagination a {
  display: block;
  float: left;
  margin: 2px 2px 2px 0;
  padding: 10px 14px 10px 14px;
  text-decoration: none;
  width: auto;
  color: #fff; /* 通常の文字色 */
  background: #47BEA0; /* 通常の背景色 */
  border-radius: 50%; /* 角を丸くして円形に */
}
.pagination span.page-of {
  background: none;
  color: #47BEA0;
}
.pagination a:hover{
  color: #47BEA0; /* マウスホバー時の文字色 */
  background: #F9D635; /* マウスホバー時の背景色 */
}
.pagination .current{
  padding: 10px 14px 10px 14px;
  color: #47BEA0; /* 現在のページの文字色 */
  background: #F9D635; /* 現在のページの背景色 */
}
@media only screen and (max-width: 413px) {
.pagination {
  font-size: 12px;
  line-height: 12px;
}
.pagination span, .pagination a {
  padding: 7px 10px 7px 10px;
}
.pagination .current{
  padding: 7px 10px 7px 10px;
}
}

こんな感じになります↓

20160810b

ちょっとかわいい感じになりましたね。

ちなみに上記CSSで「border-radius: 50%; /* 角を丸くして円形に */」の数値を小さくすると四角に近づいていくので角丸の四角形にもできます。

背景や文字の色なども、サイトに合わせてお好みで変更してくださいませ。

まとめ

ということで今回はプラグインなしでページ送り(ページネーション)を設置する方法をご紹介しました!細かい部分ですが、こういうところのデザインが変わるだけで他のブログと差が付きますよね。

記事一覧ページ全てに表示するために、編集するファイルはちょっと多くなるかもしれませんが挑戦してみてくださいね!

 

WordPress
\記事が役に立ったらシェアしてね/
うぇぶあしび

comment

  1. スペシャルミルク より:

    いつもお世話になっています。
    投稿記事内のページ送りだけが、こちらの記事のようなデザインにならないのですが、投稿時に何かやることがあるのでしょうか?
    archive

    記事編集で、挿入→改ページとすると、記事内に「PAGE BREAK」ができると思うのですが、この方法での改ページだと適用されないとかございますでしょうか?

    アドバイス宜しくお願い致します。

    • スペシャルミルク より:

      途中で送信してしまいました。archive.php内もきちんと置き換えています。

      • スペシャルミルク より:

        いつもありがとうございます。
        昨日、質問させて頂いたようにページ送りが投稿記事に反映されないのと、見出しデザインも投稿記事に反映されていなくて困っています。。。

        見出しデザインの方は投稿の編集画面ではきちんと反映されていますが、記事を公開して、記事ページを見てみると、文字が大きくなっているだけで見出しデザインが一切表示されていません。文字の色も黒になっており、指定した色にはなっていない状況です。

        どうぞアドバイス宜しくお願い致します!

        • スペシャルミルク より:

          たびたびすみません。
          見出しですが、デフォルト状態でも「見出し2の吹きだしデザイン」と「見出し4の背景デザイン」が表示されていません。記事の編集画面ではきちんと表示されています。
          「見出し3」の下ドット線だけは編集時にも公開してからも表示されています。

          公開ボタンや更新ボタンをクリックして、記事を公開して、そのページを見ると表示されていない状態です。

          お手上げ状態で困っています^^;;;
          表示を復活させるcssをご存知でしたら、教えて頂けると幸いです。
          宜しくお願い致します。

  2. スペシャルミルク より:

    とりあえず見出しデザインに関しては !important;をつけて表示させることはできました^^;
    ただ!important;は使わない方が良いという説明が多いので一時しのぎの予定です。

    引き続き、DICE様のお知恵をお借りしたいと思います。

    話を整理しますと、
    1、ページ送りのデザインが投稿記事のみに適用されない。
    2、見出しデザインがh2とh4に適用されない。ただし、編集中には反映されている。editor-style.cssは問題ない様子。

    以上です。どうぞ宜しくお願い致します。

    • DICE DICE より:

      改ページは一覧ページとは違う仕組みで動いており、吐き出されるHTMLも変わりますのでこの記事の方法は使えません。
      改ページについては「wp_link_pages」で検索すると色々と見つかると思います。

      見出しのデザインについてはサイトを拝見しないと原因は分かりませんが、FirebugでどのCSSが適用されているか確認すると解決策が分かるかもしれません。
      他のカスタマイズをする場合も、CSSが効かない時にFirebugを見ると大体解決できます。
      使い方は以前書いていますので参考にしてみてくださいね↓
      web-ashibi.net/archives/981

      • スペシャルミルク より:

        DICE様ありがとうございます!
        早速試してみます!!!!

      • スペシャルミルク より:

        DICE様、いつもお世話になっています。
        アドバイスを元に色々検証した結果、Stinger plusのテーマカスタマイザーが原因だったようです。

        テーマカスタマイザーで色々な項目を変えるときに、右側のリアルタイム表示は問題ないのですが、保存後にページを見ると不具合が生じている状況です。

        これを切れば解決するのですが、テーマカスタマイザーでデザインしてしまった項目があるので困っています・・・。とはいえ、カスタマイザー上で設定した項目は5項目なので、手作業でデザインを反映させたいと思います。

        テーマカスタマイザーの「基本カラーと各メニュー設定」の項目の中の
        ・背景色 を #ffffff
        ・サイト背景色 サイト全体を包括する背景色です を #ffbd3a
                サイト上部にライン を #ffbd3a
        ・ラインの高さ(px) を 5px
        ・記事エリア背景色 周りのボーダー を #a8a8a8

        以上の設定を、手作業で反映させたいのですが、どのようなコードを追加すれば良いのかご掲示いただけますでしょうか?

        毎度すみませんが、どうぞ宜しくお願い致します。

        • DICE DICE より:

          カスタマイザーを使ってないのでどんなコードが吐き出されているか分かりませんが、Firebugでその部分のCSSを確認して、同じようにstyle.cssに記述すれば大丈夫だと思います。
          頑張ってFirebug使ってみてくださいね!

  3. スペシャルミルク より:

    ありがとうございます!
    同じコードでいいのですね~~!なるほどです!!!!
    早速やってみます^^

    • スペシャルミルク より:

      DICE様!一応できました!!!!!!
      嬉しすぎて鼻水が(笑)
      タイトル見出しも不具合なく表示されました!

      下記のコードをstyle.cssに追加したら一応できたのですが、最後のボーダーだけ反映されませんでしたが、これから色々いじってみようと思います。

      #wrapper {
      background: #ffbd3a;
      border-top: 5px solid #ffbd3a;
      }

      body.custom-background {
      background-color: #ffffff;
      }

      @media only screen and (min-width: 960px)
      main {
      border: 1px solid #a8a8a8;
      }

タイトルとURLをコピーしました