Utilisation du plugin "Champs personnalisés avancés": https://wordpress.org/plugins/advanced-custom-fields/ Je peux ajouter mes champs personnalisés à profile.php.
Mais comment puis-je supprimer les éléments par défaut de profile.php (Options personnelles, Nom, etc.)?
Je sais que je peux créer de nouveaux fichiers de modèle dans mon thème enfant pour redéfinir l'aspect des pages, mais je ne trouve pas comment faire cela avec profile.php.
J'ai commencé à utiliser CSS pour masquer les éléments. Cela fonctionne sauf pour les titres sans classe ni identifiant. Je ne peux pas simplement masquer l'intégralité du formulaire car Advanced Custom Fields place les nouveaux éléments dans ce même formulaire.
Je préférerais éviter les gros plug-ins qui créent des comptes d'utilisateurs frontaux au-dessus du système existant, afin d'obtenir une page de modification de profil personnalisée.
Merci pour toute aide.
Il existe probablement plusieurs options pour atteindre votre objectif. Vous trouverez ci-dessous l'une des options présentées par moi.
(ces 2 fonctions appartiennent l'une à l'autre)
Faites toujours une copie de
functions.php
avant de commencer à éditer/ajouter un plugin ou un autre extrait de code.
/**
* Remove fields from an user profile page for all except Administrator
*
* FYI {@link https://codex.wordpress.org/Function_Reference/current_user_can}
* {@link https://codex.wordpress.org/Roles_and_Capabilities}
* {@link https://codex.wordpress.org/Plugin_API/Action_Reference/admin_footer}
* {@link https://developer.wordpress.org/reference/hooks/load-pagenow/}
*
* Checked with @version WordPress 4.8
*/
add_action('admin_init', 'wpse273289_remove_profile_fields' );
function wpse273289_remove_profile_fields()
{
global $pagenow;
// apply only to user profile or user edit pages
if( $pagenow !=='profile.php' && $pagenow !=='user-edit.php' )
{
return;
}
// Make it happen for all except Administrators
if( current_user_can( 'manage_options' ) )
{
return;
}
add_action( 'admin_footer', 'wpse273289_remove_profile_fields_js' );
}
/**
* Remove (below)selected fields on user profile
* This function belongs to the wpse273289_remove_profile_fields function!
*
*/
function wpse273289_remove_profile_fields_js()
{
?>
<script>
jQuery(document).ready( function($) {
$('input#user_login').closest('tr').remove(); // Username
$('input#first_name').closest('tr').remove(); // First Name
$('input#nickname').closest('tr').remove(); // Nickname (required)
$('input#email').closest('tr').remove(); // Email (required)
});
</script>
<?php
}
Les champs ci-dessus dans le script ne sont que des exemples, adaptez-les à votre guise.
Les deux fonctions sont vérifiées dans un bac à sable local et fonctionnent pour moi.Remarque: ci-dessus n'est PAS testé avec le plugin ACF mais cela ne devrait pas poser de problème.
Une autre option consiste à utiliser css pour désactiver/masquer ces éléments.
Vous devez d’abord ajouter une fonction qui ajoutera une classe de corps en fonction du rôle de l’utilisateur:
function your_prefix_add_admin_body_class( $classes ) {
$roles = wp_get_current_user()->roles;
return "$classes ".implode(' ', $roles);
}
add_filter( 'admin_body_class', 'your_prefix_add_admin_body_class' );
Et ajoutez ensuite des CSS personnalisés à votre administrateur:
function your_prefix_custom_css() {
echo '<style>
body:not(.administrator) .user-user-login-wrap,
body:not(.administrator) .user-first-name-wrap,
body:not(.administrator) .user-last-name-wrap{
display: none;
}
</style>';
}
add_action('admin_head', 'your_prefix_custom_css');
N'oubliez pas que ce n'est pas la solution la plus sécurisée. Si l'utilisateur connaît un peu de css, il peut le réactiver.