web-dev-qa-db-ja.com

ループを介して複数の「tax_query」配列を追加するにはどうすればよいですか?

(高度なカスタムフィールドプラグインを使用して)機能を構築して、分類を指定したすべてのカスタム投稿タイプ(「製品」)のページテンプレートに情報をリストしようとしています。

これは現在の安定したコードで、製品をクエリしますが、ハードコーディングした分類法の用語にのみ基づいています。

_$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=は私の専門知識ではないので、ここからどこに行くべきかわかりません。

1
LCW

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
));
2