我正在尝试构建功能(使用高级自定义字段插件)以在页面模板中列出所有具有指定分类法的自定义帖子类型(“产品”)的信息。
这是我当前的稳定代码,用于查询产品,但仅基于分类术语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不是我的专长,所以我不确定接下来该怎么做。非常感谢您的帮助。
最合适的回答,由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
));