WordPress: envoyer un e-mail à chaque nouvel article publié

Voici une fonction permettant d’envoyer un e-mail à chaque nouvel article publié:

function set_contenttype($content_type){
  return 'text/html';
}

function email_members($post_ID)  {

  $notifyTo = 'mail@example.org';//comma separated
  $optionName = "email_members_notifications";

  $var = get_option($optionName , null );

  $emailMembersNotifications= array();
  if($var != null){
    $emailMembersNotifications = explode(';',$var);
  }

  if(!in_array($post_ID,$emailMembersNotifications)){
    add_filter('wp_mail_content_type','set_contenttype');
    $post = get_post($post_ID);




    $message = '<html lang="fr">
                <head>
                    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">

                </head>
                <body>
                Bonjour,<br/>
                Un nouvel article a été publié sur le site <a href="'.get_bloginfo('url').'">'.get_bloginfo('url').'</a>.<br/>
                Pour le consulter, merci de cliquer sur le lien suivant:<br/>
                <a href="'.$post->guid.'">'.get_the_title($post_ID).'</a>
            </body>
        </html>';

    if(wp_mail(
        $notifyTo,
        '[MON-BLOG] Nouvel article: '.html_entity_decode(get_the_title($post_ID), ENT_COMPAT, 'UTF-8'),
        $message)){
      $emailMembersNotifications[] = $post_ID;
    }


    if(!empty($emailMembersNotifications)){
      if(!get_option($optionName)){
        add_option( $optionName, implode(';',$emailMembersNotifications) );
      } else {
        update_option( $optionName, implode(';',$emailMembersNotifications) );
      }
    }
  }
  return $post_ID;
}

add_action('publish_post', 'email_members');

Cette fonction est à placer dans le fichier functions.php de votre thème (wp-content/themes/[VOTRE-THEME]/functions.php)

5 réflexions au sujet de « WordPress: envoyer un e-mail à chaque nouvel article publié »

  1. Bonjour, merci pour cette fonction qui pourait m’être très utile. Je voulais tout de même savoir si il était possible d’envoyer par email le titre et le contenu de chaque nouvel article ? De plus est-il possible de définir une catégorie spécifique d’article à envoyer ?

    Paul

    • Bonjour, voici une modification de la fonction email_on_post qui permet de choisir les articles qui appartiennent à certaines catégories:

      function email_on_post($post_ID)  {
       
          $notifyTo = 'mail@example.org';//comma separated
       
          $optionName = "email_on_post";
          $emailOnPostNotifications = explode(';',get_option($optionName , null ));
      
          if(!in_array($post_ID,$emailOnPostNotifications)){
              add_filter('wp_mail_content_type',create_function('', 'return "text/html";'));
              $post = get_post($post_ID);
              
              $catToInclude = array(4,3);//id des catégories à inclure
       		foreach(wp_get_post_categories($post_ID) as $catId){
       			if(in_array($catId,$catToInclude)){
      	 			
      	        	wp_mail(
      	            $notifyTo,
      	            '[MON-BLOG] Nouvel article: '.html_entity_decode(get_the_title($post_ID), ENT_COMPAT, 'UTF-8'),
      	            '
      	                
      	                    
      	                
      	                
      	                Bonjour,
      Un nouvel article a été publié sur le site '.get_bloginfo('url').'.
      Pour le consulter, merci de cliquer sur le lien suivant:
      guid.'">'.get_the_title($post_ID).' '); $emailOnPostNotifications[] = $post_ID; if(count($emailOnPostNotifications) < 1){ update_option( $optionName, implode(';',$emailOnPostNotifications) ); } else { add_option( $optionName, implode(';',$emailOnPostNotifications) ); } break; } } } return $post_ID; }

      Pour récupérer le titre et le contenu de l'article utilisez respectivement la fonction get_the_title($post_ID) et $post->post_content

  2. Bonjour,

    Je pose peut être une question bête mais je ne trouve pas comment placer la fonction pour recevoir un mail à chaque article publié. Je n’arrive pas à trouver ou intégrer le fichier Php

    • Bonjour, le bout de code de cet article est à placer dans le fichier functions.php de votre thème WordPress. Par exemple à la toute fin de ce fichier.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Magento 1.4.2.0 et tracking e-commerce Google Analytics

Dans la version 1.4.2.0 de Magento, le tracking e-commerce de Google Analytics ne fonctionne pas correctement : le détail des transactions ne remonte pas sur Google Analytics.

Pour résoudre le problème, il faut modifier le fichier app/code/core/Mage/GoogleAnalytics/Block/Ga.php  de votre installation Magento.

Voici la fonction _getPageTrackingCode présente dans la version 1.4.2.0 :

    
protected function _getPageTrackingCode($accountId)
{
    $optPageURL = trim($this->getPageName());
    if ($optPageURL && preg_match('/^\/.*/i', $optPageURL)) {
        $optPageURL = "'{$this->jsQuoteEscape($optPageURL)}'";
    }
    // the code compatible with google checkout shortcut (it requires a global pageTracker variable)
    return "
        _gaq.push(function() {
            // the global variable is created intentionally
            pageTracker = _gat._getTracker('{$this->jsQuoteEscape($accountId)}');
            pageTracker._trackPageview({$optPageURL});
        });
    ";
}

Pour réactiver le tracking, il faut remplacer la fonction par celle-ci:

    
protected function _getPageTrackingCode($accountId)
{
    $pageName   = trim($this->getPageName());
    $optPageURL = '';
    if ($pageName && preg_match('/^\/.*/i', $pageName)) {
        $optPageURL = ", '{$this->jsQuoteEscape($pageName)}'";
    }
    return "
        _gaq.push(['_setAccount', '{$this->jsQuoteEscape($accountId)}']);
        _gaq.push(['_trackPageview'{$optPageURL}]);
    ";
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

jQuery: effectuer une requête AJAX synchrone

Le code suivant est un exemple de requete AJAX effectuée avec jQuery.

var string = 'default';
$.get('/index/test',
  {string: 'test'},
  function(data){
    string = data;
  }
);
alert(string);

Le problème avec ce code est que la valeur de « string » va être affichée avant qu’elle soit mise à jour par la requête AJAX. En effet, la suite du code est exécutée avant que la requête soit terminée. La valeur de « string » va donc être « default ».

Pour ordonner à Javascript d’attendre la fin de la requête pour continuer l’exécution du code, il faut insérer la ligne suivante avant l’exécution de la requête:

$.ajaxSetup({async: false});

Exemple:

var string = 'default';
$.ajaxSetup({async: false});
$.get('/index/test',
  {string: 'test'},
  function(data){
    string = data;
  }
);
alert(string);
//pour remettre la valeur par défaut:
$.ajaxSetup({async: true});

Cette fois ci, la valeur de « string » lors de son affichage sera « test ».

Une réflexion au sujet de « jQuery: effectuer une requête AJAX synchrone »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *