Sélectionner une page

Exemple concret de Thème pour le plugin Business Directory : affichage par onglets

22 Mai 19 | code, Wordpress

Dans un précédent article je vous avais parlé du fichier theme.json.
Le fichier theme.json de votre thème Business Directory est le seul fichier obligatoire.

Mais votre thème peut contenir d’autre sortes de fichier, d’abord le fichier styles.css qui contiendra vos styles CSS pour modifier l’aspect du plugin, et pour ce qui nous intéresse aujourd’hui plus particulièrement : des fichiers javascript et/ou un fichier theme.php afin d’initialiser des routines ou des hook wordpress.

Dans cet exemple je vais vous montrer comment créer un thème BD avec un affichage en onglets pour les commentaires et le formulaire de contact de la page d’annonce seule.

Il est important de noter que pour introduire du javascript ou jQuery dans Business Directory la création d’un thème est obligatoire.

Afin que ce thème fonctionne correctement, vous devrez cocher les options « Inclure les formulaire de commentaires sur les pages annonces ? » et « Activer le formulaire de contact sur la page d’annonce ? » dans l’administration des options du Plugin Business Directory pour WordPress.

L’arborescence du thème pour Business Directory

Ici notre thème s’appelle tout simplement « onglets » donc notre dossier de départ également :

onglets/
onglets/theme.json
onglets/theme.php
onglets/thumbnail.png
onglets/assets/
onglets/assets/styles.css
onglets/assets/vendor/tabs.js
onglets/templates/
onglets/templates/single.tpl.php

Le fichier theme.json

Pour créer nos onglets nous aurons besoin d’indiquer dans le fichier theme.json que nous allons utiliser les fichiers tabs.js et styles.css pour l’apparence de nos onglets :

"assets": {     
   "css": [ "styles.css" ],     
   "js": ["vendor/tabs.js"] 
}

Nous devrons également indiquer dans le fichier theme.json que nous allons utiliser les variables de thème à un autre endroit que celui prévu à l’origine par le plugin.

Voici la liste des variables de template supportées par le plugin :

NomDESCRIPTION
contact_formCode HTML formulaire pour envoyer un message privé au propriétaire de l’annonce
commentsCode HTML liste des commentaires de l’annonce. Utilise le template comments_template().
googlemapsCode HTML pour afficher la Google Map associée à l’annonce.
reviewsCode HTML pour afficher les critiques de l’annonce et le formulaire pour poster une nouvelle critique.

Dans notre exemple, nous allons nous servir des variables contact_form et comments qui sont utilisées par la version gratuite du plugin (Alors que googlemaps et reviews sont elles utilisées par des add-on payants). Nous voulons les afficher dans des onglets sur la vue détaillée d’une annonce et donc les appeler dans le fichier single.tpl.php de notre thème :

"template_variables": {
     "single": ["comments", "contact_form"]
     }

En résumé, voici comment construire le fichier theme.json :

{
     "name": "Glink Onglets",
     "description": "Thème avec Onglets, classic et élégant",
     "version": "1.0.0",
     "author": "Glink.fr",
     "author_email": "contactez-moi@glink.fr",
     "author_url": "https://www.glink.fr",  
     "template_variables": {
     "single": ["comments", "contact_form"]
     },
     "requires": "4.0",
     "assets": {
         "css": [ "styles.css" ],
         "js": ["vendor/tabs.js"]
     },
     "suggested_fields": []
 }

Le fichier theme.php

La fonction du fichier theme.php est d’initialiser des routines ou des hook dans wordpress ou Business Directory. Actuellement 2 sortes de hook sont supportés :

  • init: appelé quand le système du thème a été initialisé.
  • enqueue_scripts: appelé quand les ressources pour la page courante sont mises en queue.

Dans notre cas nous auront besoin du fichier theme.php pour appeler le script jQuery jquery-ui-tabs qui permet d’afficher les onglets (Ce script est déjà inclus dans WordPress, il suffit de l’appeler). Voici comment construire le fichier theme.php :

<?php
 function wpbdp_themes__onglets_enqueue_scripts() {
     wp_enqueue_script( 'jquery-ui-tabs' );
 }

Notez bien la construction du nom de la fonction : wpbdp_themes__lenomdemontheme_enqueue_scripts()

Notez aussi que nous ne fermons pas la balise php à la fin du fichier.

Le fichier single.tpl.php

<?php
/**
 * Template listing single view.
 *
 * @package BDP/Templates/Single
 */

// phpcs:disable
?>	
<?php $main_links = wpbdp_main_links( $buttons ); ?>
<?php if ( $main_links ) : ?>
<div class="box-row"><?php echo $main_links; ?></div>
<?php endif; ?>

