Accueil » Conseils & tutoriels sites internet » Tutoriels Wordpress » Petites combines WordPress Multisites

Petites combines WordPress Multisites

Posté dans : Tutoriels Wordpress 0

Créer un multisite avec WordPress vous permet de gérer une grande quantité de blogs, hébergés sur une seule installation. Il est donc possible de les manipuler sous de nombreuses conditions, grâce aux fonctions de multisite que WordPress nous propose.
Certaines de ces fonctions fonctionnent très bien sur des sites « normaux », mais sont grandement utiles pour gagner en efficience sur un système multi-instances.

Ajouter des variables PHP utiles dans l’en-tête de votre site :

Cela vous donnera accès à peu près partout à des variables utiles dans le cadre d’un multisite. Ajoutez ceci dans le header.php de votre thème

//Utilisateur courant
global $current_user;
//liste des blogs
$blog_list = wp_get_sites();
//ID du blog courant
$blog_id = get_current_blog_id();
//ID de l'utilisateur courant
$user_id = get_current_user_id();
//Titre du blog
$blog_title = get_bloginfo();
//URL du main blog
$main_url = network_home_url();
//URL courante
$URL = "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
//Récupération des informations de l'utilisateur courant
get_currentuserinfo();
//Récupération des informations du blog courant en utilisant l'ID
$blog_details = get_blog_details($blog_id);
//Récupération des informations utilisateur selon le blog courant
$wp_user_obj = new WP_User(
    $user_id,
    '',
    $blog_id
);

Ajouter Bootstrap à votre thème :

/*
* Custom functions added by Cyril CHALAMON
* Please make sure you don't remove these lines
*
*/

/**
 * Custom CSS and JS, including Bootstrap, add files in /bootstrap folder in your theme directory
 */
wp_register_script( 'bootstrap-js', get_template_directory_uri() . '/bootstrap/js/bootstrap.min.js', array( 'jquery' ), '3.0.1', true );

wp_register_style( 'bootstrap-css', get_template_directory_uri() . '/bootstrap/css/bootstrap.min.css', array(), '3.0.1', 'all' );

wp_enqueue_script( 'bootstrap-js' );

wp_enqueue_style( 'bootstrap-css' );

/*
* Custom excerpt length
*/
function custom_excerpt_length($length) {
	return 0;
}
add_filter('excerpt_length', 'custom_excerpt_length');

Changer le logo du login :

/*
/ Custom admin login logo
*/
function custom_login_logo() {
	echo '<style type="text/css">
	h1 a { background-image: url('.get_bloginfo('template_directory').'/images/custom-login-logo.png) !important; }
	</style>';
}
add_action('login_head', 'custom_login_logo');

Enlever hentry de post_class :

/**
* Remove hentry from post_class
*/
function remove_hentry_class( $classes ) {
    $classes = array_diff( $classes, array( 'hentry' ) );
    return $classes;
}
add_filter( 'post_class', 'remove_hentry_class' );

Ajouter les utilisateurs à tous les blogs, mais avec aucun droit par défaut

Ceci dépend d’une option nommée blogsecure, disponible depuis une interface admin en téléchargeant ce plugin :

everblogsecure

//No Reader Role
function add_role_noread() {
 add_role( 'none_role', 'Aucun droit', array( 'read' => false, 'level_0' => true ) );
}
add_action('admin_init', 'add_role_noread', 10, 0);

//Add user to all blogs
function ds_new_user_meta($user_id) {
 $blog_list = wp_get_sites();
 $none_role = 'none_role';
 $subscriber = 'subscriber';
 $user_blogs = get_blogs_of_user( $user_id );
 foreach ($blog_list as $blog) {
 //Get blog name by ID in loop
 $blog_details = get_blog_details($blog['blog_id']);
 //If blog is locked
 if(!is_user_member_of_blog( $user_id, $blog['blog_id']) && get_blog_option($blog['blog_id'],'blogsecure')){
 //Add user with none role
 add_user_to_blog($blog['blog_id'], $user_id, $none_role);
 } else{
 //Add user with subscriber role
 add_user_to_blog($blog['blog_id'], $user_id, $subscriber);
 }
 }
}

add_action( 'user_register', 'ds_new_user_meta', 10, 2);
add_action( 'wpmu_new_blog', 'ds_new_user_meta', 10, 2 );

