カテゴリ記事一覧を出力するショートコード作ってみた

タイトル通り。
固定ページで商品紹介の下に関連するブログ投稿の最新3件を入れるレイアウトだった。

Wireflame
こんな感じ

WYSIWYGエディタは使いたいし、でもテンプレートに書くとなるとカスタムフィールドだらけになるし、と悩んで、ショートコードを作ることに (^^)。

Codexを一読。
ショートコード API – WordPress Codex 日本語版
サンプルも載ってて大変ありがたい (^^)。

んで作ってみたのがこちら↓↓

んで、WYSIWYGの中で、

[php]

[[cat_list]]

[/php]

って書けばOK。カテゴリや表示件数、ulタグに付けるclass名や諸々追加する場合は、

[php]

[[cat_list cat_name="wordpress" num=-1 class="lists"]]

[/php]

とかやってあげるとOK (^^)
やってみたのがこちら↓↓


[cat_list cat_name=”wordpress” num=5 class=”lists”]
お手軽 🙂

ウィジェットにもOK

Codexを見てると、ウィジェットにもコードをちょっと追加するだけでテキストウィジェットにもショートコードを追加できると書いてある (^^)
関数リファレンス/do shortcode – WordPress Codex 日本語版

[php]
add_filter( ‘widget_text’, ‘do_shortcode’ );
[/php]

ウィジェットにも追加してみた。

ウィジェットエリア

ばっちり。

ウィジェットに出た

returnが大事!!

Codexを読んだにも関わらず、最初に作ったコードはこんな感じ↓↓

これで取りあえず出たぞ!! と喜んでたら、どうも出力される場所がおかしいワケです。。 🙁
フォーラムで発見しました。全く同じ状況で、大曲さんが回答されてました。ホントありがとうございます!!

WordPress › フォーラム » ショートコードの表示位置について

Codexを読んだにも関わらず、読んでない…。。っていうか、foreach() {} をどうやって変数に入れるのかわからなかったから省いちゃったんですが、この記事のおかげで変数に納めることができて、return $html;でショートコード書いた場所に無事出力することができました 🙂

ショートコードで呼び出す関数で出力してしまっていませんか?
ショートコードは、wp_contentのフィルターを通る際に、出力したいコードに置き換わる仕組みなので、出力してしまうとフィルターを通った際に出力してしまい、本文の上部に表示されてしまいます。

ショートコードで呼び出す場合は、return でHTMLのソースコードを返すようにしてください。

これですね。ええ。

ショートコードにパラメータ渡すのって便利

今回はget_postsのパラメータをショートコードの属性に使ったので、もっと沢山パラメータを追加すればあれこれできそうです。あまり沢山あってもアレですが。あ、複数カテゴリの場合はarray();使うけど、その場合ってどうするんだろ。。そこまでできれば更に便利だな :)

カスタムフィールド使う場合

apply_filters使って

[php]
<?php
$same_cat_list = get_field( $same_cat_list ); // Advanced Custom Fields使った場合
if( $same_cat_list ) { echo apply_filters( ‘the_content’, $same_cat_list ); }
?>
[/php]

これで出る 🙂

参考サイト

2 thoughts on “カテゴリ記事一覧を出力するショートコード作ってみた

  1. こんにちは。はじめまして。ショートコードのことを調べていて、こちらにたどりつきましたど素人です f^_^

    わたし、いま、wordpressのプラグイン「related post」の関数を、ショートコードを利用して、特定ページにだけ適用しようとしているのですが、うまくいきません。

    具体的には、ある投稿記事の文末にのみ、関連記事を表示させたいのですが、これが記事の先頭にきてしまうのです。

    function php には、

    function recipeFunc() {
    return wp_related_posts();
    }
    add_shortcode('recipe', 'recipeFunc');

    と書いていて、投稿ページ内には[recipe]と入れています。

    なにがまずいのでしょうか。

    突然でたいへん恐縮なのですが、もしおわかりになれば、お知恵を拝借できますと幸いです。

    よろしくお願いします。

Comments are closed.