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