web-dev-qa-db-fra.com

Mot de passe protéger un seul site sur le réseau

Je voudrais limiter l’accès à un seul sous-site (sous-domaine), de sorte qu’il ait besoin d’un plug-in pour afficher le site ... sans affecter les autres sous-sites.

Donc, par exemple, si j'ai 3 sous-sites comme celui-ci ...

hide.mydomain.com public1.mydomain.com public2.mydomain.com

Comment puis-je cacher et mot de passe protéger seulement le hide.mydomain.com?

Quelqu'un peut-il m'aider? J'ai du mal à trouver une solution, principalement parce que cela semble plus difficile à faire avec un sous-domaine et non un sous-dossier.

1
Theo Leep

Vous pouvez utiliser un plugin puissant tel que Confidentialité multisite de WPMUDEV ou utiliser le code suivant que j'ai développé pour un projet personnel.

Pour utiliser ce code, créez-y un plug-in que vous n'activez que sur le site à protéger, ou si cela semble trop difficile, vous pouvez le coller dans le fichier functions.php du thème et envelopper l'appel add_action avec une instruction conditionnelle, comme indiqué ci-dessous. :

if ( get_current_blog_id() = 2 )  // Only apply privacy to blog ID 2
  add_action('wp', 'private_site');

function private_site() {

    if( $_GET['home'] == 'fix' ) { return; }

    $isLoginPage = strpos($_SERVER['REQUEST_URI'], "wp-login.php") !== false;
    $isPhoneApp = strpos($_SERVER['REQUEST_URI'], "xmlrpc.php") !== false;
    $wpe_cookie = 'wpe-auth';

    if( !is_user_logged_in() && !is_admin() && !$isLoginPage && !$isPhoneApp ) {

        // WPE: If not-authenticated, delete our cookie in case it exists.
        if ( isset($_COOKIE[$wpe_cookie]) ) setcookie($wpe_cookie,'',time()-1000000,'/');

        $shareKey = get_post_meta( get_the_ID(), 'key', true );

        if( $_GET['key'] && is_single && $_GET['key'] == $shareKey ) {
            return;
        } else {
            $location = get_login_redirect_url( get_bloginfo( 'url') . $_SERVER['REQUEST_URI'] );
            header( 'Location: ' . $location );
            exit();
        }
    } else {
        // WPE: Authenticated, so set the cookie properly.  No need if it's already set properly.
        $cookie_value = md5('wpe_auth_salty_dog|'.WPE_APIKEY);
        if ( ! isset( $_COOKIE[$wpe_cookie] ) || $_COOKIE[$wpe_cookie] != $cookie_value )
            setcookie($wpe_cookie,$cookie_value,0,'/');
    }
}

// Returns the login URL with a redirect link.

function get_login_redirect_url( $url = '' ) {

    $url = esc_url_raw( $url );
    if ( empty( $url ) ) return false;

    // setup query args
    $query_args = array(
        'redirect_to' => urlencode( $url )
    );
    return add_query_arg( $query_args, apply_filters( 'ass_login_url', wp_login_url() ) );
}
1
Adal