我正在尝试动态填充分类术语的下拉列表(state
是使用的分类法)的自定义帖子类型(product
) 在搜索表单上。
我可以自己动态构建下拉列表,但我正在尝试设置它,以便product
用相同的state
这个state
术语只会在下拉列表中出现一次。
我的代码:
$state_tax_args = array(
\'post_type\' => \'products\',
\'orderby\' => \'name\',
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'product-line\',
\'field\' => \'slug\',
\'terms\' => $pl_slug //assigned at page start
),
),
);
$state_tax_query = new WP_Query( $state_tax_args );
$i=0;
if ( $state_tax_query->have_posts()) {
$states = array();
while ( $state_tax_query->have_posts()){ $state_tax_query->the_post();
$state_terms = wp_get_post_terms( get_the_id(), \'state\', array(\'orderby\' => \'name\', \'order\' => \'ASC\', \'fields\' => \'all\') );
foreach($state_terms as $st){
$term = get_term( $st );
$states[$i] = $term->slug ;
$i++;
} // end foreach
} // end while
$state_results = array_unique($states);
print_r($state_results);
} // end if
wp_reset_query();
出于测试目的,我只是在实际实现下拉构建之前打印阵列,但现在输出的只是
Array ( [0] => )
.
编辑:澄清一些事情。。。
我的网站上的数据层次结构如下:
我有一个自定义的帖子类型products
它附带了三个自定义分类法:product-line
, state
, 和carrier
(保险方面的事,耶!)。当我最初查询帖子时,我是通过product-line
, 因为product-line
术语页是我的搜索表单所在的位置。
一旦我通过product-line
, 我提取了另外两个分类术语(state
和carrier
) 为每个控件动态创建下拉列表,以便carrier
不提供product
因为product-line
, 这个carrier
不会出现在下拉列表中(对于state
). 然后,当用户搜索product
, 传递变量(state
和carrier
从表单本身,以及product-line
从执行搜索的页面),处理表单以构建查询并通过AJAX返回结果。
同样,构建下拉列表是可行的,但它会输出carrier
和state
它出现在product
- 我试图让它输出唯一的值,因此我在当前Array ( [0] => )
输出
最合适的回答,由SO网友:andrewdcato 整理而成
算了吧!
$state_tax_args = array(
\'post_type\' => \'products\',
\'orderby\' => \'name\',
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'product-line\',
\'field\' => \'slug\',
\'terms\' => $pl_slug // provided at page load
),
),
);
$state_tax_query = new WP_Query( $state_tax_args );
// counter to build array
$i=0;
if ( $state_tax_query->have_posts()) {
$state_term_list=\'<select class="form-control" id="inputStateSelect" placeholder="State" name="stateSelect">\';
$state_term_list.=\'<option value="">...</option>\';
$states = array();
while ( $state_tax_query->have_posts()){ $state_tax_query->the_post();
$state_terms = wp_get_post_terms( get_the_id(), \'state\', $args = array(\'orderby\' => \'name\', \'order\' => \'ASC\', \'fields\' => \'all\'));
foreach($state_terms as $state_term){
$states[$i] = $state_term->name;
$i++;
} // end foreach
} // end while
// kill the dupes
$state_results = array_unique($states);
// alphebatize
asort($state_results);
// build option list
foreach($state_results as $state_result){
$state_term_list.=\'<option value="\' . $state_result . \'">\' . $state_result . \'</option>\';
}
$state_term_list.=\'</select>\';
echo $state_term_list;
} // end if
wp_reset_query();
这就是说,如果我做这件事效率低下,我总是乐于接受建议:)