Supporto » Aspetto = Temi » best practices per i widget in temi custom
best practices per i widget in temi custom
-
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
-
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.
Grazie mille!!
Era la risposta che cercavo. Questo snippet php era la soluzione che cercavo.
Grazie anche per il link boilerplateFatal 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
@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')); } });
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 7 anni, 7 mesi fa da gianlucab90.
e poi il tuo codice è sbagliato perchè $widgetClassName contiene già il percorso nn c’è bisogno che richiami get_template_directory()
Ah vero 🙂 ottimo.
Grazie, sono in debito di una beer
- Questa risposta è stata modificata 7 anni, 7 mesi fa da gianlucab90.
- Il topic ‘best practices per i widget in temi custom’ è chiuso a nuove risposte.