Supporto » Aspetto = Temi » best practices per i widget in temi custom

  • Risolto gianlucab90

    (@gianlucab90)


    Salve,
    sto sviluppando un tema custom da zero. Volevo aggiungere dei widget, anche gli stessi che ci sono ma con alcune funzionalità in più. Volevo sapere qual’è la via migliore.
    Devo per forza sporcare il file functions.php ? Posso fare a meno di fare un plugin, visto che il tema lo sto facendo io, basandomi su _s ?
    Grazie per le risposte

Stai visualizzando 8 risposte - dal 1 al 8 (di 8 totali)
  • Moderatore Guido Scialfa

    (@wido)

    Ciao @gianlucab90,

    Sicuramente l’opzione migliore è quella di scrivere un plugin perchè ti permette di poter dividere la parte presentazionale (il tema) da quella logica (i widgets), secondariamente se scrivi bene almeno le basi ti permette con il tempo di poter aggiungere sempre più widgets e diverrebbe una tua libreria personale (questo ovviamente se ne hai interesse) da usare in altri progetti e magari condividere via github :).

    Se però vuoi comunque inserire il codice come parte integrante del tema, magari invece di definire le classi dentro al file function perchè non creare una directory per esempio in _s/inc/widgets/ al cui interno vai ad inserire le classi dei widgets da richiamare dentro la funzione agganciata appositamente in functions.php?

    Esempio:

    
    /* 
     * In functions.php definisco la hook per registrare i widgets.
     * Considerando che i tuoi files abbiano lo stesso nome della classe
     * 
     * inc/widgets/Mio_Widget.php => class Mio_Widget
     *
     * Quindi la directory sarà
     * 
     * _s/inc/widgets/Mio_Widget.php
     * _s/inc/widgets/Altro_Widget.php
     * etc.... 
     */
    add_action('widgets_init', function(){
        $widgets = glob( get_template_directory() . '/inc/widgets/*.php');
    
        foreach($widgets as $widgetClassName) {
            register_widget(basename($widgetClassName, '.php'));
        }
    });
    

     

    Se vuoi optare per il plugin, vi sono dei buoni boilerplate di partenza vedi https://github.com/DevinVinson/WordPress-Plugin-Boilerplate che è molto conosciuto.

    Chi ha creato la discussione gianlucab90

    (@gianlucab90)

    Grazie mille!!
    Era la risposta che cercavo. Questo snippet php era la soluzione che cercavo.
    Grazie anche per il link boilerplate

    Chi ha creato la discussione gianlucab90

    (@gianlucab90)

    
    Fatal error: Uncaught Error: Class 'Dopetrope_Social_Widget' not found in /srv/www/wordpress-develop/src/wp-includes/class-wp-widget-factory.php:106 Stack trace: #0 /srv/www/wordpress-develop/src/wp-includes/widgets.php(113): WP_Widget_Factory->register('Dopetrope_Socia...') #1 /srv/www/wordpress-develop/src/wp-content/themes/dopetrope/functions.php(241): register_widget('Dopetrope_Socia...') #2 /srv/www/wordpress-develop/src/wp-includes/class-wp-hook.php(298): {closure}('') #3 /srv/www/wordpress-develop/src/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters(NULL, Array) #4 /srv/www/wordpress-develop/src/wp-includes/plugin.php(453): WP_Hook->do_action(Array) #5 /srv/www/wordpress-develop/src/wp-includes/widgets.php(1474): do_action('widgets_init') #6 /srv/www/wordpress-develop/src/wp-includes/class-wp-hook.php(298): wp_widgets_init('') #7 /srv/www/wordpress-develop/src/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters(NULL, Array) #8 /srv/www/wordpress-develop/src/wp-includes/plugin.php(453): WP_Hook->do_ in /srv/www/wordpress-develop/src/wp-includes/class-wp-widget-factory.php on line 106

    Mi da questo errore

    Moderatore Guido Scialfa

    (@wido)

    @gianlucab90 colpa mia che ho dimenticato il require:

     
    add_action('widgets_init', function(){
        $widgets = glob( get_template_directory() . '/inc/widgets/*.php');
    
        foreach($widgets as $widgetClassName) {
            // Includo il file php contenente la classe.
            require_once get_template_directory() . '/inc/widgets/' . $widgetClassName . '.php';
            register_widget(basename($widgetClassName, '.php'));
        }
    });
    
    Chi ha creato la discussione gianlucab90

    (@gianlucab90)

    infatti io ho risolto cosi `/**
    * include Widget Files
    */
    require( get_template_directory() . ‘/inc/widgets/dopetrope_social_widget.php’ );`
    e messo l’hook dentro al file …widget.php

    • Questa risposta è stata modificata 6 anni fa da gianlucab90.
    Chi ha creato la discussione gianlucab90

    (@gianlucab90)

    e poi il tuo codice è sbagliato perchè $widgetClassName contiene già il percorso nn c’è bisogno che richiami get_template_directory()

    Moderatore Guido Scialfa

    (@wido)

    Ah vero 🙂 ottimo.

    Chi ha creato la discussione gianlucab90

    (@gianlucab90)

    Grazie, sono in debito di una beer

    • Questa risposta è stata modificata 6 anni fa da gianlucab90.
Stai visualizzando 8 risposte - dal 1 al 8 (di 8 totali)
  • Il topic ‘best practices per i widget in temi custom’ è chiuso a nuove risposte.