Programmer les popups de Popup Builder

La version gratuite du plugin WordPress Popup Builder ne permet pas programmer l’affichage des popups. Cependant elle créé le filtre sgpbOtherConditions qui permet de les désactiver.

Ce filtre est appelé pour chaque popup qui peut s’afficher sur la page et si l’argument ‘status’ à false est ajouté à ceux existants, la popup ne s’affiche pas.

	/**
	 * Check Popup conditions
	 *
	 * @since 1.0.0
	 *
	 * @return array
	 *
	 */
	private function isSatisfyForOtherConditions()
	{
		$popup = $this->getPopup();
		$popupOptions = $popup->getOptions();
		$popupId = $popup->getId();

		$dontAlowOpenPopup = apply_filters('sgpbOtherConditions', array('id' => $popupId, 'popupOptions' => $popupOptions, 'popupObj' => $popup));

		return $dontAlowOpenPopup['status'];
	}

Langage du code : PHP (php)

Pour désactiver automatiquement vos popups, vous pouvez ajouter ce code à functions.php

add_filter('sgpbOtherConditions', 'my_sgpbOtherConditions', 10, 1);

// update popin status
function my_sgpbOtherConditions($args = array()) {
    // if popup is already unactive, do nothing
    if (isset($args['status']) && $args['status'] === false) {
        return $args;
    }

    switch ($args['id']) {
        case 17938: // summer holiday active between 2021-07-30 and 2021-08-01
            $now = time() + 2 * 60 * 60; // for time zone, can be improved
            $from = strtotime('2021-07-30 00:00:00');
            $to = strtotime('2021-08-02 00:00:00');

            // if we are not between 2021-07-30 and 2021-08-01 desactivate the popup
            if (($now < $from) || ($now > $to)) {
                $args['status'] = false;
            }			
            break;
        case 16412:  // covid reassurance unactive between 2021-07-30 and 2021-08-01
            $now = time() + 2 * 60 * 60; // for time zone, can be improved
            $from = strtotime('2021-07-30 00:00:00');
            $to = strtotime('2021-08-02 00:00:00');

            // if we are between 2021-07-30 and 2021-08-01 desactivate the popup
            if (($now >= $from) && ($now <= $to)) {
                $args['status'] = false;
            }
            break;
    }
    return $args;	
}Langage du code : PHP (php)

Ainsi la popup 17938 ne sera active qu’entre le 30 juillet et le 1 août 2021 alors que la 16412 ne le sera que le reste du temps.

Rediriger les fiches produits dans WooCommerce

Dans WooCommerce chaque produit a une page dédiée. Dans le panier, les produits renvoient à celles-ci.

Si vous voulez désactiver cette fonctionnalité et afficher une page avec tous vos produits, vous pouvez ajouter ce code à functions.php

// redirige les pages produits
add_action('wp','prevent_access_to_product_page');
function prevent_access_to_product_page(){
  if ( is_product() ) {
    wp_redirect( get_permalink( 269 ) );
  }
}Langage du code : PHP (php)

Ainsi toutes les pages produits redirigeront vers la page 269.

Source : How to disable/hide woocommerce single product page?

Erreur xxx.live is not a function dans WordPress

A partir de la version 5.5 de WordPress, jQuery Migrate n’est plus activé par défaut. Par conséquent les vieux plugins (dans mon cas un Divi version 3) peuvent ne plus fonctionner.

L’erreur la plus commune semble être xxx.live is not a function

Pour corriger ce problème il faut installer Enable jQuery Migrate Helper qui le réactive.

Source : https://wordpress.org/support/topic/jqeuery-error-live-is-not-a-function/#post-13256885

Destinataires de mails avec Contact Form 7

Ça n’a rien de nouveau mais je ne m’en souviens jamais donc voici comment avoir un destinataire du mail envoyé par contact form 7 en fonction du choix fait par l’utilisateur dans le formulaire.

Mettre un champ select dans le formulaire avec comme choix « Texte à afficher|e-mail destinataire »

[select your-recipient "CEO|[email protected]"
                    "Sales|[email protected]"
                    "Support|[email protected]"]

