build_query_vars_from_query_block()
は、ブロックエディタの「クエリループブロック」に定義されたパラメータから、WP_Query
に渡せる形のクエリ変数配列を生成する関数です。
ブロックテーマや FSE(フルサイト編集)環境での「Query Loop」ブロックの内部処理で使われます。
目次
機能の説明
どんな関数か?
この関数は、クエリループブロックの属性(例: 投稿タイプ、カテゴリー、並び順など)を読み取り、内部で使う WP_Query
互換のクエリ変数に変換する役割を果たします。
主にブロックテーマでクエリループブロックの動作をカスタマイズしたり、フロントエンド表示を制御したいときに使用します。
シンプルなコード例
$block = [
'blockName' => 'core/query',
'attrs' => [
'query' => [
'postType' => 'post',
'perPage' => 5,
'order' => 'desc',
'orderBy' => 'date',
'categoryIds' => [3, 5],
],
],
];
$query_vars = build_query_vars_from_query_block( $block );
print_r( $query_vars );
出力例
[
'post_type' => 'post',
'posts_per_page' => 5,
'order' => 'DESC',
'orderby' => 'date',
'category__in'=> [3, 5],
]
使い方の説明
関数構文
array build_query_vars_from_query_block( array $block )
引数
スクロールできます
引数名 | 型 | 説明 |
---|---|---|
$block | array | クエリブロックの配列。attrs['query'] にクエリ条件が含まれる。 |
$page | int | ページ番号。ページネーションに使用される。デフォルトは 1 。 |
戻り値
スクロールできます
キー名 | 型 | 説明 |
---|---|---|
post_type | string | 投稿タイプ(例:post , page , custom_post_type ) |
posts_per_page | int | 1ページあたりの投稿数(perPage に対応) |
paged | int | ページ番号($page 引数に対応) |
offset | int | 投稿の取得開始位置 |
orderby | string | 並び替えの基準(例:date , title , modified ) |
order | string | 並び順(ASC または DESC ) |
category__in | array | カテゴリIDの配列(categoryIds に対応) |
tag__in | array | タグIDの配列(tagIds に対応) |
author__in | array | 投稿者IDの配列(authorIds に対応) |
search | string | 検索キーワード |
exclude | array | 除外する投稿IDの配列 |
include | array | 含める投稿IDの配列 |
meta_query | array | メタクエリ(カスタムフィールドによる絞り込み) |
tax_query | array | タクソノミークエリ(カテゴリ・タグ以外のカスタム分類) |
WP_Query
に渡せるクエリ変数の連想配列。
一緒に使うことが多い関連タグ・関数
WP_Query
生成された配列をそのまま WP_Query
に渡すことが可能です。
$query_vars = build_query_vars_from_query_block( $block );
$query = new WP_Query( $query_vars );
parse_blocks()
投稿内のブロックを解析して、core/query
ブロックを抽出する時に使えます。
$blocks = parse_blocks( get_the_content() );
foreach ( $blocks as $block ) {
if ( $block['blockName'] === 'core/query' ) {
$vars = build_query_vars_from_query_block( $block );
}
}
追加情報を取得したい場合
投稿者でフィルターしたい場合
$block = [
'blockName' => 'core/query',
'attrs' => [
'query' => [
'author' => 1,
],
],
];
$query_vars = build_query_vars_from_query_block( $block );
// => [ 'author' => 1 ]
この関数を利用してのカスタマイズ
クエリブロックの条件をカスタマイズして WP_Query を実行
$block = [ 'blockName' => 'core/query', 'attrs' => [ 'query' => [ 'postType' => 'post', 'perPage' => 3 ] ] ];
$query_vars = build_query_vars_from_query_block( $block );
$query_vars['meta_key'] = 'custom_meta';
$query_vars['orderby'] = 'meta_value_num';
$custom_query = new WP_Query( $query_vars );
想定されるトラブル
ブロック属性の構造ミス
'query'
キーが attrs
に存在しない、または構造が崩れていると、意図したクエリが生成されません。
解決方法
isset( $block['attrs']['query'] )
などでチェックを入れるのが安全です。
Q&A
まとめ
build_query_vars_from_query_block()
はブロックエディタのクエリループ設定をWP_Query
形式に変換する。- ブロックテーマやフルサイト編集で、クエリ条件をカスタマイズする場面で有効。
WP_Query
にそのまま渡せるため、サーバーサイドでの制御も容易。
コメント