【发布时间】:2020-03-26 06:04:08
【问题描述】:
在这个特定的代码中,我的管理后端中有一个<select multiple="multiple"> 字段(使用select2.js),位于具有自定义分类法的自定义帖子类型中。该区域的一切都按预期工作。我在显示多个选定选项时遇到问题,因为我不知道如何正确设置数组和/或代码是否正确。
我已包含var_dump(),因为它表明两个值都已保存,但仅显示第一个值。我知道这是因为代码(( $breed->slug == $select_breed[0]->slug ) ? 'selected="selected"' : '' ),但我不知道如何为例如:$select_breed[ALL/ANY]->slug 执行相同的代码行,因为有时他们可能会选择 1、2、3、4 或 5 个不同的值。对这行代码的一些帮助将不胜感激!
_N.B.在@CBroe 的帮助下,我合并了array_column() 和in_array() 来制定工作代码。欢迎任何其他建议。我已将结果作为答案。
代码
<?php
/**
* Pet Breed
*/
$breed_args = get_terms( array (
'taxonomy' => 'breed_taxonomy',
'hide_empty' => false
));
$select_breed = get_the_terms( get_the_ID(), 'breed_taxonomy' );
?>
<div class="section group">
<div class="col full">
<label for="pet_breed"><strong><?php _e( 'Pet Breed', 'audar_pets' ); ?> <abbr class="required" >*</abbr></strong><br />
<select id="pet_breed" class="taxonomy-select" name="pet_breed[]" multiple="multiple" style="width: 100%;" required="required" required >
<option></option>
<?php
if ( !empty( $breed_args ) ) :
foreach( $breed_args as $breed ) :
echo '<option value="' . $breed->slug . '" ' . (( $breed->slug == $select_breed[0]->slug ) ? 'selected="selected"' : '' ) . ' >' . $breed->name . '</option>';
endforeach;
endif;
?>
</select>
</label>
<?php
$pet_breed = get_the_terms( get_the_ID(), 'breed_taxonomy' );
var_dump( $pet_breed );
?>
</div>
</div>
保存
wp_set_post_terms( get_the_ID(), $_POST['pet_breed'], 'breed_taxonomy', false );
VAR_DUMP($PET_BREED) 的结果
array(2) {
[0]=>
object(WP_Term)#16459 (10) {
["term_id"]=>
int(153)
["name"]=>
string(19) "German Shepherd Dog"
["slug"]=>
string(19) "german-shepherd-dog"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(153)
["taxonomy"]=>
string(14) "breed_taxonomy"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(1)
["filter"]=>
string(3) "raw"
}
[1]=>
object(WP_Term)#16464 (10) {
["term_id"]=>
int(154)
["name"]=>
string(27) "German Short-Haired Pointer"
["slug"]=>
string(27) "german-short-haired-pointer"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(154)
["taxonomy"]=>
string(14) "breed_taxonomy"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(1)
["filter"]=>
string(3) "raw"
}
}
【问题讨论】:
-
好吧,你必须遍历
$select_breed,并将你的品种的蛞蝓与每个选定的蛞蝓分别进行比较……如果找到匹配项,则设置一个标志,然后根据该标志决定是否输出@987654333 @, 或不。或者你让这更容易一些 - 并使用array_column从$select_breed中提取所有 slug 值。一旦你有了一个只包含选定的 slug 作为字符串的“平面”数组,你就可以简单地使用in_array来执行检查,而无需自己编写循环或类似的东西。 -
谢谢我正在考虑使用 count() 和 while() 选项,但我不知道如何将 while 添加到 foreach 循环中。您将如何提取 slug 值?我会研究array_column。如果你能提供一个基本的例子,我会试一试!感谢您的评论。
-
$slugs = array_column($select_breed, 'slug');应该可以解决问题。 (使用 var_dump 验证,$slugs 现在应该只包含 slug 值作为项目。) -
谢谢。这里已经很晚了。我会尽快实施并相应回复。
-
很高兴它成功了。不过,您能否将其作为实际答案?保持本网站的问答格式;-) stackoverflow.com/help/self-answer
标签: php arrays wordpress metadata custom-taxonomy