今回は新着記事などのお知らせを表示してくれるやつを作ります。
ただし、どうせ作るなら新着記事のタイトルが表示されるだけでなく、サイトデザイン変更しましたとか、○○がアプリになりましたとか、バージョンアップしましたとか、そういう記事投稿以外の情報も自由に加えられるようなヤツが欲しいですよね(・∀・)ノ
ということで例として私のサイトではこういう感じに表示されるようになっています。
アプリ化しただのゲーム公開しただの自由に書いています。
カスタム投稿を使う
これもカスタム投稿で作ることができます。
ただ、以前にゲーム投稿用のカスタム投稿を作っているので、今回はすでに存在しているcreate_post_type()内に付け足してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
register_post_type( 'news', [ // 投稿タイプ名の定義 'labels' => [ 'name' => '新着情報', // 管理画面上で表示する投稿タイプ名 'singular_name' => 'news', // カスタム投稿の識別名 ], 'public' => false, // 投稿タイプをpublicにしない 'show_ui' => true, 'has_archive' => false, // アーカイブ機能いらない 'menu_position' => 5, 'supports' => array( 'title', 'editor', ), ]); |
今回のこの新着情報のregister_post_type()と前に作ったゲーム用のとでは内容が少し違います。
一番の違いは「public」がfalseになっていることです。これは公開しないということを意味します。つまりサイトに来たユーザーには記事としては見せないということです。なので編集画面にはプレビューボタンも表示されなくなります。
「supports」もタイトルと文章だけ入力できればいいのでtitleとeditorだけになっています。
とはいえ機能的には通常の投稿と変わらないのでリンクとかは普通につけることができます。
新着情報一覧を表示する
作った新着情報は公開されないのでプログラムで表示するように作る必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function get_news(){ global $post; $args = array( 'post_type' => 'news', //投稿タイプ名 'numberposts' => 10, //表示数 ); $news_posts = get_posts($args); if ( !empty($news_posts) ): foreach ( $news_posts as $post ): ?> <ul> <?php setup_postdata($post); ?> <li><?php the_content();?></li> <time class="post-date" datetime="<?php echo get_the_date('Y-m-d'); ?>"> <i class="fa fa-clock"></i> <span><?php echo get_the_date(); ?></span><!--日付--> </time> </ul> <?php endforeach; wp_reset_postdata(); ?> <?php endif; } |
上記をfunction.phpに追加してget_news()を表示したい部分に埋め込むとリストで表示してくれるようにしました。記事の内容と日付が表示されます。
例によってCSSデザインは自分でやってね(^-^;
まとめ
これで好きなように新着情報を作成することができます。ただし、新しくブログ記事を投稿したときはこっちにも書かないといけないので二度手間な感じも少しあります(^^;)
なので私は通常のブログは新着情報には入れてません(ブログの新着は別で作ってあります)。ゲームに関することやサイト全体に関することを新着情報で扱うようにしています。
ということでついでにブログの新着記事を一覧表示するやつも載せときますね(‘ω’)ノ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function get_blog_headlines(){ global $post, $posts; $args = array( 'posts_per_page' => 5 // 表示件数の指定 ); $posts = get_posts( $args ); ?> <ul> <?php foreach ($posts as $post): // ループの開始 setup_postdata($post); /*記事データの取得*/ ?> <li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <time class="post-date" datetime="<?php echo get_the_date('Y-m-d'); ?>"><!--投稿日のマークアップ--> <i class="fa fa-clock"></i> <span><?php echo get_the_date(); ?></span><!--日付--> </time> </li> <?php endforeach; ?> </ul> <?php wp_reset_postdata(); } |