この記事は公開から7年、最終更新日からも7年経過しています。内容が古くなっている可能性があります。
目次
概要
プラグイン勉強第二弾です。
投稿記事をランダムに表示するプラグインです。
今のところショートコードで呼び出す事ができます。
その際、カテゴリと表示個数を指定することが出来ます。
※アクションフック・wp_footerでも呼び出すことが出来るのを確認しましたが、現在は動作させていません。
動作方法(ショートコードの書き方)
表示したい箇所(本記事のように投稿内)にショートコードを下記のように記載します。
[random_posts カテゴリID 個数]
このように記載すると指定カテゴリIDの記事を指定個数分、リンク付きで、アイキャッチ画像とタイトルを表示します。
※カテゴリID=0を指定するとすべての投稿を対象とします。
プラグイン実装(ソースをほぼ加工なしで表示しています)
・class指定やCSS定義などは省略しています。
ショートコード実装
function shortcode_random_posts( $param ) { return random_posts($param[0] , $param[1]); //0:カテゴリーID(0はカテゴリ指定なし) 1:表示記事数 } add_shortcode('random_posts','shortcode_random_posts');
本体部分
<?php function random_posts( $category_id , $show_posts) { if ( $show_posts <= 0 ) { $show_posts = 1; } //0以下はありえないのでとりあえず1にする if ( $category_id == 0 ) { //カテゴリ無関係にランダム表示 $args = array( 'posts_per_page' => $show_posts , 'orderby' => 'rand', 'post_type' => 'post', 'post_status' => 'publish' ); } else { //カテゴリ指定してランダム表示 $args = array( 'posts_per_page' => $show_posts , 'category' => $category_id , 'orderby' => 'rand', 'post_type' => 'post', 'post_status' => 'publish' ); } ob_start(); // バッファリング開始 $posts_array = get_posts( $args ); ?> <ul class=""> <?php foreach ( $posts_array as $post ) { $post_id = $post->ID; $post_title = get_the_title( $post_id ); $post_link = get_permalink( $post_id ); ?> <li> <a href="<?php echo $post_link;?>"> <?php if (get_the_post_thumbnail( $post_id, 'thumbnail' )) { echo get_the_post_thumbnail( $post_id, 'thumbnail' ); } else { echo '<img src="アイキャッチがない時に代わりに表示する画像のURL" class="">'; } ?> </a> <a href="<?php echo $post_link;?>"><?php echo $post_title; ?></a> </li> <?php } wp_reset_postdata(); ?> </ul> <?php $return_strings = ob_get_contents(); // バッファリング取得 ob_end_clean(); // バッファリング終了 return $return_strings; }
本ページ下記の表示の元となったショートコード
[random_posts 0 5] ※全記事からランダムに5記事
[random_posts 7370 5] ※ID=7370カテゴリ(diaryカテゴリ)からランダムに5記事
[random_posts 7517 5] ※ID=7517カテゴリ(worksカテゴリ)からランダムに5記事
実行結果(ランダムに表示されるので読み込むごとに表示される投稿が変わります)
全カテゴリの中から記事をランダムに5つ
diaryカテゴリ内の記事をランダムに5つ
worksカテゴリ内の記事をランダムに5つ
最後に
ループの回し方、また、ob_startを使ったバッファリング等手こずりましたが、とりあえず所望の結果を得るプラグインの実装できました。
これで勉強編はとりあえず終了して、次は一般公開するための実装をめざしたいと思います。
どんなプラグインにするかは思案中です。