Lorsque bbPress était encore une installation autonome, je l'avais essayée et je n'étais pas vraiment impressionnée. Les choses étaient maladroites et cela ne fonctionnait pas toujours comme prévu. Après avoir langui pendant quelques années, Automattic a décidé de transformer bbpress en un plugin, améliorant ainsi les fonctionnalités de ce logiciel et en faisant un concurrent sérieux parmi les autres options de forum pour WordPress..
Le grand avantage de bbPress est qu’il fonctionne avec la plupart des thèmes et s’applique automatiquement à travers le CSS du thème. Il se peut que vous deviez changer quelques points ici ou là pour que tout se passe comme vous le souhaitez, mais il s’agit plutôt d’une solution prête à l’emploi. Le seul problème que j'avais était que le widget Liste de forums ne ressemblait pas vraiment à celui du forum de support bbPress.
Pour une raison quelconque, le widget Liste de forums fourni avec bbPress n'a pas le nombre de sujets. Et cela ne fonctionne pas très bien avec les catégories de forum. En fin de compte, j'ai décidé de mettre sur pied un petit plugin pour ajouter ces fonctionnalités.
Si vous avez déjà créé un plugin auparavant, vous saurez à quoi sert cette petite section:
Sinon, c'est là que vous ajoutez le nom du plugin et les informations requises pour qu'il apparaisse correctement sur la page d'administration du plugin de votre installation WordPress..
Chaque fois que vous créez un widget, vous devez étendre l’API du widget. Si cette phrase n'a aucun sens pour vous, ne vous inquiétez pas. Cela signifie simplement que vous devez mettre en place quelques éléments pour que votre widget fonctionne..
Voici à quoi ressemble le code de base de l'API du widget:
la classe BBP_Forums_Topic_Count_Widget étend WP_Widget fonction publique __construct () // processus réels du widget widget fonction publique ($ args, $ instance) // affiche le contenu du widget formulaire de fonction publique ($ instance) // affiche les options formulaire sur admin mise à jour de la fonction publique ($ new_instance, $ old_instance) // traite les options de widget à enregistrer
Ce tutoriel ne concerne pas vraiment les tenants et les aboutissants de l'API Widget. Je suggère donc de jeter un coup d'œil à l'API Widgets dans le codex WordPress..
Passons en revue le code API un bloc à la fois. Tout d'abord, vous devez ajouter quelques informations de base sur le widget:
fonction publique __construct () $ widget_ops = array ('classname' => 'bbp_forums_topic_count_widget_options', 'description' => __ ('Une liste des forums catégorisés avec leur nombre de sujets')); parent :: __ construct (false, __ ('(bbPress) Liste des forums avec nombre de sujets'), $ widget_ops);
Vient ensuite le code d'affichage indiquant comment le widget apparaîtra sur le front-end. Vous devez utiliser wp_list_pages ()
pour organiser la liste des forums classés par catégories. Vous devez également inclure un lecteur pour organiser la liste, mais j'y reviendrai un peu plus tard..
widget de fonction publique ($ args, $ instance) extract ($ args); $ title = apply_filters ('bbp_forum_widget_title', $ instance ['title']); echo $ before_widget; if (! empty ($ title)) echo $ before_title. $ titre. $ after_title; ?>
Il n'y a qu'une seule option dans le widget, le formulaire administrateur a donc besoin des éléments suivants:
formulaire de fonction publique ($ instance) $ title = empty ($ instance ['title'])? ": esc_attr ($ instance ['title']);?>
Avec une seule option d'entrée, le bloc de mise à jour nécessite simplement une vérification simple:
mise à jour de la fonction publique ($ new_instance, $ old_instance) $ instance = $ old_instance; $ instance ['title'] = strip_tags ($ new_instance ['title']); return $ instance;
Vous avez étendu l'API, vous devez maintenant vous assurer d'enregistrer le widget, sinon vous ne pourrez plus l'utiliser..
add_action ('widgets_init', function () register_widget ('BBP_Forums_Topic_Count_Widget'););
Pour vous assurer que vos forums classés apparaissent correctement dans le widget, vous devez utiliser un programme de navigation avancé. Vous avez appelé une instance de walker dans le wp_list_pages ()
fonction ci-dessus pour que vous puissiez parcourir les forums et les catégories afin de vous assurer qu'ils sont bien en place.
Je suggère de lire la classe de marcheur, car c'est un peu compliqué. Heureusement j'ai réussi à le casser pour obtenir ce dont j'avais besoin pour le plugin.
La classe Forum_List_Walker étend Walker var $ tree_type = 'page'; var $ db_fields = array ('parent' => 'post_parent', 'id' => 'ID'); function start_lvl (& $ sortie, $ profondeur = 0, $ args = tableau ()) $ indent = str_repeat ("\ t", $ profondeur); $ output. = "\ n $ indent
Le marcheur s’appuie également sur un petit conditionnel nommé forum_list_widget_has_children ()
qui vérifie si une page a des sous-pages.
function forum_list_widget_has_children ($ page_id) $ children = get_pages (array ('child_of' => $ page_id, 'post_type' => bbp_get_forum_post_type (),)); si ($ enfants) retourne vrai; sinon, retourne faux;
Il ne faut qu'un peu de CSS pour que tout se passe bien.
.forum_category_title taille de la police: 1.2em; remplissage: 5px 0 0; bloc de visualisation; poids de police: gras; .topic-count float: right; .bbp_forums_topic_count_widget_options a text-decoration: none; .bbp_forums_topic_count_widget_options ul.children padding: 0 0 0 5px; marge: 0;
Vous devez également vous assurer que vous avez accroché l'action appropriée afin d'afficher la feuille de style sur le frontal..
add_action ('wp_enqueue_scripts', 'forum_list_widget_styles'); fonction forum_list_widget_styles () wp_enqueue_style ('forum_list_widget_styles', plugins_url ('/css/style.css', __FILE__));
Si vous voulez voir toute la chatte ensemble dans un plugin, vous pouvez le télécharger ci-dessus. Installez-le et ajoutez le nouveau widget Better Forum List à votre barre latérale et vous verrez à peu près ceci:
Maintenant, votre liste sera mieux organisée et affichera le nombre total de sujets pour chaque forum..
Si vous avez des commentaires ou des remarques sur tout ce que vous avez lu ci-dessus, n'hésitez pas à en discuter ci-dessous.