Expérimentations WordPress..

Pas mal débordé en ce moment avec mon nouveau taf ! Mais ce matin c bizarre je me suis levé aux aurores.. Après avoir errer sur delicio.us sur mon iphone, je prends quelques secondes pour partager les expérimentations wordpress que je réalise actuellement afin de « construire » un site intranet.

L’objectif de ce site est de proposer du contenu classique (descendant web 1.0 😉 ), une boîte à idées pour valoriser l’innovation participative et une zone réservée pour les membres ++ de ma direction.

Alors, tout d’abord il faut se mettre dans le contexte de ma boîte :
IE6, outlook v2000 (ces deux données de départ poseront problème pour la syndication RSS du site..), windows XP bridé et proxy interdisant tout lien vers les hébergeurs de contenus vidéo !! Etant donné que je développe des applis flex c difficile de proposer des tutos vidéos 🙁 Dommage. Mais je penses trouver prochainement la solution soit en utilisant python ou curl..

Revenons à nos moutons. La raison du choix de wordpress plutôt que joomla ou drupal : la communauté de développeurs, la simplicité/ergonomie de l’admin, ma furieuse envie de proposer une possibilité d’interactions avec les intranautes grâce aux commentaires. J’ai donc d’abord conçu mon thème : ce qui n’a pas été une mince affaire dans la mesure où je suis vraiment très mauvais en design (en passant merci à iconfinder, mais objectivement je ne suis pas mécontent du résultat. Du coup je me suis plongé dans le « loop » wordpress et en ce moment je m’attaque aux hooks 😉

J’utilise des pages la plupart du temps pour afficher des informations + ou – statiques tout en loopant sur des posts pour donner la possibilité aux contributeurs d’avoir des news affichées dans leurs pages. Ensuite j’ai voulu donné un accès légèrement différent à l’information par rapport à ce qui se fait dans la galaxie intranet de ma boîte. La plupart des sites proposent des navigations avec des dropdown menus et j’ai pensé qu’un moteur de recherche en page d’accueil serait plus efficace. Du coup j’ai réduit la navigation à outrance (3 onglets pour les 3 divisions de ma direction dont la mienne « Innovations »).

Moteur de Recherche sous WP (mes plugins) :

Au début j’ai commencé avec Search Everything et wp-pagenavi (pour remplacer la navigation wordpress sous forme de previous posts/next posts par une sous forme de nombre de pages..). Mais l’association des deux ne m’a pas convenu dans la mesure où je ne sais pour quelle raison il était systématiquement rajouté une page ne contenant aucun résultat !
Du coup j’ai changé la navigation pour wp-paginate et comme ça ne résolvait pas le souci, j’ai opté pour le plugin Search Unleashed qui présente en plus l’avantage de garder un log des recherches effectuées sur le site > impec pour les analyses 😉 Bon j’ai légérement modifié le loop et introduit qqes <?php if(condition):?> <?php elseif:?> <?php endif;?> afin de proposer des recherches par catégorie et afficher des résultats avec des css différents..

Boîte à idée sous WP (mes plugins) :

En fait y a pas 36 solutions pour permettre à des intranautes non membres de publier des posts > tdo mini forms. Ensuite pour pimenter le tout sans trop alourdir j’ai opté pour vote-it-up qui permet d’utiliser les intranautes pour filtrer les meilleures idées : celles qui auront le plus de votes..

Zone Membres sous WP (mon plugin) :

Au début j’ai utilisé Role Scoper qui est un outil très puissant pour gérer les contenus à diffuser à des groupes de membres. Cependant je suis vite revenu en arrière du fait qu’il est tellement puissant qu’il entrait en conflit avec mon précédent besoin (boîte à idées). En effet, si la personne n’est pas loggée elle ne peut pas choisir la catégorie de son post, systématiquement la catégorie par défaut est enregistré -> c plutôt chiant. J’ai cherché à modifier le code mais ça m’a vite pris la tronche, donc après une nouvelle recherche sur le répertoire des plugins je me suis intéressé à wp-sentry. Lui aussi propose la création de groupe mais autrement plus simplement lol !! Le seul truc c que le filter des pages nécessite par défaut l’utilisation d’une « widgetized » sidebar. Ce qui n’est pas mon cas. J’ai donc ajouter une nouvelle fonction filter de wp_list_pages() dans le plugin pour coller à mon besoin. Du coup, le lien vers la page s’affiche uniquement si l’utilisateur est loggé et s’il appartient à un groupe disposant des droits pour y accéder 😉

En vrac autres plugins WP :

Pour rendre encore plus proche ce moteur de blog d’une solution CMS je vous conseille par ailleurs les plugins suivants :

  • Yoast Breadcrumbs : pour disposer d’un fil d’ariane dans votre header
  • Popularity contest : pour aiguiller vos intranautes vers les contenus les plus appréciés et disposer accessoirement de stats dans votre admin
  • YARPP : pour afficher des articles en relation avec celui lu par votre visiteur
  • Dowload monitor : pour disposer d’un espace de dlds de fichier et des stats de téléchargements par fichier

Voilà pour conclure, la rédaction de ce post m’a pris plus de temps que prévu, du coup comme d’habitude je vais une nouvelle fois arriver en retard au bureau ! Bonne semaine à tous..

17 commentaires sur “Expérimentations WordPress..

  1. Super ! merci pour ces idées et recherches de plugins, j’en cherchais certains justement du même genre… il est vrai que même si worpdress n’est pas en soi un cms, il fait de plus en plus reculer le moment où l’on passe à un Drupal ou Joomla pour certains projets..

  2. Ping : | Owni.fr
  3. Si je pense que c’est faisable, je me demande quand même si la communauté Drupal n’est pas plus forte que celle de WordPress. Mais le ticket d’entrée pour WP est plus faible … mais techniquement il est plus limité (faut l’avouer quand même).

    Curieux de voir où ça va aboutir.

  4. Hello.
    Merci pour ce petit post de partage d’info. Reculer le plus tard possible pour passer à Drupal ou Joomla….
    2 belles usines à gaz (surtout Joomla!) mais WP est tellement malléable et flexible si on injecte un peu de code en plus!

    Je cherche un plugin ou un système pour monétiser le blog de certains de mes projets clients, une idée ???
    Merci
    walter

    1. Salut Walter,

      WP est vraiment pas mal effectivement. Concernant ta recherche je ne comprends pas bien « monétiser » :
      si c’est mettre de la pub sur le site > google adsense est à mon avis une bonne solution.
      s’il s’agit de mettre en place une offre de produit/service j’ai lu ça dernièrement peut-être que ça vaut le coup mais sans garantie de ma part car g pas testé :
      http://www.instinct.co.nz/e-commerce/

      Merci pour ton commentaire 😉
      ++

  5. Super l’article. J’ai le même problème que toi avec wp-sentry mais étant novice je n’arrive pas et surtout ne sais pas ce qu’il faut modifier pour pouvoir afficher les pages autorisées dans la barre. Si j’autorise tous le monde les pages s’affichent mais dès que je mets des restrictions, la page ne s’affiche plus dans le menu. Merci de ta réponse.
    cordialement
    Fabrice

    1. Merci Fabrice 😉
      En fait j’ai créé une fonction pageRestrict pour remplacer le filter qu’ajoute wp-sentry sur wp_list_pages(). Dans plugins/wp-sentry/sentry-widgets.php, ajouter les lignes suivantes :
      function in_arrayKill($arrPages){
      $ind =-1;
      for($i=0;$ipost_status == »private ») $ind=$i;
      }
      return $ind;
      }
      function getUserGroup($userid,$postid){
      global $wpdb;
      $auth = false;
      //inspection meta du post/page
      $reqGroups = « SELECT meta_value FROM {$wpdb->postmeta} WHERE post_id=’$postid’ AND meta_key=’sentry_groups' »;
      $reqGroupsOk = $wpdb->get_results($reqGroups);
      $arrGrps = $reqGroupsOk[0]->meta_value;
      //inspection granted access
      $reqUsers = « SELECT member_list FROM wp_sentry_groups WHERE id IN (‘$arrGrps’) »;
      $reqUsersOk = $wpdb->get_results($reqUsers);
      foreach($reqUsersOk as $User){
      $arraySrc = explode(« , »,$User->member_list);
      if(in_array($userid,$arraySrc)) $auth = true;
      }
      return $auth;
      }
      function pageRestrict($args, $instance,$parent) {
      global $wpdb, $WP_SENTRY;
      global $current_user;
      $title = empty( $instance[‘title’] ) ? __( ‘Pages’ ) : $instance[‘title’];
      $sortby = empty( $instance[‘sortby’] ) ? ‘menu_order’ : $instance[‘sortby’];
      $exclude = empty( $instance[‘exclude’] ) ?  » : $instance[‘exclude’];
      if ( $sortby == ‘menu_order’ ) {
      $sortby = ‘menu_order, post_title’;
      }

      $visible_pages_q = « SELECT * FROM {$wpdb->posts} WHERE post_type=’page’ AND !FIND_IN_SET(ID, ‘$exclude’) AND post_parent=’$parent’ AND ( » . $WP_SENTRY->query_mod(« {$wpdb->posts}.post_status = ‘publish' ») . « ) ORDER BY $sortby »;
      $visible_pages = $wpdb->get_results($visible_pages_q);
      if(!is_user_logged_in() && in_arrayKill($visible_pages)!=-1){
      unset($visible_pages[in_arrayKill($visible_pages)]);
      }
      elseif(is_user_logged_in() && in_arrayKill($visible_pages)!=-1){
      if(!getUserGroup($current_user->ID,$visible_pages[in_arrayKill($visible_pages)]->ID)) unset($visible_pages[in_arrayKill($visible_pages)]);
      }
      if ( count($visible_pages) > 0 ) {
      global $wp_query;
      if ( is_page() ) {
      $current_page = $wp_query->get_queried_object_id();
      }
      $out .= walk_page_tree($visible_pages, 0, $current_page, array(‘title_li’ =>  », ‘echo’ => 0, ‘sort_column’ => $sortby));
      }

      $out = apply_filters(‘wp_list_pages’, $out);
      if ( !empty( $out ) ) {
      ?>

      <?php
      }
      }

      Puis dans ton sidebar.php ou autre template de page :
      à la place de wp_list_pages() utiliser pageRestrict()

      Moi j’affiche uniquement les pages enfantes à d’autres pages donc ça donne :
      ?<?php
      if(!$post->post_parent){
      $children = pageRestrict(« title_li=&child_of= ».$post->ID. »&echo=0″,0,$post->ID);
      }else{
      $children = pageRestrict(« title_li=&child_of= ».$post->post_parent. »&echo=0″,0,$post->post_parent);

      if($post->ancestors)
      {
      $ancestors = end($post->ancestors);
      $children = pageRestrict(« title_li=&child_of= ».$ancestors. »&echo=0″,0,$ancestors);
      }
      }
      if ($children) { ?>
      <ul>
      <?php echo $children;>
      </ul>
      <?php } ?>

      Voilà 😉

  6. Bonsoir
    Tout dabord merci pour ce retour d’expérience.
    J’ai essayé WP Sentry qui correspond exactement à mes besoins… sauf que les pages ne sont plus visible une fois la restriction attribuée à un groupe.
    J’ai essayé le code que tu as donné ci dessus mais sans succès. Soit il manque quelque chose, soit je le copie/colle pas au bon endroit dans la page sentry-widgets.php (je ne maitrise pas le PHP).
    Merci pour ton aide
    Cordialement
    Jérôme

    1. il y a effectivement une erreur dans le code, dans la mesure où je ne loop pas sur la longueur de « $visible_pages » et du coup ça n’affiche qu’une « restricted page ». En fait ce code ne te sera pas d’une grande utilité. L’objectif du widget sentry est d’ajouter un filtre à wp_list_pages() dans l’appel généralement fait du fichier sidebar.php de sorte à n’afficher les restricted pages que si un membre du groupe est connecté.
      En fait tu souhaite que malgré la restriction les liens vers les pages soient toujours visibles si je comprends bien. Dans l’admin, regarde les options de wp-sentry, tu dois pouvoir afficher des extraits à tous les utilisateurs.

Les commentaires sont fermés.