按自定义字段选择分组
Optgroup by custom field
我目前正在使用 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>
我想要一种将具有相同公司名称的 post 分组到 <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>
我曾尝试将当前 post 的公司与之前 post 的公司进行比较,但意识到具有相同公司名称的 post 可能在另一个公司之后或之前post 使用不同的公司名称。
我知道我也可以使用 if 语句来指定每个公司名称,但我想要一个允许其他公司名称尚未输入到 Wordpress 中的解决方案。
如果您想按特定值对数组的所有元素进行分组,我喜欢先遍历数组以整理它,然后在单独的循环中进行显示。
所以我会把每个元素放入一个数组中,该数组具有我想作为键分组的值。
所以我想创建一个数组,看起来像
['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>";
}
我目前正在使用 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>
我想要一种将具有相同公司名称的 post 分组到 <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>
我曾尝试将当前 post 的公司与之前 post 的公司进行比较,但意识到具有相同公司名称的 post 可能在另一个公司之后或之前post 使用不同的公司名称。
我知道我也可以使用 if 语句来指定每个公司名称,但我想要一个允许其他公司名称尚未输入到 Wordpress 中的解决方案。
如果您想按特定值对数组的所有元素进行分组,我喜欢先遍历数组以整理它,然后在单独的循环中进行显示。
所以我会把每个元素放入一个数组中,该数组具有我想作为键分组的值。
所以我想创建一个数组,看起来像
['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>";
}