Optgroup by custom field

时间:2015-09-05 16:53:02

标签: php wordpress advanced-custom-fields

我目前正在使用Wordpress创建<select> <option>并填充<?php if( $lh_loop->have_posts() ): ?> <select class="mousechoice left"> <?php while( $lh_loop->have_posts() ) : $lh_loop->the_post();?> <optgroup label="<?php echo get_field("company_name") ?>"> <option data-id="<?php echo $post->post_name; ?>"><?php the_title(); ?></option> </optgroup> <?php endwhile; ?> </select> <?php endif; ?>

<select class="mousechoice left">

  <optgroup label="SteelSeries">
    <option data-id="sensei">Sensei</option>
  </optgroup>
  <optgroup label="Razer">
    <option data-id="deathadder">Deathadder</option>
  </optgroup>
  <optgroup label="SteelSeries">
    <option data-id="kana">Kana</option>
  </optgroup>

</select>

这表明了这一点:

<optgroup>

我想用一种方法将具有相同公司名称的帖子分组到<select class="mousechoice left"> <optgroup label="SteelSeries"> <option data-id="sensei">Sensei</option> <option data-id="kana">Kana</option> </optgroup> <optgroup label="Razer"> <option data-id="deathadder">Deathadder</option> </optgroup> </select> 。哪会导致这个:

class ProfilesContainerBuilder {
#if macro
    public static function build() : ComplexType {
        var fields = new Array<Field>();
        switch (Context.getLocalType()) {
            case TInst(_, [t1]):
                fields.push({
                    name: "get",
                    access: [APublic,AStatic],
                    pos: Context.currentPos(),
                    kind: FieldType.FVar(Context.getLocalType().toComplexType(),null)
                });
                fields.push({
                    name: "profile",
                    access: [APublic,AStatic],
                    pos: Context.currentPos(),
                    kind: FieldType.FVar(t1.toComplexType(),null)
                });
                fields.push({
                    name: "_getProfile",
                    access: [],
                    pos: Context.currentPos(),
                    kind: FieldType.FFun({
                        args: [],
                        expr: { pos: Context.currentPos(), expr: EReturn(
                            macro $i{t1.getClass().name+'.fromDynamic(Json.parse(Assets.getText("profiles/"+_activeProfile+".json")))'} )},
                        params: [],
                        ret: t1.toComplexType()
                    })
                });
            default:
                Context.error("Class expected", Context.currentPos());
        }
        return TAnonymous(fields);
    }
#end
}

我尝试将当前邮政公司与之前发布的公司进行比较,但意识到具有相同公司名称的帖子可能在另一个公司名称不同的帖子之后或之前。

我知道我也可以使用if语句来指定每个公司名称,但我想要一个允许其他公司名称尚未输入Wordpress的解决方案。

1 个答案:

答案 0 :(得分:1)

如果要按特定值对数组的所有元素进行分组,我喜欢先迭代数组以先整理它,然后在单独的循环中进行显示。

所以我会将每个元素放入一个数组中,该数组具有我想要作为键分组的值。

所以我想创建一个看起来像

的数组
 ['company A' =>[ [1 => 'option 1'],
                  [2 => 'option 2'],
                  ...
                ],
  'company B' =>[ [1 => 'option 3'],
                  [2 => 'option 4'],
                  ...
                 ],
   ...
  ]

要创建此数组,您可以使用(未​​经测试的)

之类的内容
$grouped = array();
while( $lh_loop->have_posts() ) : 
     $lh_loop->the_post();
     $key = get_field("company_name") 
     $subkey = $post->post_name; 
     $display = the_title();   
     if (empty($grouped[$key]){ //if they key isn't set yet
         //add the key to the array as a new element
         $grouped[] = array($key=>array($subkey=>$title));  
     }else{
         //else add to existing key
         $grouped[$key][] = array($subkey=>$title); 
     }         
endwhile;

然后,要显示列表,请执行类似

的操作
foreach ($grouped as $comp => $group){
    echo "<optgroup label=\"$comp\">";
     foreach ($group as $key => $val){
          echo "<option data-id=\"$key\">$val</option>";
     }
     echo "</optgroup>";
}