<div id="tabs">
  <ul id="tabs1">
    <li><a href="#tabs-1">Annonce</a></li>
    <li><a href="#tabs-2">Commentaires</a></li>
    <li><a href="#tabs-3">Contact</a></li>
  </ul>
		
		<div id="tabs-1">

<div id="<?php echo $listing_css_id; ?>" class="<?php echo $listing_css_class; ?>">
    <div class="listing-title">
        <h2><?php echo $title; ?></h2>
    </div>
    <?php if ( in_array( 'single', wpbdp_get_option( 'display-sticky-badge' ) ) ) : ?>
        <?php echo $sticky_tag; ?>
    <?php endif; ?>
    <?php wpbdp_x_part( 'single_content' ); ?>
    <?php
    echo wpbdp_render(
        'parts/listing-buttons', array(
			'listing_id' => $listing_id,
			'view'       => 'single',
        ), false
    );
	?>
</div>
		</div><!--Fin tabs-1-->
		<div id="tabs-2">
		<div id="comments_form">
<?php echo $comments; ?>
</div>
		</div><!--Fin tabs-2-->
	<div id="tabs-3">
	<div id="contact_form">
		<?php echo $contact_form; ?>
	</div>
	</div><!--Fin tabs-3-->
</div><!--Fin tabs_container-->	

Dans certains cas il vous faudra créer un modèle de page spécialement pour la page d’affichage de BD dans votre thème wordpress afin de ne pas afficher 2 fois les commentaires et/ou cocher l’option « Inclure les commentaires BD appelé » dans les options BD :

Le fichier styles.css

/*
Theme: Glink Onglets
Auteur: Glink.fr
Auteur URL: https://www.glink.fr/
*/


/*--------------------------------------------------------------
>>> SOMMAIRE:
----------------------------------------------------------------
# Style de la Page de l'annonce seule 
    ## Styles des onglets
--------------------------------------------------------------*/

/*--------------------------------------------------------------
# Style de la Page de l'annonce seule 
--------------------------------------------------------------*/
/*--------------------------------------------------------------
## Styles des onglets
--------------------------------------------------------------*/
#tabs1 {
    margin-top: 10px;
    margin-bottom: 0px;
    margin-left: 0px;
    margin-right: 0px;
    padding: 0 1px 0 0;
    float: left;
    list-style: none;
    height: 30px;
    border-bottom: 1px solid #ccc;
    border-left: 1px solid #ccc;
    width: 100%;
}
#tabs1 li {
   float: left;
   margin: 0;
   padding: 0;
   height: 29px;
   line-height: 29px;
   border-left: none;
   overflow: hidden;
   position: relative;
   background: #e9e5e6
}
#tabs1 li a {
   text-decoration: none;
   display: block;
   font-size: 14px;
   padding: 0 20px
}
#tabs1 li a:hover {
   background: #ccc;
}
.ui-tabs {
   position: relative;
}
.ui-tabs .ui-tabs-nav {
   margin: 0
}
.ui-tabs .ui-tabs-nav li {
   float: left;
   margin: 0;
   padding: 0;
   border: 1px solid #ccc;
   border-left: none;
   overflow: hidden;
   position: relative;
   background: #ddd
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
   float: left;
   text-decoration: none;
   padding: 0 10px
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
   padding-bottom: 1px;
   border-bottom: 1px solid #fff;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
   cursor: text;
   background: #fff;
}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
   cursor: pointer
}
.ui-tabs .ui-tabs-panel {
   display: block;
   border: 1px solid #ccc;
   border-top: none;
   overflow: hidden;
   clear: both;
   float: left;
   width: 100%;
   margin: 0 0 20px 0;
   padding: 0;
   background: #fff;
   color: #251514 !important;
}

.ui-tabs .ui-tabs-panel a{
   color: #8a7876 !important;
}
#comments_form, #contact_form{
   padding: 10px;
}

Notez que je ne partage avec vous que le CSS des onglets.

Le fichier tabs.js

jQuery(document).ready(function($) {
$('#tabs').tabs();

//hover states on the static widgets
$('#dialog_link, ul#icons li').hover(
function() { $(this).addClass('ui-state-hover'); },
function() { $(this).removeClass('ui-state-hover'); }
);
});

Exemple de rendu HTML

Téléchargez le thème Onglets

TELECHARGEZ ICI GRATUITEMENT LE THEME BD ONGLETS

Conclusion

À présent, vous savez comment incorporer du javascript ou des fonctionnalités jQuery à votre thème Business Directory.

N’hésitez pas à me contacter si vous avez des questions.

Vous avez des questions à propos de cet article ? Besoin d'aide sur un autre sujet ? Contactez-moi, je pratique des prix vraiment compétitifs et je réponds généralement rapidement