BP My Home tricks !

Publié le

par

Dans son forum BuddyPress, dans son forum WordPress et dans les commentaires de ce blog, il m’a été demandé comment réaliser des adaptations du plugin BP My Home afin de « hacker » son comportement pour répondre à d’autres besoins que ceux qui sont prévus « out of the box ».

Comme mes réponses sont légèrement éparpillées, j’ai pensé que les réunir ici pourrait vous intéresser.

Ajouter un WordPress Sidebar Widget dans BP My Home

Dans le functions.php de votre thème actif, ajouter les lignes suivantes

register_sidebars( 1, array(
    'name'          => 'imath-bpmh-first',
    'before_widget' => '<div id="%1$s" class="widget %2$s">',
    'after_widget'  => '</div>', 
    'before_title'  => '<h3 class="widgettitle">',
    'after_title'   => '</h3>'
) );

Ensuite, BPMH contient un widget exemple pour permettre de coder ses propres widgets, il suffit donc de le modifier en remplaçant la fonction de display du BPMH widget par celle-ci :

function bpmh_example_widget_display() {
   dynamic_sidebar( 'imath-bpmh-first' );
}

Enfin, il ne vous reste plus qu’à vous rendre sur l’Admin WordPress > Apparence > Widgets et glisser le WordPress sidebar widget voulu dans la dynamic sidebar « imath-bpmh-first« .

Attention cependant, si vous souhaitez ajouter plusieurs WordPress sidebar widgets dans des BPMH widgets différents, il faudra cloner le BPMH widget ‘example’ en changeant pour chacun d’entre eux les éléments en gras ci-dessous et en enregistrant autant de nouvelles dynamic sidebars.

<?php
/**
 * bpmh widget name: nom du widget
 * bpmh widget function: prefix_function
 * bpmh widget column: 1 bpmh widget 
 * URI: http://example.com/widget_page 
 * bpmh widget Description: Example of Widget. 
 * bpmh widget Author: Mr Example 
 * bpmh widget Author URI: http://example.com/
 */

/** 
 * Box header and config link
 */
function prefix_function_dragbox_title() {
    echo 'nom du widget';
}

/**
 * main function called by BP My Home
 */
function prefix_function_widget_display(){
   dynamic_sidebar( 'nouvelle-dynamic-sidebar' );
}

Personnaliser le template de la page des BPMH widgets

Dans votre thème actif, créez le répertoire my-home-tpl puis copiez le fichier /wp-content/plugins/bp-my-home/includes/templates/my-home-tpl/my-home.php et collez le dans le répertoire que vous venez de créer. Vous pouvez maintenant adapter le fichier my-home.php depuis votre thème, c’est ce fichier qui sera affiché par votre site et non plus celui de l’extension.

Pour illustrer et répondre en passant au commentaire de @LSM : imaginons que je veuille ajouter un raccourci vers la création de groupe si un utilisateur dispose d’un xprofile BuddyPress particulier. Je rajoute donc depuis l’admin WordPress – menu BuddyPress – sous menu config. des Profils un nouveau champ que j’appelle « community role » et qui sera un menu déroulant ayant pour valeurs « subscriber » et « community-manager ».
Ensuite je modifie le template my-home.php de mon thème en ajoutant au-dessus de la fonction bp_my_home_load_widgets ce code :

<?php if ( xprofile_get_field_data( 'community role', bp_current_user_id() ) == 'community-manager'): ?>
    <div id="menu-additionnel" style="margin-bottom:10px">
        <a class="button" href="<?php echo bp_get_root_domain() . '/' . BP_GROUPS_SLUG . '/create/' ?>">
            <?php _e( 'Create a Group', 'buddypress' ) ?>
        </a>
    </div>
<?php endif; ?>

Désormais, à chaque fois qu’un membre affiche sa page de BPMH widgets et que son « community role » xprofile est community-manager, alors, il dispose d’un lien pour créer un groupe.

Changer le style des dragboxes des BPMH Widgets

Par défaut, le style chargé par l’extension est contenu dans ce fichier /wp-content/plugins/bp-my-home/style.css. Pour changer par exemple la couleur du header des widgets et l’image du collapse, direction le functions.php de votre thème actif pour rajouter ces quelques lignes de codes :

