(高度なカスタムフィールドプラグインを使用して)機能を構築して、分類を指定したすべてのカスタム投稿タイプ(「製品」)のページテンプレートに情報をリストしようとしています。
これは現在の安定したコードで、製品をクエリしますが、ハードコーディングした分類法の用語にのみ基づいています。
_$posts = get_posts(array(
'posts_per_page' => 10,
'post_type' => 'company_product',
'tax_query' => array(
array(
'taxonomy' => 'taxonomy',
'field' => 'slug',
'terms' => 'product1'
),
));
_
ACFを使用してバックエンドで機能を設定し、クエリに適用する複数の分類法を(リピーターフィールドを介して)選択しました。これにより、管理者は、所有する分類法に基づいて、返される製品を変更できます。
私はこれを試しました:
_$posts = get_posts(array(
'posts_per_page' => 10,
'post_type' => 'company_product',
'tax_query' => array(
if( have_rows('category_taxonomies') ):
while ( have_rows('category_taxonomies') ) : the_row();
array(
'taxonomy' => 'taxonomy',
'field' => 'slug',
'terms' => the_sub_field('category_taxonomy')
),
endwhile;
endif;
));
_
しかし、次のエラーを受け取りました:Parse error: syntax error, unexpected 'if' (T_IF), expecting ')' in
...
ご覧のとおり、バックエンドで選択された分類ごとにtax_queryに配列を追加しようとしていますが、配列内にif/while関数を配置しようとするとエラーが発生します。
上記の方法はうまくいかないと思いましたが、PHP=は私の専門知識ではないので、ここからどこに行くべきかわかりません。
OK、私はあなたのコードがどのようにそしてなぜ機能するべきかわからない...それは正しいPHP構文と共通点はありません...しかし、それはかなり良い擬似コードなので、私はできると思いますねえ、あなたが達成したかったこと...
$tax_query = array();
if ( have_rows('category_taxonomies') ) {
while ( have_rows('category_taxonomies') ) {
the_row();
$tax_query[] = array(
'taxonomy' => 'taxonomy', // <- you should put real taxonomy name in here
'field' => 'slug',
'terms' => get_sub_field('category_taxonomy')
);
}
}
$posts = get_posts( array(
'posts_per_page' => 10,
'post_type' => 'company_product',
'tax_query' => $tax_query
));