Dans l’onglet e-mail, mettre [your-recipient] comme destinataire.

Si on veut la valeur choisie dans le corps du mail, il faut mettre [_raw_{field name}] soit ici [_raw_your-recipient]

Source : https://contactform7.com/selectable-recipient-with-pipes/

Contact Form 7 et Popup Maker

Popup Maker peut réagir aux validations des formulaires de Contact Form 7. Enfin il devrait parce que ça ne fonctionne plus.

Je ne sais pas à quel moment Contact Form 7 a changé le nom de ses événements : wpcf7:mailsent  est devenu wpcf7mailsent

Pour remédier à ça, il faut ajouter au JavaScript du site

    jQuery(document).on('wpcf7mailsent', '.wpcf7', function (e, t) {
        var event = new CustomEvent( 'wpcf7:mailsent', {
            bubbles: true,
            detail: e.detail
        } );
        e.target.dispatchEvent(event);
    });Langage du code : JavaScript (javascript)

comme cela les 2 événements sont envoyés.

Supprimer un site WordPress

Voici un script qui supprime un site WordPress. C’est une adaptation de Supprimer une boutique PrestaShop. Il suffit de le placer à la racine du site en FTP ou autre et de le visiter avec son navigateur.

⚠ Le script supprime le répertoire de WordPress avec tous ses fichiers et sous répertoires et toutes les tables de la base de données qui ont le préfixe de WordPress.

⚠⚠ Le script ne demande pas de confirmation. Vous le lancez, il supprime tout.

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$root = dirname(__FILE__);
$server = false;
$user = false;
$password = false;
$database = false;
$prefix = false;

if (file_exists($root.'/wp-config.php')) {
    include $root.'/wp-config.php';
    $server = DB_HOST;
    $user = DB_USER;
    $password = DB_PASSWORD;
    $database = DB_NAME;
    $prefix = $table_prefix;
} else {
    die();
}

if (!$server || !$user || !$database || !$prefix) {
    die();
}

dropTables($server, $user, $password, $database, $prefix);
rrmdir($root);
mkdir($root);

