[WPプラグイン]投稿のリストをショートコードで表示するプラグイン

WordPress by Adriano Gasparri

固定ページの場所に、特定のカテゴリーの投稿や特定のタグがついた投稿のリストを表示させたいときがあります。

普通は、カスタムフィールドで表示させたいカテゴリー名なんかを入れて、カテゴリーIDを拾って、get_posts関数の引数にして回すように、テンプレートをカスタマイズすればいいんです。

理想は、カスタムフィールドに名前と値を入れたら、the_contentsにフィルタかけて表示するとかが便利なんですけど、見つかりませんでした。

ショートコードで表示させるものは見つかりました。

ショートコードなので、投稿エリアの好きなの場所にリストを表示させることができます。Lightweight Google Maps で地図を表示するか、 Google Maps Anywhereで地図を表示するかの違いみたいなもんですかね。

ショートコードで投稿一覧を表示するプラグインはコチラ

Post List というプラグインが、この要求を満たしてくれます。

ショートコードの引数にカテゴリー名、タグ名を設定して、特定の条件を満たす投稿のみを表示させることができます。カテゴリー名、タグ名とも複数設定が可能ですが、タグ名を複数設定した場合、設定したタグ名をすべて含む(AND検索)か、いずれか含む(OR検索)かを、requesttypeという引数に設定して使いわけができます。カテゴリーには、その選択はなく常にOR検索です。(そもそも、一つの投稿は、複数のカテゴリーに属さないという考えなのかもしれません)

もちろん、表示させる投稿の件数も引数で設定できます。

しかし、不具合あり

このプラグインには不具合があります。

例えば、固定ページにショートコードで一覧表示をさせたとします。そして、その固定ページのディスカッションの設定でコメントもトラックバックも、その許可のチェックを外していたとします。

しかし、投稿の一覧表示を表示させた場合、一覧の末尾の投稿のコメント欄やコメントが表示されます。

ちなみに、エディットリンクが表示されている場合にクリックすると、末尾の投稿の編集画面が開きます。

原因は?

プラグインのソースコードを見たところ、ループが終了した後に、postdataをリセットしていないのが原因でした。

ループが終了した後に、wp_reset_postdata関数を呼び出して、ポストデータをリセットすることで解決します。

このプラグインは、投稿の一覧を取得するのに、WP_Queryで新規オブジェクトを作成してますが、そもそもget_postsでいいんじゃないのって思ったりします。

実際、使うかどうか分かんないんですけどね。

別に、任意の場所に表示する必要もないので、「カスタムフィールドに名前と値を入れたら、the_contentsにフィルタかけて表示する」ってのを作ったほうが、クライアントが操作しやすいですしね。