ワードプレスで投稿した全記事数を記事内やサイドバーに表示する方法を解説 〜PHP利用〜


医者じゃないのに医者と名乗るのは医師法違反なので、ドクターノミゾの医師免許を見たい方はコチラのプロフィールをどうぞ。
(この記事は2020年8月に書きました。)
ブログをはじめたばかりのブロガーの方で、まずは100記事目指して記事を作成しようと思ったときに
ところで現在、何記事ぐらい書いたんだ?
と疑問に思った方、いませんか?
『ダッシュボード』の『概要』を見れば、現在何件投稿したかと固定ページは何件あるか教えてもらえますが、WEBページ内で確認する方法はないかと調べました。

自分のブログは自分で何度も開きまくるので、トップページに何件投稿したかわかれば、これから100記事書くモチベーションにならないかと考えたわけです。
結論から言うと、苦労しましたがなんとかできました。

ひとつのウェブサイトを参考にしただけではうまく行かなかったので、自分が苦労したところ含めて完成まですべてお伝えしたいと思います。
ちなみに自分はPHPに関してはずぶの素人ですが、なんとか実装できました。
全部の投稿数を表示・取得する方法〜PHPショートコードの利用〜
PHPやHTMLの知識が全くない人向けに、これをやるだけで完成するよというのまずお知らせします。
実装にあたって内容を詳しく知りたい人は、記事を最後まで閲覧していってください。
第1段階:function.phpに次の文章をコピペする
まず、『外観』の『テーマエディター』を開きます。
そこにある『テーマのための関数(function.php)』を開きます。

わけのわからない文字が羅列しているかと思いますが、完全に無視して一番下まで行きます。
そして、この文章を入力してください。
//投稿ページのみ出力
function output_all_article(){
$count_posts = wp_count_posts();
$posts = $count_posts->publish;
return 'このサイト内の記事数は全部で'.$posts.'記事です。';
}
add_shortcode('output_all_article', 'output_all_article');
//投稿ページのみ出力 おわり
こんな感じで記述します。

コピペでOKです。
コピペしたら『ファイルを更新』のボタンを押して第1段階クリアです。
第2段階:サイドバーや記事、ヘッダーなどにPHPショートコードを入力する。
第1段階よりずっと簡単です。
今回は、サイドバーに全投稿数を表示させたいと思います。
『外観』から『ウィジェット』をひらき、サイドバーに『テキスト』または『カスタムHTML』を展開してください。
そこに
[output_all_article]
を入力します。

これで終わりです。
サイドバーの一番上にこんな感じで表示されます。

ぜひご自身のブログをみて確認してみてください。
phpのショートコードを記入したところに投稿された記事数が表示されているはずです。
表示された文字を編集したければ、spanなどのタグで囲ってCSSを駆使して装飾してあげてください。

ここから先は、より詳しく知りたい方向けの記事になります。

ワードプレスではPHPは使えない(利用不可)
ワードプレスはPHPで作成されています。
記事やサイドバーでむやみやたらにPHPの関数を記述すると誤作動を起こす可能性があるため、基本的にPHPのコードを記述しても完全にシカトされます。


では、今回のようにPHPを利用して全投稿数などを取得する関数をどうやって使用するかというと、PHPのショートコードを利用する方法が推奨されています。
function.php内に自作の関数を書き込み、それを記事やサイドバーでショートコードの形で呼び出すわけです。
ショートコードの呼び出し方は[ショートコード名]で呼び出せます。
関数名を自由につけられるのと同様に、ショートコード名も自由につけられます。
今回はわかりやすさ重視で関数名とショートコード名は同じ『output_all_article』にしてみました。

PHPショートコードの記述が一番上にくる問題の解決策
PHPのショートコードですが、returnで返したものしか正常に反映されません。
echoを使っても表示されることはされますが、なぜか一番上に表示されてしまいます。



このように、通常『上』という文字と『下』という文字の間に全記事数が表示されるはずですが、バグって一番上に表示されています。
「どうしてもechoをつかって表示させたいんじゃ!」
という方のために、やり方を教えておきます。
ブログに最終的に表示される文字をechoで書いたら、そのechoの前後をob_start();とreturn ob_get_clean();で囲みます。

これでechoの文章をreturnで返すことができるため、正常に反映されるかと思います。

function.phpの記述を変更すると、しっかりとHTMLタグが反映されて、『上』と『下』の間に全記事数が表示されているのがわかります。

固定ページの数を取得する方法
投稿だけでなく、固定ページも取得する方法ですが、やり方は基本的に同じです。
使用する関数が違うだけですね。
//固定ページのみ出力
function output_fixed_page(){
$count_pages = wp_count_posts('page');
$pages = $count_pages->publish;
return 'このサイト内の固定ページは全部で'.$posts.'記事です。';
}
add_shortcode('output_fixed_page', 'output_fixed_page');
//固定ページのみ出力 おわり
こちらをfunction.phpに打ち込んでください。
投稿数のコードと違ってショートコードが[output_fixed_page]になってるのでお気をつけください。

投稿したページ+固定ページをすべて取得する方法
やり方はまったく同じです。
関数内で足し算しするだけです。
//総記事数を出力(投稿ページ+固定ページ)
function output_all_pages(){
$count_pages = wp_count_posts('page');
$count_posts = wp_count_posts('post');
$pages = $count_pages->publish;
$posts = $count_posts->publish;
$count_all = $posts + $pages;
return 'このサイト内の固定ページは全部で'.$count_all.'記事です。';
}
add_shortcode('output_all_pages', 'output_all_pages');
//総記事数を出力(投稿ページ+固定ページ)おわり
こちらもショートコードが[output_all_pages]に変更されてるので気をつけてください。

まとめ
- ワードプレスではPHPの記述が無視される
- PHPの利用には、ショートコードを利用する必要がある
- よくわからなくてもコピペでOK!
感想
最初にPHPをサイドバーの『テキスト』エリアに直接書き込んで失敗しました。

PHPコードはワードプレスでは利用できないのかと膝から崩れ落ちました。
次に、ショートコードを利用する方法がわかりましたが、一番上に来る問題が浮上しました。
しかもHTMLタグを無視しやがります。

うまく行ったと思ったら次の問題が生じるのはプログラミングあるあるだと思います。
最終的に、全投稿数を表示するだけで数時間かかってしまいましたが、表示された瞬間は感動して手が震え、涙が滝のように目から流れ落ちました。
この世に生まれてきて本当に良かったと感じました。
苦労して苦労して表示させた文字というのは愛着がわきます。
嬉しいので100件投稿するまでは、サイドバーに表示させておこうと思います。