Menu drop down com optgroup nas categorias do Wordpress
23 de novembro de 2008 por Ederson SpaderEstou fazendo um projeto com o wordpress e tive que usar as categorias como países e as subcategorias como estados. No caso como são apenas poucos paises resolvi agupa-los com a tag html optgroup. Para isso fiz uma função para tal, quebrei um bocado a cabeça para gerar um código válido, visto que a tag optgroup insistia em repetir mais que o desejado.
A tag optgroup para quem não conhece:
<select name="" id=""> <optgroup label="Brasil"> <option value="11">Fortaleza</option> <option value="9">Rio Grande do Sul</option> <option value="5">Santa Catarina</option> <option value="8">São Paulo</option> </optgroup> <optgroup label="Portugal"> <option value="7">Faro</option> <option value="6">Lisboa</option> <option value="10">Porto</option> </optgroup> </select>
Resultado final gerado pelo navegador

optgroup
Vamos agora o que interessa, a função em php para optgroup
<?php
function categoria() {
// No nosso caso usei: exclude=1 para excluir a categoria default
// Para parametros de get_categories, visite abaixo:
// http://codex.wordpress.org/Function_Reference/get_categories
$categorias_array = get_categories('exclude=1');
$output = '<select name="categoria" id="categoria">' . "\n";
$output .= '<option value="0">Selecione a categoria</option>' . "\n";
foreach ($categorias_array as $categoria) {
if($categoria->parent == 0){ // As categorias pai tem sempre o parent = 0.
$categoria_id = $categoria->term_id; // coloca o valor da variavel com o id da categoria pai
$output .= '<optgroup label="' . $categoria->cat_name . '">' . "\n"; // Monta o optgroup com a categoria pai
foreach($categorias_array as $categoria){ // Percorre o array outra vez
if($categoria->parent == $categoria_id){ // compara o valor do parent com o da id da categoria pai
$output .= '<option ' . $selected . ' value="' . $categoria->term_id . '">' . $categoria->cat_name . '</option>' . "\n";
}
}
$output .= '</optgroup>' . "\n";
}
}
$output .= '</select>' . "\n";
return $output;
}
?>
Download do código do exemplo: categoria_optgroup
Qualquer coisa, comenta ai!





