WordPressで任意のカスタム投稿タイプの投稿リストを実装するショートコードを作る

Ads

任意のカスタム投稿タイプの
最新の投稿のリストをショート
コードで表示させる、という
方法。用途は限られますけど、
いつか使いそうなのでメモ書き。

調べ物をしたので備忘録。作成したカスタム投稿タイプで更新した投稿の一覧をリストで表示させる、というショートコードを作成する方法です。

コード

リストのソート方法やマークアップ、含めるコンテンツ等は便宜変更してください。

function section_feed_shortcode( $atts ) {
extract( shortcode_atts( array( 'limit' => -1, 'type' => 'post'), $atts ) );

$paged = get_query_var('paged') ? get_query_var('paged') : 1;  

query_posts(  array ( 
    'posts_per_page' => $limit, 
    'post_type' => $type, 
    'order' => 'ASC', 
    'orderby' =>'menu_order', 
    'paged' => $paged ) );

$list = ' ';   

while ( have_posts() ) { the_post();

    $list .= '<article class="listing-view clearfix">' 
    . '<div class="listing-content">' 
    . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
    .'<p>' . get_the_excerpt() . '</p>'
    . '<a href="' . get_permalink() . '">' . '続きを読む &raquo;' . '</a>'
    . '</div>'
    . '<a class="listing-thumb" href="' . get_permalink() . '">' . get_the_post_thumbnail($page->ID, 'listing-thumb')  . '<span></span></a>'
    . '</article>';
}

return 
'<div class="listings clearfix">' 
. $list 
. '<div class="nav-previous">' . get_next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
. '<div class="nav-next">' . get_previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
. '</div>' .
wp_reset_query();

}
add_shortcode( 'feed', 'section_feed_shortcode' );

で、以下のようなショートコードで実装出来ます。

[feed type=”foo” limit=”5″]

投稿タイプ名が「foo」の最新記事5個を表示します。

カスタム投稿タイプが沢山必要なサイトで、投稿タイプごとの最新記事を記事内や固定ページ内で表示する、という方法が分からなくて探してたら同じ事で悩んでる人がいたので参考にさせてもらいました。

Shortcode Displaying Custom Post Types – WordPress Answers