我正在为存储匹配数据的自定义post类型处理元字段。我有两个单独的元框,其中一个是团队和分数的选择,并提交值。
第二种方法获取这些信息,并提供一系列选择框,在这些框中显示有关球队的球员。由于进了几个球,因此选择了几个球员(有些人不止一次)
我正在做一个教程http://wp.tutsplus.com/tutorials/reusable-custom-meta-boxes-part-3-extra-fields/ 我正在修改代码以使用重复选择框。这就是我想到的:
$goal_info_meta_fields = array(
\'label\' => \'Home Goals by:\',
\'desc\' => \'List home scorers\',
\'id\' => $prefix.\'home-scorers\',
\'type\' => \'home_player_list\'
);
function show_goal_info_meta_box() {
global $goal_info_meta_fields, $post;
echo \'<input type="hidden" name="goal_info_meta_box_nonce" value="\'.wp_create_nonce(basename(__FILE__)).\'" />\';
echo \'<table class="admin-table">\';
foreach ($goal_info_meta_fields as $field) {
$meta = get_post_meta($post->ID, $field[\'id\'], true);
echo \'<tr>
<th><label for="\'.$field[\'id\'].\'">\'.$field[\'label\'].\'</label></th>
<td>\';
switch($field[\'type\']) {
// home_player_list
case \'home_player_list\':
echo \'<a class="repeatable-add button" href="#">+</a>
<ul id="\'.$field[\'id\'].\'-repeatable" class="custom_repeatable">\';
$post_id = get_the_ID();
$team_id = get_post_meta( $post_id, \'report_home-select\');
$items = get_users( array (
\'meta_key\' => \'team-meta\',
\'meta_value\' => $team_id
));
$i = 0;
if ($meta) {
foreach($meta as $row) {
echo \'<li><span class="sort hndle button">|||</span>\';
echo \'<select name="\'.$field[\'id\'].\'[\'.$i.\']" class="chzn-select" style="width:200px;" id="report_home-scorers">
<option value="">Select One</option>\'; // Select One
foreach($items as $item) {
echo \'<option value="\'.$item->ID.\'"\',$meta == $item->ID ? \' selected="selected"\' : \'\',\'>\'.$item->display_name.\'</option>\';
}
echo \'</select><a class="repeatable-remove button" href="#">-</a></li>\';
$i++;
}
} else {
echo \'<li><span class="sort hndle button">|||</span>\';
echo \'<select name="\'.$field[\'id\'].\'[\'.$i.\']" class="chzn-select" style="width:200px;" id="\'.$field[\'id\'].\'">
<option value="">Select One</option>\'; // Select One
foreach ($items as $item) {
echo \'<option value="\'.$item->ID.\'"\',$meta == $item->ID ? \' selected="selected"\' : \'\',\'>\'.$item->display_name.\'</option>\';
}
echo \'</select><a class="repeatable-remove button" href="#">-</a></li>\';
}
echo \'</ul><span class="description">\'.$field[\'desc\'].\'</span>\';
break;
} //end switch
echo \'</td></tr>\';
} // end foreach
echo \'</table>\'; // end table
}
如果我使用文本输入,而不是选择框,那么效果会很好,我想问题是$meta == $item->ID ? \' selected="selected"\' :
目前$meta = a:1:{i:0;s:3:"179";}
我也尝试过取消阵列的序列化。
我使用的教程有一个github存储库https://github.com/tammyhart/Reusable-Custom-WordPress-Meta-Boxes 我也尝试过,但我无法应用可重复的示例,因为选项在循环中,我无法在数组中使用foreach语句。
我很想得到一些帮助,因为过去两天我一直在扯头发。
最合适的回答,由SO网友:s_ha_dum 整理而成
要使此工作正常。。。
$meta == $item->ID ? \' selected="selected"\' : \'\';
。。。使用如下数组
a:1:{i:0;s:3:"179";}
未序列化为。。。
Array
(
[0] => 179
)
。。。您需要执行以下操作:
$meta = unserialize($meta);
$meta[0] == $item->ID ? \' selected="selected"\' : \'\';
但这条线出现在
foreach
喜欢
foreach($meta as $row) {
, 至少在一个地方,所以我想知道为什么它没有写。。。
$row == $item->ID ? \' selected="selected"\' : \'\';
第二次那条线--
$meta[0] == $item->ID ? \' selected="selected"\' : \'\'
-- 显示在
else
除非
$meta
为空,因此它根本不应该使用变量。
我建议你enable debugging 好好看看周围。