MENU

build_query_vars_from_query_block()

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

投稿タイプが複数ある場合は?

postType に配列を使うと、post_type__in 形式になります。

自分で WP_Query を動的に生成する用途でも使える?

はい、ブロックエディタの設定をサーバーサイドに反映させる際に便利です。

まとめ

  • build_query_vars_from_query_block() はブロックエディタのクエリループ設定を WP_Query 形式に変換する。
  • ブロックテーマやフルサイト編集で、クエリ条件をカスタマイズする場面で有効。
  • WP_Query にそのまま渡せるため、サーバーサイドでの制御も容易。
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次