Bueno, desde que publiqué este post hasta hoy han habido algunos cambios, ya me valida bien todo excepto un select, pero creo tener ubicado el problema así que será cuestión de dedicarle un rato...
Finalmente decidí validar según el tipo de input que sea, para así pasarlos todos por un foreach y esta es mi función de validación:
Código PHP:
Ver originalfunction t_em_theme_options_validate( $input ){
global $excerpt_options, $slider_layout;
// All the checkbox are either 0 or 1
'header-featured-image',
) as $checkbox ) :
if ( !isset( $input[$checkbox] ) ) $input[$checkbox] = null;
$input[$checkbox] = ( $input[$checkbox] == 1 ? 1 : 0 );
endforeach;
// Validate all radio options
'header-options' => array ( 'set' => 'header-set',
'callback' => t_em_header_options(),
),
'slider-options' => array ( 'set' => 'slider-thumbnail',
'callback' => $slider_layout,
),
'archive-options' => array ( 'set' => 'archive-set',
'callback' => t_em_archive_options(),
),
'excerpt-options' => array ( 'set' => 'excerpt-set',
'callback' => $excerpt_options,
),
'layout-options' => array ( 'set' => 'layout-set',
'callback' => t_em_layout_options(),
),
);
foreach ( $radio_options as $radio ) :
if ( ! isset( $input[$radio['set']] ) ) $input[$radio['set']] = null;
$input[$radio['set']] = null;
endforeach;
// Validate all int (input[type="number"]) options
'slider-thumbnail-width',
'slider-thumbnail-height',
'slider-number',
'excerpt-thumbnail-width',
'excerpt-thumbnail-height',
'layout-width',
) as $int ) :
$input[$int] = wp_filter_nohtml_kses( $input[$int] );
endforeach;
// Validate all url (input[type="url"]) options
'twitter-set',
'facebook-set',
'googlepluss-set',
'rss-set',
) as $url ) :
$input[$url] = esc_url_raw( $input[$url] );
endforeach;
// Validate all select list options
$select_options = array ( // No pincha 'set' => 'slider-category',
'callback' => t_em_slider_callback(),
),
);
foreach ( $select_options as $select ) :
$input[$select['set']] = null;
endforeach;
return $input;
}
?>
Ahora, $excerpt_options y $slider_layout son un par de variables que me retornan el array del slider-set y el excerpt-set, que a su vez pertenecen a las funciones que llamo como callback en t_em_archive_options() y t_em_header_options(), por ejemplo:
Código PHP:
Ver originalfunction t_em_header_options(){
$header_options = array ( 'no-header-image' => array ( 'value' => 'no-header-image',
'label' => __( 'No header image', 't_em' ),
'extend' => '',
),
'header-image' => array ( 'value' => 'header-image',
'label' => __( 'Header image', 't_em' ),
'extend' => t_em_header_image_callback(),
),
'value' => 'slider',
'label' => __( 'Slider', 't_em' ),
'extend' => t_em_slider_callback(),
),
);
return apply_filters( 't_em_header_options', $header_options );
}
Y aquí la función callback:
Código PHP:
Ver originalfunction t_em_slider_callback(){
global $slider_layout;
'slider-thumbnail-left' => array ( 'value' => 'slider-thumbnail-left',
'label' => __( 'Slider thumbnail on left', 't_em' ),
'thumbnail' => T_EM_FUNCTIONS_DIR_IMG . '/slider-thumbnail-left.png',
),
'slider-thumbnail-right' => array ( 'value' => 'slider-thumbnail-right',
'label' => __( 'Slider thumbnail on right', 't_em' ),
'thumbnail' => T_EM_FUNCTIONS_DIR_IMG . '/slider-thumbnail-right.png',
),
'slider-thumbnail-full' => array ( 'value' => 'slider-thumbnail-full',
'label' => __( 'Slider thumbnail on full', 't_em' ),
'thumbnail' => T_EM_FUNCTIONS_DIR_IMG . '/slider-thumbnail-full.png',
),
);
// aquí más código
}
Entonces, lo que me falta, como dije antes, es validar un select, de donde escojo una categoría determinada para mostrar en el slider del theme, pero creo tener claro qué debo hacer, es que me devuelva el valor mediante un array (como los anteriores), esto es lo que tengo:
Código PHP:
Ver originalfunction t_em_slider_callback(){
// Aquí hay más código
// Display a select list of categories
$list_categories = get_categories();
$extend_slider .= '<div class="sub-extend">';
$extend_slider .= '<label class="description">';
$extend_slider .= '<p>'. __( 'Select the category you want to be displayed in the slider section', 't_em' ) .'</p>';
$extend_slider .= '<select name="t_em_theme_options[slider-category]">';
foreach ( $list_categories as $slider_category ) :
$selected_option = ( $options['slider-category'] == $slider_category->cat_ID ) ? 'selected="selected"' : '';
$extend_slider .= '<option value="'.$slider_category->cat_ID.'" '.$selected_option.'>'.$slider_category->name.'</option>';
endforeach;
$extend_slider .= '</select>';
$extend_slider .= '</label>';
$extend_slider .= '</div>';
}
En fin, va funcionando, en cuanto lo termine publico la solución completa...
Gracias.