function login_new_user_meta($login) {
 $user = get_userdatabylogin($login);
 $user_id = $user->ID;
 $blog_list = wp_get_sites();
 $none_role = 'none_role';
 $subscriber = 'subscriber';
 $user_blogs = get_blogs_of_user( $user_id );
 foreach ($blog_list as $blog) {
 //Get blog name by ID in loop
 $blog_details = get_blog_details($blog['blog_id']);
 //If blog is locked
 if(!is_user_member_of_blog( $user_id, $blog['blog_id']) && get_blog_option($blog['blog_id'],'blogsecure')){
 //Add user with none role
 add_user_to_blog($blog['blog_id'], $user_id, $none_role);
 } else if (!is_user_member_of_blog( $user_id, $blog['blog_id'])){
 //Add user with subscriber role
 add_user_to_blog($blog['blog_id'], $user_id, $subscriber);
 } else {
 //Do nothing
 }
 }
}
add_action('wp_login', 'login_new_user_meta');

Afficher la liste des blogs dont on est membre :

<div class="col-md-12">
	<!-- Show All Blogs: -->
	<ul>
	<?php
	$blog_list = wp_get_sites();
        $blog_id = get_current_blog_id();
	$user_id = get_current_user_id();
	foreach ($blog_list as $blog) {
	//Get blog name by ID in loop
	$blog_details = get_blog_details($blog['blog_id']);
		if (is_user_member_of_blog( $user_id, $blog['blog_id'])) {
			if ($blog_id == $blog['blog_id']) {
				echo '
					<li id="'.$blog['blog_id'].'" class="current_blog">'.$blog_details->blogname.'
					</li>
				';
			} else{
				echo '
					<li id="'.$blog['blog_id'].'">'.$blog_details->blogname.'
					</li>
				';
			}
		}
	}
?>
	</ul>
</div>

Ajouter tous les utilisateurs en abonné, partout :

//Add user to all blogs
function ds_new_user_meta($user_id) {
	$blog_list = wp_get_sites();
	$subscriber = 'subscriber';
	$user_blogs = get_blogs_of_user( $user_id );
	foreach ($blog_list as $blog) {
		//Get blog name by ID in loop
		$blog_details = get_blog_details($blog['blog_id']);
			if(!is_user_member_of_blog( $user_id, $blog['blog_id'])){
				add_user_to_blog($blog['blog_id'], $user_id, $subscriber);
			}
	}
}

add_action( 'user_register', 'ds_new_user_meta', 10, 2);
add_action( 'wpmu_new_blog', 'ds_new_user_meta', 10, 2 );

function login_new_user_meta($login) {
	$user = get_userdatabylogin($login);
	$user_id = $user->ID;
	$blog_list = wp_get_sites();
	$subscriber = 'subscriber';
	$user_blogs = get_blogs_of_user( $user_id );
	foreach ($blog_list as $blog) {
		//Get blog name by ID in loop
		$blog_details = get_blog_details($blog['blog_id']);
			if(!is_user_member_of_blog( $user_id, $blog['blog_id'])){
				add_user_to_blog($blog['blog_id'], $user_id, $subscriber);
			}
	}
}
add_action('wp_login', 'login_new_user_meta');

Ajouter les utilisateurs partout, avec aucun droit :

//No Reader Role
function add_role_noread() {
   add_role( 'none_role', 'Aucun droit', array( 'read' => false, 'level_0' => true ) );
}
add_action('admin_init', 'add_role_noread', 10, 0);

//Add user to all blogs
function ds_new_user_meta($user_id) {
	$blog_list = wp_get_sites();
	$none_role = 'none_role';
	$user_blogs = get_blogs_of_user( $user_id );
	foreach ($blog_list as $blog) {
		//Get blog name by ID in loop
		$blog_details = get_blog_details($blog['blog_id']);
			//If blog is locked
			if(!is_user_member_of_blog( $user_id, $blog['blog_id'])){
				//Add user with none role
				add_user_to_blog($blog['blog_id'], $user_id, $none_role);
			}
	}
}

add_action( 'user_register', 'ds_new_user_meta', 10, 2);
add_action( 'wpmu_new_blog', 'ds_new_user_meta', 10, 2 );

