Aggiungi widget personalizzati per la home page

Pubblicato: 2013-02-15

Di recente ho scritto un post sulla copia dei widget della home page e sulla loro duplicazione su una specifica home page dei temi figlio di Genesis.

Questo è stato abbastanza facile perché PHP e CSS erano esattamente gli stessi tranne che per le modifiche apportate agli ID widget univoci.

Ma che ne dici di aggiungere i widget della home page da un altro tema figlio?

Mi è stata posta una domanda da un web designer su come farlo dopo aver provato e violato il codice.

Questo codice utilizza gli hook del framework del tema Genesis che puoi modificare o rimuovere a seconda del tema principale che stai utilizzando.

Diamo un'occhiata a come aggiungere 4 aree widget personalizzate dal tema Notizie al tema Blissful.

Aggiungeremo:

  • Widget in alto a casa
  • Widget sinistro e destro in primo piano
  • Widget in basso a casa

Copia il file Home.php

Il primo passo è copiare il file home.php dal tema News e cambiare tutte le istanze delle notizie in Blissful o nel tema figlio a cui stai aggiungendo i widget.

Il motivo per cui il tema figlio di News è una buona scelta è perché ha la stessa larghezza del contenuto di Blissful, quindi il CSS non dovrebbe aver bisogno di molte modifiche.

Ecco l'intero codice all'interno del nuovo file home.php.

 <?php add_action( 'genesis_meta', 'blissful_home_genesis_meta' ); /** * Add widget support for homepage. If no widgets active, display the default loop. * */ function blissful_home_genesis_meta() { if ( is_active_sidebar( 'home-top' ) || is_active_sidebar( 'home-middle-left' ) || is_active_sidebar( 'home-middle-right' ) || is_active_sidebar( 'home-bottom' ) ) { remove_action( 'genesis_loop', 'genesis_do_loop' ); add_action( 'genesis_loop', 'news_home_loop_helper' ); add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_content_sidebar' ); add_filter( 'body_class', 'add_body_class' ); function add_body_class( $classes ) { $classes[] = 'blissful'; return $classes; } } } function news_home_loop_helper() { if ( is_active_sidebar( 'home-top' ) ) { echo '<div id="home-top"><div class="border wrap">'; dynamic_sidebar( 'home-top' ); echo '</div><!-- end .border wrap --></div><!-- end #home-top -->'; } if ( is_active_sidebar( 'home-middle-left' ) || is_active_sidebar( 'home-middle-right' ) ) { echo '<div id="home-middle"><div class="border wrap">'; echo '<div class="home-middle-left">'; dynamic_sidebar( 'home-middle-left' ); echo '</div><!-- end .home-middle-left -->'; echo '<div class="home-middle-right">'; dynamic_sidebar( 'home-middle-right' ); echo '</div><!-- end .home-middle-right -->'; echo '</div><!-- end .border wrap --></div><!-- end #home-middle -->'; } if ( is_active_sidebar( 'home-bottom' ) ) { echo '<div id="home-bottom"><div class="border wrap">'; dynamic_sidebar( 'home-bottom' ); echo '</div><!-- end .border wrap --></div><!-- end #home-bottom -->'; } } genesis();

File Functions.php

Il passaggio successivo consiste nell'aggiungere il supporto per tutte e 4 le aree widget personalizzate al file functions.php dei temi figlio.

 genesis_register_sidebar( array( 'id' => 'home-top', 'name' => __( 'Home Top', 'blissful' ), 'description' => __( 'This is the home top section.', 'blissful' ), ) ); genesis_register_sidebar( array( 'id' => 'home-middle-left', 'name' => __( 'Home Middle Left', 'blissful' ), 'description' => __( 'This is the home middle left section.', 'blissful' ), ) ); genesis_register_sidebar( array( 'id' => 'home-middle-right', 'name' => __( 'Home Middle Right', 'blissful' ), 'description' => __( 'This is the home middle right section.', 'blissful' ), ) ); genesis_register_sidebar( array( 'id' => 'home-bottom', 'name' => __( 'Home Bottom', 'blissful' ), 'description' => __( 'This is the home bottom section.', 'blissful' ), ) );

Il passaggio successivo consiste nel creare nuove dimensioni dell'immagine per i widget in primo piano.

 /** Add new image sizes */ add_image_size( 'mini-thumbnail', 75, 75, TRUE ); add_image_size( 'small-thumbnail', 110, 110, TRUE ); add_image_size( 'home-middle-left', 280, 165, TRUE ); add_image_size( 'home-middle-right', 50, 50, TRUE ); add_image_size( 'home-tabs', 150, 220, TRUE );

Potresti anche aggiungere il supporto per gli involucri strutturali poiché questo non è incluso nel tema Blissful, quindi controlla per vedere a seconda del tuo tema.

 /** Add support for structural wraps */ add_theme_support( 'genesis-structural-wraps', array( 'header', 'nav', 'subnav', 'inner', 'footer-widgets', 'footer' ) );

File Style.css

E per finire, dovrai aggiungere il CSS

 /* Home Top ------------------------------------------------------------ */ #home-top { border-bottom: 1px solid #d5d5d5; overflow: hidden; } #home-top .border { border-bottom: 4px solid #eee; overflow: hidden; } #home-top .wrap { overflow: hidden; padding: 20px 25px 15px; } #home-top .ui-tabs ul.ui-tabs-nav { border-bottom: 1px dotted #ddd; margin: 10px 0; padding: 0 0 13px; } #home-top .ui-tabs ul.ui-tabs-nav li a { background-color: #f5f5f5; font-weight: bold; } #home-top .ui-tabs ul.ui-tabs-nav li a:hover, #home-top .ui-tabs ul.ui-tabs-nav li.ui-tabs-selected a { background-color: #00a7ed; color: #fff; } #home-top .ui-tabs .post { background-color: #fff; margin: 0; padding: 0; } /* Home Middle ------------------------------------------------------------ */ #home-middle { border-bottom: 1px solid #d5d5d5; overflow: hidden; } #home-middle .border { border-bottom: 4px solid #eee; overflow: hidden; } #home-middle .wrap { overflow: hidden; padding: 25px 25px 15px; } .home-middle-left { float: left; width: 290px; } .home-middle-right { float: right; width: 285px; } .home-middle-left-2 { float: left; width: 290px; } .home-middle-right-2 { float: right; width: 285px; } /* Home Bottom ------------------------------------------------------------ */ #home-bottom { overflow: hidden; } #home-bottom .wrap { overflow: hidden; padding: 20px 25px 15px; }

Allora come ti sembra adesso?

A seconda del tema che stai personalizzando, potrebbe essere necessario modificare la larghezza per i widget home centrale sinistro e destro.

Poiché questo è molto specifico del tema, dovrai elaborare questa parte da solo, ma non è davvero una grande sfida.

Così il gioco è fatto.

Un mucchio di codice ma si tratta principalmente di copiare e incollare senza bisogno di modificare, scrivere o imparare la programmazione PHP.

Tutorial correlati

  • Modello di prima pagina Genesis con barra laterale personalizzata