Pierre

4 avril 2019
w

Des questions ?

Besoin de prendre contact, de présenter votre projet ?

w

Contactez-moi !

Je serai heureux de répondre à toutes vos questions.

Contact

N’afficher certains modèles de la bibliothèque Divi qu’à certains utilisateurs

Codage, Divi | 4 commentaires

Voici une méthode simple et propre pour masquer certains éléments de votre bibliothèque Divi aux utilisateurs non-autorisés
Divi

Peut-être vous rappelez-vous de l’article que j’avais rédigé il y a quelques temps déjà pour exclure certaines pages et articles de l’interface d’administration et bien cette fois-ci nous allons ajouter au fichier functions.php de notre thème enfant, le code nécessaire pour masquer certains éléments de la bibliothèque Divi.

Alors vous allez peut-être me demander : « Pourquoi ? » et bien tout simplement parce qu’en tant que développeur web, il m’arrive très régulièrement  de créer des éléments (modules, sections, rangées ou encore modèles complets) que je souhaite « injecter » à certains endroits du site sur lequel je travaille. Cela peut être dans l’entête, avant ou après le contenu, dans le pied de page, bref un peu n’importe où :).

Le soucis, c’est que lorsque je livre le site à mon client, il n’a pas toujours conscience de l’importance de ces modèles et de leurs usages. Ou bien avec le temps, il oublie et un jour souhaitant faire un peu de « ménage » il supprime des éléments de cette bibliothèque… Le résultat, vous vous en doutez, est un site qui ne va plus fonctionner tout à fait comme avant :)…

Donc, pour éviter cela, j’ai écrit une petite fonction qui permet de limiter l’accès à ces modèles aux seules « personnes compétentes » (celle du milieu web quoi).

Le code pour n’afficher les layouts cachés qu’aux admins :

function exclude_some_layouts_from_admin($query) {
global $pagenow, $post_type;
	if ( ! is_admin() )
		return $query;

	$user = current_user_can('administrator');

	if ( $user!=1 && $pagenow == 'edit.php' && $post_type == 'et_pb_layout' ) {
		$query->query_vars['post__not_in'] = array( 600, 608 ); /* id des layouts à cacher */
	}
}
add_filter( 'parse_query', 'exclude_some_layouts_from_admin' );

Le code pour n’afficher les layouts cachés qu’aux utilisateurs dont l’adresse email est autorisée :

function exclude_some_layouts_from_admin_by_mail($query) {
global $pagenow, $post_type;

	if ( ! is_admin() )
		return $query;

	$emails = array('adresse1@domain.tld', 'adresse2@domain.tld');
	$user = wp_get_current_user();
	$user = (in_array($user->user_email, $emails)) ? 1 : 0;

	if ( $user!=1 && $pagenow == 'edit.php' && $post_type == 'et_pb_layout' ) {
		$query->query_vars['post__not_in'] = array( 600, 608 ); /* id des layouts à cacher */
	}
}
add_filter( 'parse_query', 'exclude_some_layouts_from_admin_by_mail' );

Voilà, vous avez donc le choix entre limiter l’accès aux layouts aux rôle « Administrateur » ou bien limiter leurs accès d’après une liste d’adresses email :).

Amusez-vous bien 😀 !!

Information : Utilisateur convaincu depuis de nombreuses années par ce thème, je suis inscrit en tant qu’affilié sur le site d’elegant themes. Ainsi en cliquant sur le logo ci-dessous, vous bénéficierez d’une remise de 10% sur l’achat du thème et si vous l’achetez, je recevrai une commission :).

4 Commentaires

  1. Bonjour et merci pour ce script. Je viens de le mettre en place sur un site mais il ne fonctionne pas. Les éléments dont j’ai précisé les id dans le tableau s’affichent toujours dans le divi builder même pour un utilisateur non-admin.

    Avez-vous une idée de pourquoi ?

    Merci

    • Bonjour Alain :).

      En fait, cette astuce empêche les utilisateurs non-autorisés d’effacer les modèles contenus dans la librairie Divi. Elle n’empêche pas de les afficher dans le Divi Builder ;).
      C’est peut-être cette petite incompréhension qui t’a fait dire que ça ne fonctionnait pas, Alain.
      Je t’invite à tester d’afficher les modèles masqués avec un utilisateur non-autorisé et tu verras que le code fait toujours le job ;).

      Passe une très belle journée.

      Amicalement,

      Pierre.

      • Ah… ok ! Je comprends mieux. Merci pour la précision.

        Et connaissez-vous un moyen de filtrer les éléments que Divi affiche dans le builder ?

      • Nope, désolé…