新しいブログサイトを作った時に、「よし!投稿数100まで頑張るぞ!」と思ったりすることもあります。ブログを書くのは結構大変な作業なので、めげてしまいそうですがとりあえず「今何記事になってるんだろう?」と思ったときに、ダッシュボードでなくてもホームページのどこかに表示出来たらいいなぁと思って、方法について検索してみました。WordPressのテンプレートタグで取得できるようでしたが、簡単に表示出来るようにショートコードにしてみました。
投稿の公開済み件数を表示するショートコード
投稿の公開済み件数を表示するには、テンプレートタグwp_count_postsを使って件数を取得します。内容について詳しく書いたのですが、中身に興味がない場合を考えて解説については最後に書きました。
具体的にどのようなコードを書くと投稿の公開済み件数を表示出来るか、というと、子テーマのfunctions.phpやCode Snippetsなどで
$count_posts = wp_count_posts(); echo "<br>公開済み:".$count_posts->publish;
こんな感じのコードを書けば、
公開済み:6
このように表示されます。
テンプレートに直書きとかが面倒なのでショートコードにしました
仕組みとしてはこれで表示出来るのですが、この形だと PHP ファイル(テンプレート)に直書きしないといけないので、面倒だなと思ってショートコードにしてみました。
コードは
/* 公開済み投稿数を返すショートコード */ function usort_published_post_count() { $count_post = wp_count_posts(); return $count_post->publish; } /* ショートコードを追加する */ add_shortcode('usort_published_post_count', 'usort_published_post_count');
このようにショートコード化しただけです。これを子テーマのfunctions.phpに記述するかあるいはCode Snippetsに記述して有効化すれば使えるようになります。
Code Snippetsをお使いの場合は、このファイルを展開してインポートすることもできます。公開済み投稿件数を返すショートコード
上記を設定した後に、ダッシュボードや投稿、固定ページなどショートコードが書けるところに
[usort_published_post_count]
のように書けば、その部分に投稿の公開済み件数が表示されます。
例えば
このようにウィジェットに記述すれば、
このように表示されます。ショートコードなので、投稿などでも
このように文章の途中にショートコードを入れれば
文章の間に現在の公開済み件数が表示されて便利かなと思います。
投稿だけでなく固定ページやカスタム投稿タイプの件数を表示する
wp_count_postsには引数を与えれば投稿だけでなく、固定ページやカスタム投稿タイプの件数も同じように表示出来るので投稿だけでなく他の件数も表示させたいの場合のショートコードも作ってみました。
コードは、
/* 公開済み投稿数を返すショートコード */ function usort_published_any_count($atts) { extract( shortcode_atts( array( 'post_type' => 'post' ), $atts ) ); $count_post = wp_count_posts($post_type); return $count_post->publish; } /* ショートコードを追加する */ add_shortcode('usort_published_any_count', 'usort_published_any_count');
このようになりました。引数を与えることで固定ページやカスタム投稿タイプの件数も取得できるようになります。
これを子テーマのfunctions.phpに記述するかあるいはCode Snippetsに記述して有効化すれば使えるようになります。
Code Snippetsをお使いの場合は、このファイルを展開してインポートすることもできます。
公開済みの各種投稿数を返すショートコード
使い方は
投稿
投稿:[usort_published_any_count]件
のように投稿に関してはショートコード名を書くだけで変わりませんが、それ以外についてはpost_typeを指定します。固定ページのpost_typeはpageなので、
固定ページ
固定ページ:[usort_published_any_count post_type=page]件
このようにpost_typeの後に = を付けてpageと入力します。
カスタム投稿タイプの場合はそれぞれのカスタム投稿タイプのスラッグを指定します。
お客様の声:[usort_published_any_count post_type=uservoice]件
こんな感じになります。カスタム投稿タイプのスラッグが不明な場合は、そのカスタム投稿タイプで新規追加をしたときのURLにpost_type=という部分がありますので、その後に書かれているものがカスタム投稿タイプのスラッグとなります。
テンプレートタグ「wp_count_posts」で各種投稿数を取得する詳しい解説
WordPressのコーデックスで、wp_count_postsを確認しました。
wp_count_postsで取得できる各種情報について
例えば、子テーマのfunctions.phpやCodeSnippetsなどで以下のようなコード
$count_posts = wp_count_posts();
を書くと $count_posts というオブジェクトに投稿に関する、以下の値が入ってくるようです。
参照:http://wpdocs.osdn.jp/%E6%8A%95%E7%A8%BF%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9
公開済 (publish) | 誰でも見ることができます。 |
予約済 (future) | 未来の日付に公開を予定されています。 |
下書き (draft) | 適切な ユーザーレベル を持つユーザーが見ることができる、未完成の投稿です。 訳注:edit_others_posts 権限を持つユーザー(普通は 編集者 権限グループを割り当てられたユーザー)。 |
承認待ち (pending) | publish_posts 権限を持つユーザー(普通は 編集者 権限グループを割り当てられたユーザー)による公開を待っています。 |
非公開 (private) | 管理者レベルの WordPress ユーザーだけが見ることができます。 |
ゴミ箱 (trash) | ゴミ箱の中にある投稿は trash ステータスを割り当てられます。 |
自動保存 (auto-draft) | 編集中に WordPress が自動的に保存した リビジョン です。 |
継承 (inherit) | 子の投稿(添付ファイル/en や リビジョン)に割り当てられ、実際のステータスは親投稿のステータスによって決まります。 |
試しに投稿一覧で
このような状態の時に、上記のコードを書いて中身をvar_dump()で表示させると、
["publish"]=> string(1) "6" ["future"]=> string(1) "1" ["draft"]=> string(1) "5" ["pending"]=> int(0) ["private"]=> string(1) "1" ["trash"]=> string(1) "1" ["auto-draft"]=> int(0) ["inherit"]=> int(0) ["request-pending"]=> int(0) ["request-confirmed"]=> int(0) ["request-failed"]=> int(0) ["request-completed"]=> int(0) }
このように表示されます。実際にこれらを利用するには
echo "<br>公開済み:".$count_posts->publish; echo "<br>公開予約:".$count_posts->future; echo "<br>下書き:".$count_posts->draft; echo "<br>非公開:".$count_posts->private; echo "<br>ごみ箱:".$count_posts->trash;
このように記述することで、
公開済み:6 公開予約:1 下書き:5 非公開:1 ごみ箱:1
このようにそれぞれの件数を表示させることができます。
wp_count_postsで固定ページやカスタム投稿タイプの件数を取得する方法
wp_count_postsは引数を指定することができます。省略した場合は投稿(post)を指定したということと同じ動きになります。固定ページは page、カスタム投稿タイプはカスタム投稿タイプのスラッグ を指定することでそれぞれのタイプの件数を取得することができます。
$count_posts = wp_count_posts('page');
のように指定すれば、固定ページに関する件数が取得できます。
カスタム投稿タイプは例えば、bookというカスタム投稿タイプのスラッグだった場合は
$count_posts = wp_count_posts('book');
のように指定すれば、そのカスタム投稿タイプに関する件数が取得できます。この書き方ですがショートコードでの記述では問題なく取得できるのですが、タイミングによってはカスタム投稿タイプだけ件数が取得ができないので、その場合はコードを実行するタイミングを遅らせるなどの工夫が必要になるかもしれません。私の場合、functions.phpの地の文に書いてテストしたときはカスタム投稿タイプだけうまく件数が取得できませんでした。
コメント