【WordPress】ブロックエディタで投稿者によって表示を出し分ける方法

【WordPress】ブロックエディタで投稿者によって表示を出し分ける方法 WordPress

WordPressのブロックエディタ(Gutenberg)では、投稿者に応じて特定のコンテンツを表示・非表示にしたいケースがあります。この記事では、投稿者によって表示を出し分ける2つの方法を紹介します。1つはショートコードを使う方法、もう1つはブロックエディタの標準機能である「追加CSSクラス」を使い、ショートコードを一切入力せずにブロック単位で制御する方法です。

スポンサーリンク

方法1:ショートコードで出し分ける

複数人でサイトを運用しているケースで役立つ、投稿者IDを指定するショートコードを作成します。以下のコードをテーマの functions.php に追加します。

functions.php:投稿者IDによる条件分岐ショートコード
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に対応させたい場合

複数の投稿者に対応する場合は、以下のようにカンマ区切りで対応可能なように改良できます。

functions.php:複数投稿者への対応
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クラス」欄を使う方法もあります。テキストとしてショートコードを打ち込む必要がなく、ブロックの設定画面だけで完結します。

functions.php:追加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)

QGutenbergのサイドバーパネルを特定の投稿タイプにのみ表示するには?
Aregister_post_meta()は投稿タイプごとに個別に呼び出す必要があります(複数の投稿タイプをまとめて指定する引数はありません)。JavaScript側はPluginDocumentSettingPanelやPluginSidebarコンポーネントを使い、wp.data.select(‘core/editor’).getCurrentPostType()で現在の投稿タイプを確認し、対象外であればnullを返すことで表示を制御します。
Q投稿タイプによって使えるブロックを切り替えるには?
Aallowed_block_types_allフィルターでcontext.post_type(WordPress 5.8以降)を確認し、投稿タイプごとに許可ブロックリストを返します。
QGutenbergのメタボックスを特定の投稿タイプにのみ表示するには?
Aadd_meta_box()の第4引数$screen(投稿タイプの文字列・配列・WP_Screenオブジェクトを指定可能)で対象の投稿タイプを指定します。またはコールバック内でget_current_screen()->post_typeを確認します。

まとめ

ブロックエディタで投稿者に応じたコンテンツの出し分けを実現することで、より柔軟な編集体験を提供できます。マルチユーザー環境のWordPressサイトでは、ショートコードによる方法に加えて、ブロックの「追加CSSクラス」とrender_blockフィルターを組み合わせることで、編集画面から直感的に投稿者ごとの表示制御ができるようになります。