
目次
WordPressテーマ「Snow Monkey」には、ヘッダーに任意のリンク付きテキストを表示できるお知らせバーがあります。
重要な投稿のリンクなどを強調して表示するのに便利な機能ですが、実際の運用では以下のような課題があります。
まず、表示内容の設定はテーマカスタマイザーから行う必要があります。これは管理者権限を持つユーザーのみがアクセス可能です。そのため、編集者や投稿者権限のユーザーは自分で設定を変更できません。
また、リンクを差し替える際の作業フローも煩雑です。都度テーマカスタマイザーを開き、タイトルとURLをコピー&ペーストして設定を更新する必要があります。
もし投稿の編集画面で「この投稿をお知らせバーに表示する」と指定できれば、こうした運用の手間を大幅に削減できるはずです。
そこで本記事では、投稿編集画面にチェックボックスを追加してチェックした投稿を自動的にお知らせバーに表示する方法を紹介します。
実装の概要
実装内容
本記事で実装する機能は以下の2つです。
- 選択した投稿をお知らせバーに設定する
- 投稿一覧にお知らせバー設定の有無を表示する
検証環境
検証環境は以下の通りです。
- PHP 8.3.25
- WordPress 6.8.2
- Snow Monkey 29.1.5
- Advanced Custom Fields 6.5.0
選択した投稿をお知らせバーに設定する
ACFで投稿編集画面にチェックボックスを追加する
お知らせバーの表示を制御するためのチェックボックスをAdvanced Custom Fields(ACF)で追加します。
ACFの設定画面で、以下のフィールドグループおよびフィールドを設定します。
- フィールドグループ名:
お知らせバー設定
- フィールドタイプ:
真/偽
- フィールドラベル:
お知らせバーに表示する
- フィールド名:
show_in_infobar
- メッセージ:任意のテキスト
- ロケーションルール:
投稿タイプ
が投稿
に等しい
設定すると、投稿編集画面に以下の画像のようなチェックボックスが表示されます。これでACFの設定は完了です。
チェックした投稿を自動的にお知らせバーに設定する
my-snow-monkey.php
に以下のコードを追加します。
// お知らせバー自動制御(投稿保存時のみ実行).add_action( 'acf/save_post', 'update_infobar_on_post_save' );
/** * お知らせバー表示用の記事を取得 * * @return WP_Post|null お知らせバー表示対象の記事、見つからない場合はnull. */function get_infobar_post(): ?WP_Post { // チェックありの投稿のうち、投稿日が最新のものを1件取得する. $posts = get_posts( array( 'post_type' => 'post', 'post_status' => 'publish', 'meta_key' => 'show_in_infobar', 'meta_value' => '1', 'orderby' => 'date', 'order' => 'DESC', 'numberposts' => 1, ) );
return $posts ? $posts[0] : null;}
/** * 投稿保存時にお知らせバーを更新 * * @param int $post_id 保存された投稿のID. */function update_infobar_on_post_save( int $post_id ): void { // 投稿タイプが'post'の場合のみ処理. if ( 'post' !== get_post_type( $post_id ) ) { return; }
// お知らせバー設定を再計算して更新. refresh_infobar_settings();}
/** * お知らせバー設定を最新状態に更新 */function refresh_infobar_settings(): void { $infobar_post = get_infobar_post();
if ( $infobar_post ) { // お知らせ記事がある場合はカスタマイザー設定を更新. set_theme_mod( 'infobar-content', $infobar_post->post_title ); set_theme_mod( 'infobar-url', get_permalink( $infobar_post->ID ) ); } else { // お知らせ記事がない場合はお知らせバー設定をクリア. remove_theme_mod( 'infobar-content' ); remove_theme_mod( 'infobar-url' ); }}
get_infobar_post()
はお知らせバー表示用の記事を取得します。前セクションで追加したお知らせバーに表示する
のチェックボックスにチェックのある投稿を取得して返します。チェックありの投稿が複数ある場合も考え、投稿日が最新のものを1件のみ取得するようにしています。
update_infobar_on_post_save()
はメインの処理です。refresh_infobar_settings()
を実行します。
refresh_infobar_settings()
はお知らせバー設定を更新します。お知らせバーに表示する
にチェックのある投稿があればその投稿をお知らせバーに設定し、なければお知らせバー設定をクリアします。
上記の関数を定義のうえ、acf/save_post
にupdate_infobar_on_post_save
を設定しています。acf/save_post
はACFが提供するアクションで、投稿保存時に発火します。この設定により、投稿保存時にupdate_infobar_on_post_save()
が実行されます。
ここまでの設定とコードの追加により、お知らせバーに表示する
にチェックした投稿をお知らせバーで自動的に表示できるようになりました。
投稿一覧にお知らせバー設定の有無を表示する
現状では、投稿のお知らせバーに表示する
にチェックがあるかどうかはその投稿の編集画面でのみ確認できます。どの投稿にチェックがあるかを一覧で確認できないのは不便です。
これを解消するため、管理画面の投稿一覧にカラムを追加して、そこにお知らせバー設定の有無を表示するようにします。
my-snow-monkey.php
に以下のコードを追加します。
// 管理画面の投稿一覧にお知らせバー設定カラムを追加.add_filter( 'manage_post_posts_columns', 'add_infobar_column' );add_action( 'manage_post_posts_custom_column', 'display_infobar_column', 10, 2 );
/** * 管理画面の投稿一覧にお知らせバー設定カラムを追加 * * @param array $columns 既存のカラム配列. * @return array 修正されたカラム配列. */function add_infobar_column( array $columns ): array { $columns['infobar_setting'] = 'お知らせバー'; return $columns;}
/** * お知らせバー設定カラムの表示内容を出力 * * @param string $column_name カラム名. * @param int $post_id 投稿ID. */function display_infobar_column( string $column_name, int $post_id ): void { if ( 'infobar_setting' !== $column_name ) { return; }
$is_infobar_enabled = get_field( 'show_in_infobar', $post_id );
if ( $is_infobar_enabled ) { echo '<span style="color: #00a32a; font-weight: bold;">✓ 表示</span>'; } else { echo '<span style="color: #999;">ー</span>'; }}
add_infobar_column()
は管理画面の投稿一覧に「お知らせバー」カラムを追加します。
display_infobar_column()
は「お知らせバー」カラムにそれぞれの投稿のお知らせバーに表示する
設定の有無を表示します。
コードの追加により、管理画面の投稿一覧に「お知らせバー」カラムとそれぞれの投稿のお知らせバーに表示する
設定の有無が表示されます。
これで各投稿のお知らせバーに表示する
設定の有無を把握しやすくなりました。
まとめ
本記事では、Snow Monkeyのお知らせバーに表示する投稿を投稿編集画面から選択する方法を紹介しました。
ACFのチェックボックスとWordPressのフック機能を組み合わせることで、テーマカスタマイザーを開くことなく投稿編集時にお知らせバーへの表示を設定できるようになりました。また、管理画面の投稿一覧でお知らせバー設定の有無を確認できるようにすることで運用の利便性も向上しました。
この実装により、管理者権限でないユーザーでもお知らせバーの更新が可能になり日々の運用がより効率的になります。
今回のサンプルコードはGitHubで公開しています。