WordPressのブロックエディタ(Gutenberg)では、投稿者に応じて特定のコンテンツを表示・非表示にしたいケースがあります。この記事では、投稿者によって表示を出し分ける2つの方法を紹介します。1つはショートコードを使う方法、もう1つはブロックエディタの標準機能である「追加CSSクラス」を使い、ショートコードを一切入力せずにブロック単位で制御する方法です。
方法1:ショートコードで出し分ける
複数人でサイトを運用しているケースで役立つ、投稿者IDを指定するショートコードを作成します。以下のコードをテーマの functions.php に追加します。
function show_if_author_shortcode($atts, $content = null) {
global $post;
$atts = shortcode_atts(array(
'id' => 0,
), $atts, 'show_if_author');
if ($post->post_author == $atts['id']) {
return do_shortcode($content);
}
return '';
}
add_shortcode('show_if_author', 'show_if_author_shortcode');
エディタ内で以下のようにショートコードを使用します。
[show_if_author id="3"] この内容は投稿者IDが3のときにだけ表示されます。 [/show_if_author]
投稿者IDはユーザー管理画面などから確認できます。
複数の投稿者IDに対応させたい場合
複数の投稿者に対応する場合は、以下のようにカンマ区切りで対応可能なように改良できます。
function show_if_authors_shortcode($atts, $content = null) {
global $post;
$atts = shortcode_atts(array(
'ids' => '',
), $atts, 'show_if_authors');
$ids = array_map('trim', explode(',', $atts['ids']));
if (in_array($post->post_author, $ids)) {
return do_shortcode($content);
}
return '';
}
add_shortcode('show_if_authors', 'show_if_authors_shortcode');
使用例:
[show_if_authors ids="2,5,8"] このコンテンツは投稿者IDが2, 5, 8のいずれかのときに表示されます。 [/show_if_authors]
方法2:ブロックエディタの「追加CSSクラス」で出し分ける
ショートコードの入力に抵抗がある編集者向けには、ブロックエディタの各ブロックが標準で持っている「高度な設定」パネルの「追加CSSクラス」欄を使う方法もあります。テキストとしてショートコードを打ち込む必要がなく、ブロックの設定画面だけで完結します。
function filter_block_by_author_class($block_content, $block) {
if (empty($block['attrs']['className'])) {
return $block_content;
}
// ブロックの「追加CSSクラス」に show-author-3 のように指定されていた場合、
// 投稿者IDが3のときだけそのブロックを表示する
if (preg_match('/show-author-(\d+)/', $block['attrs']['className'], $matches)) {
global $post;
if ((int) $post->post_author !== (int) $matches[1]) {
return '';
}
}
return $block_content;
}
add_filter('render_block', 'filter_block_by_author_class', 10, 2);
ブロックエディタで対象のブロックを選択し、右側の「高度な設定」パネルにある「追加CSSクラス」に show-author-3 のように入力するだけで、そのブロックが投稿者IDが3のときだけ表示されるようになります。
よくある質問(FAQ)
まとめ
ブロックエディタで投稿者に応じたコンテンツの出し分けを実現することで、より柔軟な編集体験を提供できます。マルチユーザー環境のWordPressサイトでは、ショートコードによる方法に加えて、ブロックの「追加CSSクラス」とrender_blockフィルターを組み合わせることで、編集画面から直感的に投稿者ごとの表示制御ができるようになります。

