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

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 😀 !!

 

Si vous souhaitez m'aider à continuer à faire vivre ce blog, vous pouvez effectuer un don, ci dessous :).

 

Information : Véritablement conquis par ce thème, je me suis inscrit sur le site de ElegantThemes en tant qu'affilié, ce qui signifie que si vous cliquez sur le lien ci-dessous et achetez le thème, je recevrai une commission :).

ElegantThemes

 

Après avoir visité les coulisses, découvrez le site :) !

4 Commentaires

  1. Alain Y.

    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

    Réponse
    • Pierre

      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.

      Réponse
      • Alain Y.

        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 ?

        Réponse
        • Pierre

          Nope, désolé…

          Réponse

Poster le commentaire

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

Accueil » Codage » Divi » N’afficher certains modèles de la bibliothèque Divi qu’à certains utilisateurs
Share This