如何检查主题选项页中是否存在CategoryID

时间:2013-04-11 作者:Torsten

我尝试创建一个主题选项页面(从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专家。也许有人能给我一个解决这个问题的提示。。。

1 个回复
最合适的回答,由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数组的$is——将与您的类别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 虽然

在第二个块中,您似乎也犯了同样的错误,我很确定数组键的使用不正确是问题的根源。

结束

相关推荐

如何从wp_Dropdown_Categories获取类别插件

我正在自定义一个插件。我需要它来显示层次结构中的类别列表,这是我使用插件的所有功能得到的。我正在使用wp_dropdown_categories, 但我想将类别列表显示为它们的slug,而不是它们的类别名称。有什么建议吗?以下是我目前掌握的情况:function replace_id_for_slug( $option ) { $categories = get_categories( \"hide_empty=0\" ); preg_match( \'/value=\"(