最新記事を取ってくるショートコード

Facebooktwitter

これまでWordpressを使っていて、最新記事を何件か表示させるということがよくありましたが、その都度関係するテンプレートにコードを書いていました。そういう要望がこのところ立て込んできて、いちいち書くのが面倒になったので、ショートコードにすることにしました。
また使うときのための自分用のメモです。

add_shortcode('get_new_posts', 'getNewPosts');

function getNewPosts($atts) {
    extract(shortcode_atts(array(
        'count' => 2,
        'post_type' => 'post',
        'title_before' => '',
        'title_after' => '',
        'is_link' => 0,
        'link_class' => '',
        'target' => ''
    ), $atts));

$new = get_posts( array(
        'post_type' => $post_type, 
        'posts_per_page' => $count //取得記事件数
      ));
   
    $html = '';
    if (count($new )) {
        foreach ($new as $key => $n) {
           
            $html .= $title_before;
            if ($is_link) {
                $html .= '<a href="' . $n->guid . '"';
                if ($link_class != '') {
                    $html .= 'class="' . $link_class . '"';
                }
                if ($target != '') {
                    $html .= 'target="' . $target . '"';
                }
                $html .= '>';
                
            }
            
            $html .= $n->post_title;
            if ($is_link) {
                $html .= '</a>';
            }
            
            $html .= $title_after;

        }
    }
wp_reset_postdata();
return $html;
}

使い方は、こんな感じです。

[get_new_posts count=”3″ post_type=”post” title_before=”” title_after=”<br />” title_class=”link” is_link=1 target=”_blank”]

結果:
[get_new_posts count=”3″ post_type=”post” title_before=”” title_after=”
” title_class=”link” is_link=1 target=”_blank”]

これで、好きなところにあちこちぺたぺた最新記事のリストを張り付けられます。カテゴリの指定とかないですが、付けるのは簡単なので、アレンジして使えると思います。

ところで、この記事を書くときにいろいろ不具合が起きました。まずはショートコードの結果に勝手に<p>タグが付いてしまうこと。結果の前後につくのはまだ許せますが、<li></li>タグの間に勝手についてします。それはまだ解決できてないので、今回の例では<br/>を使うことにしました。pタグが勝手につかない方法もいくつかありますが、今回はショートコードの結果にだけつけたくないので、次の機会に解消方法を探ろうと思います。
もう一つは、サンプルのショートコードを張り付けるときに[]の実態参照が分からないこと。実態参照で表示させないと、サンプルで表示させようとしている、ショートコードが実行されてしまいます。「[]実体参照」とか「”[“実体参照」などのキーワードで検索かけたけどなぜか[]だけはどこのリストにも入っていません。最後に英語のサイトならあるかとおもって「[ entity reference」で検索したら、一発で出てきました。

https://dev.w3.org/html5/html-author/charref

なぜ日本語サイトではないのかは謎です。