// https://stackoverflow.com/questions/1589278/sql-deleting-tables-with-prefix#1589324
// https://stackoverflow.com/a/10664265/2530962
function dropTables($server, $user, $password, $database, $prefix)
{
    $link = mysqli_connect($server, $user, $password, $database);
    $query = 'SET SESSION group_concat_max_len = 999999999;
    SELECT CONCAT( \'DROP TABLE \', GROUP_CONCAT(table_name) , \';\' )
        AS statement FROM information_schema.tables
        WHERE table_schema = \''.mysqli_real_escape_string($link, $database).'\'
            AND table_name LIKE \''.mysqli_real_escape_string($link, $prefix).'%\';';
    if (mysqli_multi_query($link, $query)) {
        do {
            if ($result = mysqli_store_result($link)) {
                while ($row = mysqli_fetch_array($result)) {
                    $drop_query = $row[0];
                }
                mysqli_free_result($result);
            }
        } while (mysqli_more_results($link) && mysqli_next_result($link));
    }

    // echo 'MySQL "'.$drop_query.'"'.PHP_EOL;
    mysqli_query($link, $drop_query);
}

// https://stackoverflow.com/questions/3338123/how-do-i-recursively-delete-a-directory-and-its-entire-contents-files-sub-dir#3338133
function rrmdir($dir)
{
    if (is_dir($dir)) {
        $objects = scandir($dir);
        foreach ($objects as $object) {
            if ($object != "." && $object != "..") {
                if (is_dir($dir."/".$object)) {
                    rrmdir($dir."/".$object);
                } else {
                    // echo 'Delete '.$dir."/".$object.'    ';
                    if (unlink($dir."/".$object)) {
                        // echo 'OK';
                    } else {
                        // echo 'ERROR';
                    }
                    // echo PHP_EOL;
                }
            }
        }
        // echo 'Delete '.$dir.'    ';
        if (rmdir($dir)) {
            // echo 'OK';
        } else {
            // echo 'ERROR';
        }
        // echo PHP_EOL;
    }
}

 

Migrer un site WordPress

Comment changer un site WordPress de serveur en 3 étapes:

Malgrès moi je fait de plus en plus de WordPress. Donc je note ça pour plus tard.

Il faut être sur le serveur source dans le dossier du site.
On suppose que le site sera dans le dossier www du serveur de destination

Copier les fichiers sur le nouveau serveur

rsync -avz ./ [login serveur destination]@[hote du serveur destination]:www/

Copier la base de données

mysqldump -u [utilisateur bdd source] -p[mot de passe bdd source] -h [hote bdd source] [nom bdd source] | sed 's/[domaine source]/[domaine destination]/g' | gzip | ssh [login serveur destination]@[hote du serveur destination] "gunzip | mysql -u [utilisateur bdd destination] -p[mot de passe bdd destination] -h [hote bdd destination] [nom bdd destination]"

Explication :

  • mysqldump -u [utilisateur bdd source] -p[mot de passe bdd source] -h [hote bdd source] [nom bdd source]  fait une extration de la base de données
  • sed ‘s/[domaine source]/[domaine destination]/g’  remplace le nom de domaine dans l’archive
  • gzip  compresse le résultat
  • ssh [login serveur destination]@[hote du serveur destination] « gunzip | mysql -u [utilisateur bdd destination] -p[mot de passe bdd destination] -h [hote bdd destination] [nom bdd destination] »  envoit le tout sur le serveur de destination et lui fait executer gunzip | mysql -u [utilisateur bdd destination] -p[mot de passe bdd destination] -h [hote bdd destination] [nom bdd destination]
  • gunzip  décompresse l’archive
  • mysql -u [utilisateur bdd destination] -p[mot de passe bdd destination] -h [hote bdd destination] [nom bdd destination]  l’importe dans la nouvelle base de données

Paramétrer le nouveau site :

Il faut modifier le fichier wp-config.php avec les identifiants de la nouvelle base de données.

WordPress netinstall

Ce script permet d’installer WordPress sans avoir à télécharger l’archive, la décompresser et la déposer sur un serveur.

Il suffit de déposer le script dans le dossier où vous voulez installer WordPress et d’aller le visiter avec votre navigateur.

<?php
// This script download and unzip the latest version of WordPress
//
// Put this file in the folder where you want to install WordPress
// Visit it with your browser
// Follow the installation process

$local_zip = 'latest.zip';
$path = dirname(__FILE__);

// download latest version
copy('https://wordpress.org/latest.zip', $local_zip);
$zip = new ZipArchive;
$res = $zip->open($local_zip);
if ($res === true) {
    // unzip
    $zip->extractTo($path);
    $zip->close();
  
    // delete temporary files
    unlink($local_zip);
    unlink(__FILE__);
    
    // move files to current folder
    rename_dir($path.DIRECTORY_SEPARATOR.'wordpress', $path);
    
    // redirect to installation script
    header('Location: index.php');
} else {
    echo 'doh!';
}

// http://de.php.net/manual/fr/function.copy.php#91010
function rename_dir($src, $dst)
{
    $dir = @opendir($src);
    if ($dir && (is_dir($dst) || @mkdir($dst))) {
        while (false !== ( $file = readdir($dir))) {
            if (( $file != '.' ) && ( $file != '..' )) {
                if (is_dir($src.DIRECTORY_SEPARATOR.$file)) {
                    if (!rename_dir($src.DIRECTORY_SEPARATOR.$file, $dst.DIRECTORY_SEPARATOR.$file)) {
                        return false;
                    }
                } else {
                    if (!@copy($src.DIRECTORY_SEPARATOR.$file, $dst.DIRECTORY_SEPARATOR.$file)) {
                        return false;
                    }
                    @unlink($src.DIRECTORY_SEPARATOR.$file);
                }
            }
        }
        closedir($dir);
        @rmdir($src);
        return true;
    }
    return false;
}

Nouvelle référence : Bocage Finance

Bocage Finances, votre courtier en crédit immobilier et crédit professionnel, en restructuration de crédits, et négociateur en assurances.

Votre courtier est aussi votre conseiller et négociateur en assurances, grâce à un partenariat avec le 1er courtier spécialiste en assurances des Deux-Sèvres.

Informations