输出循环中帖子的唯一分类术语

时间:2015-06-03 作者:andrewdcato

我正在尝试动态填充分类术语的下拉列表(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, 我提取了另外两个分类术语(statecarrier) 为每个控件动态创建下拉列表,以便carrier 不提供product 因为product-line, 这个carrier 不会出现在下拉列表中(对于state). 然后,当用户搜索product, 传递变量(statecarrier 从表单本身,以及product-line 从执行搜索的页面),处理表单以构建查询并通过AJAX返回结果。

同样,构建下拉列表是可行的,但它会输出carrierstate 它出现在product - 我试图让它输出唯一的值,因此我在当前Array ( [0] => ) 输出

1 个回复
最合适的回答,由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();
这就是说,如果我做这件事效率低下,我总是乐于接受建议:)

结束

相关推荐