クエリループブロックは便利なブロックですが、細かな設定はまだ出来ない部分もあります。個別投稿のテンプレートで、表示されている現在の投稿以外の投稿のリンク欄を作成する場合、現在の投稿は除外したいですよね。この場合のケースは2つです。

クエリリープブロックに「Exclude Current Post(現在の投稿を除外する)」がある場合

クエリループブロックを選択します。右サイドバーの設定パネルに「クエリ」セクションがあります。「現在の投稿を除外する」(Exclude Current Post)のオプションがある場合は、それを有効にします。

  • ※WordPressのバージョンやテーマによって、このオプションが表示されないことがあります。

functions.phpで対応(上記項目がない場合)

この方法は、サーバーサイドの処理だけで完結します。functions.php ファイルに以下のコードを追加します。

function exclude_current_post_in_query_block($block_content, $block) {
    // クエリループブロックかどうかを確認
    if (isset($block['blockName']) && $block['blockName'] === 'core/query') {
        if (isset($block['attrs']['query']) && is_singular()) {
            // 現在の投稿IDを取得
            $current_post_id = get_the_ID();

            // `post__not_in` がまだセットされていない場合は初期化
            if (!isset($block['attrs']['query']['post__not_in'])) {
                $block['attrs']['query']['post__not_in'] = array();
            }

            // 現在の投稿を除外
            $block['attrs']['query']['post__not_in'][] = $current_post_id;
        }

        // ブロック属性を再設定
        $block_content = render_block($block);
    }

    return $block_content;
}
add_filter('render_block', 'exclude_current_post_in_query_block', 10, 2);