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 )
引数
戻り値
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
にそのまま渡せるため、サーバーサイドでの制御も容易。
コメント