我尝试创建一个主题选项页面(从themeshaper中的一个示例主题选项页面开始),我想检查以逗号分隔的类别列表是否有效。删除重复项,删除不存在的类别,但不起作用:(
如果我用empty()检查,则删除最后一个值:
function theme_options_validate( $input ) {
if ($input[\'slidercats\'] != \'\') {
$slidercats = $input[\'slidercats\'];
$slidercats_array = explode( \',\', $slidercats );
$slidercats_array = array_unique( $slidercats_array );
$slidercats_array = array_map(\'intval\', $slidercats_array );
foreach($slidercats_array AS $i => $value)
{
$cat = get_category($i); // cat_ID
if ( empty( $cat ) )
unset($slidercats_array[$i]);
}
$input[\'slidercats\'] = implode(",", $slidercats_array);
}
return $input;
}
http://pastebin.com/xR1aq6mD
它删除了所有值,只有一个
term_exists(id, \'category\');
function theme_options_validate( $input ) {
// global $select_options, $radio_options;
// Change to integer
$input[\'slidercount\'] = (int)$input[\'slidercount\'];
if ($input[\'slidercount\'] < 1 || $input[\'slidercount\'] > 50)
$input[\'slidercount\'] = 10;
// Make array from string, remove duplicates, change all values to integer, remove non existing categories, make string from array
if ($input[\'slidercats\'] != \'\') {
$slidercats = $input[\'slidercats\'];
$slidercats_array = explode( \',\', $slidercats );
$slidercats_array = array_unique( $slidercats_array );
$slidercats_array = array_map(\'intval\', $slidercats_array );
foreach($slidercats_array AS $i => $value)
{
$cat = term_exists($i, \'category\'); // cat_ID
if ( ! $cat )
unset($slidercats_array[$i]);
}
$input[\'slidercats\'] = implode(",", $slidercats_array);
}
return $input;
}
http://pastebin.com/edx8F1YZ
问题是
foreach
, 但我被困住了,没有php专家。也许有人能给我一个解决这个问题的提示。。。
最合适的回答,由SO网友:s_ha_dum 整理而成
在以下代码中,$i
不是您的类别ID。
foreach($slidercats_array AS $i => $value)
{
$cat = get_category($i); // cat_ID
if ( empty( $cat ) )
unset($slidercats_array[$i]);
}
至少我不明白这是怎么回事。如果你
explode
字符串结果数组中的键是数字的,从0开始依次生成。我假设您的原始字符串是以逗号分隔的类别ID列表。这意味着
key
数组的
$i
s——将与您的类别ID没有关系。例如:
$arr = \'9,8,7,6,5,4\'; // assume these to be category IDs
print_r(explode(\',\',$arr));
/* Returns
Array
(
[0] => 9
[1] => 8
[2] => 7
[3] => 6
[4] => 5
[5] => 4
) */
您想使用
$value
不是
$i
. 这个
$i
是
[0],[1],[2]
, 等等,你想要下半场
$value
-- 检查类别(或术语)时。
$cat = get_category($value); // cat_ID
你还是想要
$i
当你
unset
虽然
在第二个块中,您似乎也犯了同样的错误,我很确定数组键的使用不正确是问题的根源。