web-dev-qa-db-fra.com

Comment désactiver profile.php pour les utilisateurs?

J'utilise wordpress 4.2.2 et j'utilise la dernière version de buddypress. Je souhaite que tous mes utilisateurs personnalisent leur profil sur la page de profil de buddypress. Donc, je veux désactiver profile.php pour les utilisateurs. Je cache le lien de profil dans le tableau de bord avec l'interface utilisateur WP admin. Personnalisez le plugin. désactiver profile.php pour les utilisateurs. Que dois-je faire pour faire ça?

5
azizul

Rediriger de profile.php vers le tableau de bord

Voici une façon de le faire:

add_action( 'load-profile.php', function() {
    if( ! current_user_can( 'manage_options' ) )
        exit( wp_safe_redirect( admin_url() ) );
} );

où nous redirigeons vers le tableau de bord à la place, si l'utilisateur actuel ne peut pas gérer les options.

Rediriger de profile.php vers la page de membre de l'utilisateur actuel

Si vous souhaitez rediriger vers la page de profil du membre, vous pouvez essayer (non testé):

add_action( 'load-profile.php', function() {
    if( ! current_user_can( 'manage_options' ) && function_exists( 'bp_core_get_user_domain' ) )
        exit( wp_safe_redirect( bp_core_get_user_domain( get_current_user_id() ) ) );
} );

La fonction bp_core_get_user_domain() est mentionnée dans cette réponse par @BooneGorges il y a quelques années.

Je viens de vérifier BP source et cette fonction est toujours disponible dans BP 2.3 (voir ici ).

Pour PHP <5.3

add_action( 'load-profile.php', 'wpse_195353_profile_redirect_to_dashboard' );
function wpse_195353_profile_redirect_to_dashboard()
{
    if( ! current_user_can( 'manage_options' ) )
        exit( wp_safe_redirect( admin_url() ) );
}

et

add_action( 'load-profile.php', 'wpse_195353_profile_redirect_to_member_page' );
function wpse_195353_profile_redirect_to_member_page()
{
    if( ! current_user_can( 'manage_options' ) && function_exists( 'bp_core_get_user_domain' ) )
        exit( wp_safe_redirect( bp_core_get_user_domain( get_current_user_id() ) ) );
}

mais vous devriez envisager de mettre à jour votre PHP si c'est le cas.

7
birgire

Le code suivant * redirigera les administrateurs non-administrateurs vers une page de profil personnalisée dans l'interface frontale, car au lieu de le désactiver, vous devez les rediriger vers votre page personnalisée. :)

<?php
add_action ('init' , 'wpse_redirect_profile_access');

function wpse_redirect_profile_access(){
        //admin won't be affected
        if (current_user_can('manage_options')) return '';

        //if we're at admin profile.php page
        if (strpos ($_SERVER ['REQUEST_URI'] , 'wp-admin/profile.php' )) {
            wp_redirect ( home_url( '/my-profile' )); // to page like: example.com/my-profile/
            exit();
        }

}

* Source ^

2
Mayeenul Islam

J'aime celui la. Vous pouvez ajouter plusieurs pages au tableau pour les rediriger. Je l'ai redirigé vers le tableau de bord ci-dessous, mais vous pouvez également rediriger vers l'URL de buddypress ... Je ne suis pas sûr de savoir quelle est cette URL puisque je n'utilise pas très souvent BP.

   function no_proflie_admin_pages_redirect() {
      global $pagenow;
      if(!current_user_can('manage_options')) {
          $admin_redirects = array(
                    'profile.php'
                );
          if(in_array($pagenow, $admin_redirects)){
            wp_redirect( admin_url('/') ); exit;
          }
      }
    }
    add_action('admin_init', 'no_proflie_admin_pages_redirect');

Vous pouvez également masquer tout lien profile.php supplémentaire avec un simple css:

function hide_any_profile_links() { ?>
    <style type="text/css">
        a[href="http://disputebills.com/wp-admin/profile.php"], a[href="profile.php"]{
            display: none!important;
        }
    </style>
<?php }
add_action('admin_head', 'hide_any_profile_links', 999);

Ce qui précède pourrait également être réalisé avec jquery ou en utilisant php et le tampon de sortie.

0
Bryan Willis