function login_new_user_meta($login) {
	$user = get_userdatabylogin($login);
	$user_id = $user->ID;
	$blog_list = wp_get_sites();
	$none_role = 'none_role';
	$user_blogs = get_blogs_of_user( $user_id );
	foreach ($blog_list as $blog) {
		//Get blog name by ID in loop
		$blog_details = get_blog_details($blog['blog_id']);
			if(!is_user_member_of_blog( $user_id, $blog['blog_id'])){
				//Add user with none role
				add_user_to_blog($blog['blog_id'], $user_id, $none_role);
			}
	}
}
add_action('wp_login', 'login_new_user_meta');

Ajouter un index FullText sur la table du contenu des commentaires

/**
 * Alter comments table on new blog for multiselect search
 */
function wporg_wpmu_new_alter_comments_table( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
	global $wpdb;
	switch_to_blog($blog_id);
	$queryAlterCommentsTable = "ALTER TABLE ".$wpdb->prefix."comments 
					ADD FULLTEXT(comment_content)
				";
	$wpdb->query($queryAlterCommentsTable);
}
add_action( 'wpmu_new_blog', 'wporg_wpmu_new_alter_comments_table', 10, 6 );

Envoyer un email aux utilisateurs ayant un brouillon enregistré

Placez le script dans le dossier /wp-content/plugins/cronemail/cronemail.php

<?php

require_once('../../../wp-load.php');
//WP global
global $wpdb;
$blog_list = wp_get_sites();
foreach ($blog_list as $blog) {	
    if ($blog['blog_id'] != 1 && $blog['blog_id'] > 0) {
		$tablePrefix = $wpdb->base_prefix.$blog['blog_id'].'_';
	} else{
		$tablePrefix = $wpdb->base_prefix;
	}
	$blog_details = get_blog_details($blog['blog_id']);
	$queryDrafts = "SELECT DISTINCT * FROM ".$tablePrefix."posts 
						WHERE post_status = 'draft'
						";
	$resultDrafts = $wpdb->get_results( $queryDrafts );
	if (!empty($resultDrafts)) {
		foreach ($resultDrafts as $draft) {
			$queryAuthors = "SELECT DISTINCT * FROM ".$wpdb->base_prefix."users 
									WHERE ID = ".$draft->post_author."
									";
			$resultAuthors = $wpdb->get_results( $queryAuthors );
			$user_info = get_userdata($draft->post_author);
			$subject = '"'.$draft->post_title.'" en brouillon sur '.$blog_details->blogname;
			$message = "Votre article '".$draft->post_title."'' est enregistré en brouillon sur le blog '".$blog_details->blogname."'.\n\n Merci de le publier ou de le placer dans la corbeille."."\n\n";
			$message .= 'Votre article a été enregistré en date du '.$draft->post_date."\n\n";
			$message .= 'Le lien vers le blog est '.$blog_details->siteurl."\n\n";
			$message .= 'Merci de l\'attention que vous porterez à ce message';
			wp_mail( $user_info->user_email, $subject, $message );
		}
	}
}

Ajouter un logo personnalisé et des fonds aléatoires sur le login form

Ajoutez les images de fond dans le dossier /custom/img/bg et nommez les de bg1.jpg à bg6.jpg

Insérez au même endroit votre logo, et renommez-le logo.jpg

function custom_login_logo() {
	$pictures = array("bg1.jpg", "bg2.jpg", "bg3.jpg", "bg4.jpg", "bg5.jpg", "bg6.jpg");
	echo '<style type="text/css">
	body.login {
	  background-image: url("'.get_bloginfo('template_directory').'/custom/img/bg/'.$pictures[array_rand($pictures)].'");
	  background-repeat: no-repeat;
	  background-attachment: fixed;
	  background-position: center;
	}
	h1 { width: 100%; }
	h1 a { background-image: url('.get_bloginfo('template_directory').'/custom/img/logo.jpg) !important; background-size:100%!important; width:100%!important;height:120px!important;
	</style>';
}
add_action('login_head', 'custom_login_logo');

Interdire les commentaires sur le blog principal

Pour ajouter ce code, modifiez le fichier comments.php de votre blog

Cela part du principe que vous avez ajouté les variables utiles dans l’en-tête de votre site (voir plus haut)

?>
<?php
if (!is_main_site($blog_id)) {
?>
<!-- le contenu de votre fichier comments.php
<?php
}
?>

Lien vers le codex WordPress Multisites :

https://codex.wordpress.org/WPMU_Functions
Imprimer Imprimer
Suivre Cyssoo:

Développeur - formateur

Je cherche à display errors le monde, vous auriez pas la doc' ? Follow me on Twitter !

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.