Very short snippet: WordPress, lista categorie con checkbox

Nei giorni scorsi ho rilasciato un nuova major release (la 2.3.0) del plugin WordPress WP Bannerize, ultima per quest’anno. Oltre ad aver introdotto l’uso dei Widget (su cui spero di riuscire a scrivere qualcosa prossimamente) o “finalmente” permesso di filtrare i banner anche per categoria.
Nella sezione Widget mi sono trovato nella necessità di visualizzare le categorie del blog in modo da poterle selezionare tramite un controllo checkbox! Inoltre, dovevo visualizzarle “indentate” nel rispetto della gerarchia padre/figlio. Dopo aver dato uno sguardo (ammetto veloce) alle funzioni di WordPress, mi è sembrato che non ci fosse nulla di già fatto disponibile e documentato!

Nota: in realtà, quando inseriamo un nuovo post nel backend di Wordress, la pagina propone proprio una lista delle categorie indentata con tanto di checkbox! Tuttavia, non volendo eseguire nessun reverse engineering per recuperare la funzione (lo ammetto… l’ho fatto e l’ho anche trovata, vedi wp_category_checklist() nella cartella wp-admin, solo che queste sono funzioni interne, quindi meglio evitare di usarle), ho optato per scriverne una mia personale

Così ho scritto una funzione personale che visualizza le categorie di un Blog in un lista indentata aggiungendo un controllo checkbox. Questa funzione può essere inserita in functions.php. La funzione, in realtà, è composta da due funzioni: quella principale e quella di servizio utilizzata per “iterare” in modo ricorsivo.
Nella versione che presento io (WordPress usa in questi casi un suo oggetto – o meglio una sua classe – Walker) non ho usato le nested function, in quanto davano qualche problema di campatibilità con la struttura dei Widget WordPress, ma voi potete riadattarla eventualmente per altri scopi.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * Restituisce una lista (UL/LI) delle categorie
 * @params $selected_cats     Array delle categorie selezionate
 *
 * @return HTML
 */

function get_categories_checkboxes( $selected_cats = null ) {
    $all_categories = get_categories();
    $o = '<ul style="margin-left:12px">';      
    foreach($all_categories as $key => $cat) {
        if($cat->parent == "0") $o .= __show_category($cat, $selected_cats);
    }
    return $o . '</ul>';
}

function __show_category($cat_object, $selected_cats = null) {
    $checked = "";
    if(!is_null($selected_cats) && is_array($selected_cats)) {
        $checked = (in_array($cat_object->cat_ID, $selected_cats)) ? 'checked="checked"' : "";
    }
    $ou = '<li><label><input ' . $checked .' type="checkbox" name="cats[]" value="'. $cat_object->cat_ID .'" /> ' . $cat_object->cat_name . '</label>';
   
    $childs = get_categories('parent=' . $cat_object->cat_ID);
    foreach($childs as $key => $cat) {
        $ou .= '<ul style="margin-left:12px">' . __show_category($cat, $selected_cats) . '</ul>';
    }
    $ou .= '</li>';
    return $ou;
}

Un commento a: “ ”

  1. 05 dic, 2009 Il meglio della settimana #41 | BigThink:

    [...] Very short snippet: WordPress, lista categorie con checkbox Come mostrare la liste delle categorie, affiancate da un checkbox. [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL