如何通过循环添加多个‘TAX_QUERY’数组?

时间:2018-07-16 作者:LCW

我正在尝试构建功能(使用高级自定义字段插件)以在页面模板中列出所有具有指定分类法的自定义帖子类型(“产品”)的信息。

这是我当前的稳定代码,用于查询产品,但仅基于分类术语I硬代码:

$posts = get_posts(array(
    \'posts_per_page\'    => 10,
    \'post_type\'         => \'company_product\',
    \'tax_query\' => array(
            array(
                \'taxonomy\' => \'taxonomy\',
                \'field\' => \'slug\',
                \'terms\' => \'product1\'
            ),
));
我已经使用ACF在后端设置了一些功能,以选择要应用于查询的多个分类法(通过repeater字段),这样管理员就可以根据它们拥有的分类法修改返回的产品。

我试过这个:

$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\\u查询添加一个数组,但试图将if/while函数放在数组本身中会导致错误。

我认为上面的方法行不通,但PHP不是我的专长,所以我不确定接下来该怎么做。非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好的,我不知道你的代码应该如何以及为什么工作。。。它与正确的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
));

SO网友:Paul Elrich

如果条件没有在数组内部运行,则需要为每个条件编写单独的数组:

$posts = get_posts(if( have_rows(\'category_taxonomies\') ){array(
\'posts_per_page\'    => 10,
\'post_type\'         => \'company_product\',
\'tax_query\' => array(\'taxonomy\' => \'taxonomy\',
                    \'field\' => \'slug\',
                    \'terms\' => the_sub_field(\'category_taxonomy\')),
   }else{array(
   \'posts_per_page\'    => 10,
   \'post_type\'         => \'company_product\'
   )}
));

结束
如何通过循环添加多个‘TAX_QUERY’数组? - 小码农CODE - 行之有效找到问题解决它

如何通过循环添加多个‘TAX_QUERY’数组?

时间:2018-07-16 作者:LCW

我正在尝试构建功能(使用高级自定义字段插件)以在页面模板中列出所有具有指定分类法的自定义帖子类型(“产品”)的信息。

这是我当前的稳定代码,用于查询产品,但仅基于分类术语I硬代码:

$posts = get_posts(array(
    \'posts_per_page\'    => 10,
    \'post_type\'         => \'company_product\',
    \'tax_query\' => array(
            array(
                \'taxonomy\' => \'taxonomy\',
                \'field\' => \'slug\',
                \'terms\' => \'product1\'
            ),
));
我已经使用ACF在后端设置了一些功能,以选择要应用于查询的多个分类法(通过repeater字段),这样管理员就可以根据它们拥有的分类法修改返回的产品。

我试过这个:

$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\\u查询添加一个数组,但试图将if/while函数放在数组本身中会导致错误。

我认为上面的方法行不通,但PHP不是我的专长,所以我不确定接下来该怎么做。非常感谢您的帮助。

2 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

好的,我不知道你的代码应该如何以及为什么工作。。。它与正确的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
));

SO网友:Paul Elrich

如果条件没有在数组内部运行,则需要为每个条件编写单独的数组:

$posts = get_posts(if( have_rows(\'category_taxonomies\') ){array(
\'posts_per_page\'    => 10,
\'post_type\'         => \'company_product\',
\'tax_query\' => array(\'taxonomy\' => \'taxonomy\',
                    \'field\' => \'slug\',
                    \'terms\' => the_sub_field(\'category_taxonomy\')),
   }else{array(
   \'posts_per_page\'    => 10,
   \'post_type\'         => \'company_product\'
   )}
));

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请