var Phenix = function () {
Troll du Web depuis 1996

Web dev

Truc, astuces et tuto sur le CMS SPIP ou sur le développement web en général.

Executer du code lorsqu’un utilisateur ce connecte sous SPIP

J’avais besoin d’exécuter un peu de code lorsqu’un utilisateur ce connecte à SPIP. Il y a un moyen assez simple de le faire : dans le traiter du formulaire login.

La connexion de l’utilisateur ce fait dans la partie vérifier du formulaire CVT. Cela veut dire que la session a été créé.

  1. function prefix_formulaire_traiter($flux) {
  2.  
  3.         if ($flux['args']['form'] == 'login') {
  4.                 // Coder ici
  5.         }
  6.  
  7.         return $flux;
  8. }

Bien entendu je préfèrerai avoir un pipeline post_login, ce serai plus simple et plus lisible dans le code.
Cela viendra peut-être avec SPIP 3.2 !


Executer du code lorsqu’un inscription est validée sous SPIP

Ou comment avoir un pipeline post_inscription

Dans SPIP, il n’y a pas de pipeline post_inscription. Difficile donc d’exécuter facilement du code lorsque l’inscription est validé par l’utilisateur. Cela va peut être changé avec SPIP 3.2.

En attendant, voici un bricolage avec le pipeline post_edition :

  1. function prefix_post_edition($flux) {
  2.  
  3.     // Confirmation d'une inscription
  4.     if ($flux['args']['table'] == 'spip_auteurs'
  5.         and $flux['args']['statut_ancien'] == 'nouveau'
  6.         and $flux['args']['action'] == 'instituer'
  7.         and $flux['data']['statut'] == '6forum' ) { // Limité aux visiteurs
  8.         $id_auteur = $flux['args']['id_objet'];
  9.         // Faire des trucs ici.
  10.     }
  11.  
  12.     return $flux;
  13. }

Activer un thème Wordpress enfant sans perdre la configuration du thème parent

Quand on active un thème Wordpress enfant, après avoir configuré le thème parent, on perd soudainement la configuration.
C’est relativement agaçant, Wordpress devrait faire une fusion des deux configurations et non pas ignorer la configuration du thème parent.

En attendant que les développeurs de Wordpress ce réveil, il est possible de dupliquer la configuration.
Il faut chercher dans la table wp_options la valeur :

theme_mods_NomDuTheme

Et copier le contenu (un tableau sérialisé) dans la valeur :

theme_mods_NomDuThemeEnfant

Cela évite d’avoir à tout refaire, mais franchement, faut le savoir !


Afficher le fichier template utilisé par Wordpress

Souvent, quand on récupère le Wordpress d’un client avec 1 zillions de plugins et un thème « premium theme forest », c’est souvent la merde pour savoir quel fichier édités pour ajouter le bouton de partage Facebook.

Wordpress, dans un soucis d’épurer le code, ne possède pas de méthode « mode inclure » comme SPIP, c’est bien dommage.

Heureusement, on peut en bricoler un dans function.php :

  1. <?php
  2. add_action('wp_head', 'show_template');
  3. function show_template() {
  4.         global $template;
  5.         print_r($template);
  6. }

Cela va afficher le fichier template utilisé par Wordpress dans l’en-tête de toutes les pages du site.

C’est pas la panacée mais ça aide un peu.

Voir en ligne : Which template page is being used ?

Récupérer l’ID d’un post Wordpress depuis le post_name

Une petite fonction Wordpress pratique quand on travaille avec des pages qui ont un layout spécifique. Le nom est souvent plus parlant et moins limité que l’ID du post/page.

  1. <?php
  2. /**
  3.  * Récupère l'ID d'un post en fonction de son post_name
  4.  *
  5.  * @param string $post_name
  6.  * @access public
  7.  * @global objet $wpdb
  8.  * @return int
  9.  */
  10. function get_page_id_by_name( $post_name ) {
  11.         global $wpdb;
  12.  
  13.         $key_cache = 'id_post_'.$post_name;
  14.         $id = wp_cache_get( $key_cache );
  15.  
  16.         if ( ! $id ) {
  17.                 $id = $wpdb->get_var(
  18.                         $wpdb->prepare(
  19.                                 'SELECT ID FROM '.$wpdb->posts.' WHERE post_name = %s',
  20.                                 $post_name
  21.                         )
  22.                 );
  23.                 wp_cache_set( $key_cache, $id );
  24.         }
  25.  
  26.         return $id;
  27. }