<?php
function load_bpmh_custom_style() {
    global $bp;
    
    if ( $bp->current_component == BP_MYHOME_SLUG ) {
        ?>
        <style>
            .column .dragbox {
                border: 1px solid #84C9E4;
            }
            .column .dragbox h2 {
                background: #84C9E4;
                color: #FFF;
            }
            .handle_div h2.collapse {
                background: #84C9E4 url('<?php echo get_bloginfo( 'stylesheet_directory' );?>/images/votre-image.png') no-repeat top right;
                background-position: 3px;
            }
        </style>
        <?php
    }
}
add_action( 'wp_head','load_bpmh_custom_style' );

Si vous voulez changer plus d’élément au style, il suffit de récupérer les éléments à personnaliser depuis la feuille de style de l’extension et d’ajouter vos nouveaux réglages.

Voici une illustration de ces 3 tricks combinés ci-dessous :

Illustration des tricks précédents

Masquer la possibilité de définir la page des BPMH widgets comme accueil principal du site

Par défaut, le plugin laisse la possibilité aux membres de définir leur page de widgets comme accueil du site. Pour retirer cette option, il suffit d’ajouter une nouvelle fonction dans le functions.php de votre thème actif.

<?php
function hide_bp_my_home_set_as_home() {
    global $bp;
    
    if ( $bp->current_action == 'my-settings' ) {
        ?>
        <script type="text/javascript">
            jQuery( '#user_home_page' ).parents( 'tr' ).hide();
        </script>
        <?php
    }
}
add_action( 'wp_footer','hide_bp_my_home_set_as_home' );

Voilà ! à vous de hacker le plugin maintenant 😉

6 réponses à “BP My Home tricks !”

  1. Avatar de lsm

    ouf !
    je croyais que t’allais jamais arriver au bout.
    j’en ai au moins pour deux nuits de boulot.
    merci bcp pour ce merveilleux outil
    a+

  2. Avatar de caramel
    caramel

    Bonjour,

    C’est un plugin formidable!

    Il y a longtemps que je voulais avoir cette fonction pour les utilisateurs, mais je ne savais pas comment faire!!:)

    Serait-il possible d’afficher les « thumbnails » des postes avec le titre du post a coté?

    Et peut on annuler la partie de configure des widgets?
    Je voudrais que les gens se servent de bookmark buttons seulement, ça risque d’etre un peu compliqué pour un utilisateur average.

    Merci d’avance pour votre aide!

  3. Avatar de imath

    Bonsoir @caramel,

    Figures-toi que @georglob a créé un widget qui va à mon avis t’intéresser pour la première partie de ton commentaire :
    il est disponible ici : http://glob.bargeo.fr/fr/web/wordpress/un-widget-lasts-posts-pour-le-plugin-bp-my-home-de-budypress/

    Ensuite pour la seconde partie, tu as 2 choix :
    – soit revoir individuellement le code source des widgets et mettre en commentaire les fonctions qui se terminent par _dragbox_config_link
    Les widgets sont dans /wp-content/plugins/bp-my-home/widgets/nom_widget/nom_widget.php
    – soit tout neutraliser d’un coup en éditant /wp-content/plugins/bp-my-home/includes/bp-my-home-core.php en supprimant les lignes 204 à 208 puis 228 à 232.

    Merci pour ton commentaire et à plus 😉

  4. Avatar de caramel
    caramel

    Merci beaucoup pour ton aide!

    a+

  5. Avatar de caramel
    caramel

    Bonsoir,

    J’ai encore une petite question:

    Serait il possible d’afficher les thumbnails des bookmarks dans la section my bookmarks?

    Merci d’avance!

    1. Avatar de imath

      Bonjour,

      Intéressant. Dans l’absolu tout est possible. Le seul frein que je vois est que cela obligerai à faire un fopen ou utiliser curl pour récupérer le code source de la page mise en favori si celle-ci est externe au réseau de blog. Or certains hébergeurs n’activent pas forcément ces fonctions. Je ferai des tests.
      Merci pour ton commentaire.
      A+