Title: ショートコードでカテゴリとタグを指定し、記事一覧を表示したい
Last modified: 2016年9月15日

---

# ショートコードでカテゴリとタグを指定し、記事一覧を表示したい

 *  解決済 [Rena0404](https://ja.wordpress.org/support/users/rena0404/)
 * (@rena0404)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/)
 * ホームページ作成初心者です。
 * 投稿ページにphpを書き込み、プラグインを使って動かしています。しかし、そのよう
   なやり方だとセキュリティー面で危険との指摘を受けました。
 * 下記のようなphpをショートコードでで出力できるように置きかえたいのですが、どなた
   かご教示ください。
 *     ```
       <?php
       $newslist = get_posts( array(
           'category_name' => '北海道',
           'tag_slug__in' => array('スワンファーショール'),
           'posts_per_page' => -1,
           'order' => 'ASC',
           'orderby' => 'title' ));
       	foreach( $newslist as $post ):
       	setup_postdata( $post );?>
       	<?php echo '
       <li><a href="' . get_permalink() . '">' . get_the_content() . '</a></li>
       '; ?>
       <?php
         endforeach;
         wp_reset_postdata();?>
       ```
   

6件の返信を表示中 - 1 - 6件目 (全6件中)

 *  [jim912](https://ja.wordpress.org/support/users/jim912/)
 * (@jim912)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197353)
 * ショートコードの作成方法は、[CODEX の ショートコードAPI](http://wpdocs.osdn.jp/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89_API)
   に詳しく書かれていますので、そちらを参照してください。
 * 古い記事ですが、[WordPressのショートコードを自作してみる | webOpixel](http://www.webopixel.net/wordpress/53.html)
   では、分かりやすく記述されていますので、合わせて読んでいただくと良いかと思います。
 * 最大の違いは、ショートコード内では、echo で出力を行わず、表示する文字列を作成
   し、return しなければならない点です。
    それ以外は、概ね上記のコードを活かせる
   はずです。
 *  トピック投稿者 [Rena0404](https://ja.wordpress.org/support/users/rena0404/)
 * (@rena0404)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197359)
 * jim912様
 * ご教示ありがとうございます。リンクを貼っていただいたページや他のページを参考にし
   つつショートコードを作成してみました。
 * 希望通りのリストを出力できたのですが、また問題が発生しました。リストがページの
   上部に表示されます。ショートコードの出力内容は文中に表示したいので、[こちら](https://ja.forums.wordpress.org/topic/11410?replies=9)
   を参照し、書き換えてみたのですが、解消されないままです。
 * 何が問題なのか教えていただけないでしょうか。
 *     ```
       function getCatItems($atts, $content = null) {
        extract(shortcode_atts(array(
        "num" => '',
        "cat" => '',
        "tag" => '',
        ), $atts));
        global $post;
        $oldpost = $post;
        $myposts = get_posts('numberposts='.$num.'&order=ASC&orderby=title&category='.$cat.'&tag_id='.$tag);
        $html = '';
        foreach($myposts as $post) :
        setup_postdata($post);
        $html.='<li><a href="'.get_permalink().'">'.the_content("","",false).'</a></li>';
        endforeach;
        return $html;
       }
       add_shortcode("list", "getCatItems");
   
       [list cat="" tag="" num="-1"]
       ```
   
 *  [jim912](https://ja.wordpress.org/support/users/jim912/)
 * (@jim912)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197361)
 * もう一息ですね。
 * the_content関数は、実行された時点で出力してしまいますので、まずここを [get_the_content](http://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_content)
   関数に置き換えます。
 * ただし、CODEXに表示されているように、get_the_content 関数は the_content フィルター
   を通らないため、改行が付加されなかったり、ショートコードの展開が行われません。
 * これを通すために
 *     ```
       apply_filters( 'the_content', get_the_content() );
       ```
   
 * として、手動で the_content フィルターを通すようにしてください。
 *  トピック投稿者 [Rena0404](https://ja.wordpress.org/support/users/rena0404/)
 * (@rena0404)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197374)
 * jim912様
 * ご回答ありがとうございます。
 * > 手動で the_content フィルターを通す
 * とはどのような意味なのでしょうか。
 * apply_filtersについて調べてみたのですが、語記事が少なく
 * > apply_filters( ‘the_content’, get_the_content() );
 * をどこに記載すればいいかわかりませんでした。
 *  [jim912](https://ja.wordpress.org/support/users/jim912/)
 * (@jim912)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197377)
 * フィルターフックについての理解は、
 * [WordPressをカスタマイズするなら覚えておきたいアクションフックとフィルターフック](http://webdesignrecipes.com/wordpress-action-hook-and-filter-hook/)
 * apply_filters については、
 * [
    WordPressのadd_filterとapply_filtersのまとめ
 * あたりが分かりやすいと思います。
 * 上記の参考記事で、ちょうど the_content 関数のコードを例に説明されていますが、
   この関数は、
    1. get_the_content 関数を用いて、記事の本文を取得し、$content に格納する
    2. apply_filters 関数で、$content に対して、the_content フィルターの適用を行う
    3. ]]>の置換処理を行う
    4. echo で本文の出力を行う
 * となっています。
 *     ```
       apply_filters( 'the_content', get_the_content() );
       ```
   
 * は、the_content 関数内部の処理の1と2 を同時に行っている処理ですので、この記述
   は
 *     ```
       the_content("","",false)
       ```
   
 * の部分をそっくり置き換えてください。
 *  トピック投稿者 [Rena0404](https://ja.wordpress.org/support/users/rena0404/)
 * (@rena0404)
 * [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197388)
 * 無事動くようになりました。
    手鳥足取り、詳しく教えていただきありがとうございま
   した。
 * 完成したコードはこちらです。
 * > function getCatItems($atts, $content = null) {
   >  extract(shortcode_atts(array(“
   > num” => ”, “cat” => ”, “tag” => ”, ), $atts)); global $post; $oldpost = $post;
   > $myposts = get_posts(‘numberposts=’.$num.’&order=ASC&orderby=title&category
   > =’.$cat.’&tag_id=’.$tag); $retHtml=’
    - ‘;
       foreach($myposts as $post) : setup_postdata($post); $retHtml.=’
    - [‘.apply_filters( ‘the_content’, get_the_content() ).’](https://ja.wordpress.org/support/topic/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%A8%E3%82%BF%E3%82%B0%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%80%81%E8%A8%98%E4%BA%8B/'.get_permalink().'?output_format=md)
    - ‘;
       endforeach; $retHtml.=’
 * ‘;
    $post = $oldpost; return $retHtml; } add_shortcode(“list”, “getCatItems”);
 * [list cat=”” tag=”” num=”-1″]

6件の返信を表示中 - 1 - 6件目 (全6件中)

 トピック「ショートコードでカテゴリとタグを指定し、記事一覧を表示したい」には新た
に返信することはできません。

## タグ

 * [カテゴリ](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa/)
 * [カテゴリー](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%83%bc/)
 * [ショートコード](https://ja.wordpress.org/support/topic-tag/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89/)
 * [タグ](https://ja.wordpress.org/support/topic-tag/%e3%82%bf%e3%82%b0/)
 * [記事一覧](https://ja.wordpress.org/support/topic-tag/%e8%a8%98%e4%ba%8b%e4%b8%80%e8%a6%a7/)

 * フォーラム: [使い方全般](https://ja.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 6件の返信
 * 2人の参加者
 * 最後の返信者: [Rena0404](https://ja.wordpress.org/support/users/rena0404/)
 * 最後の活動: [11年、 1ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%82%ab%e3%83%86%e3%82%b4%e3%83%aa%e3%81%a8%e3%82%bf%e3%82%b0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%97%e3%80%81%e8%a8%98%e4%ba%8b/#post-197388)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
