web-dev-qa-db-fra.com

Comment forcer "les utilisateurs doivent être enregistrés et connectés" sur les sous-sites?

Alors maintenant, j'ai enfin trouvé des plugins pour la connexion au réseau social qui fonctionnent sur mon hôtel Web. (Les plugins Nextend.) :-)

J'ai défini "les utilisateurs doivent être enregistrés et connectés pour commenter" sur le site principal (il s'agit d'un site multisite). Fonctionne bien sur le site principal.

Malheureusement, cela n'est pas reporté sur les sous-sites. Comment puis-je forcer ceci sur les sous-sites aussi? (Sans avoir à le faire manuellement.)

Encore un petit problème (que je pense plus facile à résoudre): je ne veux que le login du plugin social sur les pages de login. Y a-t-il un moyen très facile de faire cela?

MISE À JOUR: résolu. Peut être fait en ajoutant un filtre pour l'option "comment_registration". Voir

https://codex.wordpress.org/Plugin_API/Filter_Reference/pre_option_ (nom_option)

Désolé pour le bruit.

1
Leo

Voici ce que vous faites pour forcer l'inscription sur les sous-sites:

/**
 * Require registration for comments on subsites too.
 */
function ourcomments_pre_option_comment_registration( $value )
{
        return 1;
}
add_filter( 'pre_option_comment_registration', 'ourcomments_pre_option_comment_registration', 10, 1 );

Pour afficher uniquement les boutons sociaux pour la connexion, vous pouvez utiliser quelque chose comme ceci:

/**
 * Hide login fields. Only social logins.
 */
function ourcomments_only_social_logins_login_form() {
?>
  <script type="text/javascript">
(function() {
    // Some things seems to be added later, hide them. And display site name.
    var cssHide = "";
    cssHide += "div#login h1 a { background:none; text-indent: 0; font-size: 30px; font-weight: bold; width: auto; height: auto; color: black; }";
    function checkAndRemove(el) {
        if (el) {
            var elP = el.parentElement;
            if (elP && "P" !== elP.nodeName) elP = elP.parentElement;
            if (elP && "P" === elP.nodeName) {
                elP.parentElement.removeChild(elP);
            }
        }
    }
    checkAndRemove(document.getElementById("user_login"));
    checkAndRemove(document.getElementById("user_pass"));
    // checkAndRemove(document.getElementById("rememberme"));
    cssHide += " div#login form#loginform p.forgetmenot { display:none }";
    // checkAndRemove(document.getElementById("wp-submit"));
    cssHide += " div#login form#loginform p.submit { display:none }";

    // Remove lost password (looks easily breakable...):
    var navLostPassword = document.querySelector("div#login p#nav")
    if (navLostPassword)
        navLostPassword.parentElement.removeChild(navLostPassword);
    else {
        console.log("p#nav not found");
        cssHide += " div#login p#nav { display:none }";
    }

    // For Nextend:
    var nextendOr = document.querySelector("div#login form#login-form h3");
    if (nextendOr)
        nextendOr.replaceChild(document.createTextNode("Please login!"), nextendOr.firstChild);
    else {
        console.log("h3 not found");
        cssHide += " h3 { display: none; }";
    }
    var s = document.createElement("style");
    s.appendChild(document.createTextNode(cssHide));
    document.body.appendChild(s);
})();
  </script>
<?php
}
add_action('login_form', 'ourcomments_only_social_logins_login_form', 1000);
add_action('register_form', 'ourcomments_only_social_logins_login_form', 1000);
add_action('bp_sidebar_login_form', 'ourcomments_only_social_logins_login_form', 1000);

Étant donné que les plug-ins pour les boutons sociaux ne les placent pas sur des sites secondaires, vous voudrez probablement vous connecter via le site principal:

/**
 * Login through main site.
 * Mostly a copy of the wp_login_url in general-template.php.
 * Fix-me: move to plugin.
 */
function ourcomments_network_login_url($login_url, $redirect) {
    $net_login_url = network_site_url('wp-login.php', 'login');

    $my_redirect = $redirect;
if ( empty($my_redirect) )
            $my_redirect = $_SERVER['REQUEST_URI'];
if ( !empty($my_redirect) )
    $net_login_url = add_query_arg('redirect_to', urlencode($my_redirect), $net_login_url);

    // We do not have the $force_reauth arg but we know how it looks in the url.
    $values = parse_url($login_url);
    $query = $values['query'];
    parse_str($query, $output);
    if ( $output['reauth'] )
    $net_login_url = add_query_arg('reauth', '1', $net_login_url);

return $net_login_url;
}
add_filter('login_url', 'ourcomments_network_login_url', -100, 2);

Cela peut être ajouté à un themes functions.php. Ou mettre dans un plugin (que je n'ai pas encore eu le temps de faire).

Je devrais peut-être ajouter qu'un utilisateur malveillant pourrait toujours essayer de se lancer autrement. Ceci est juste pour rendre les utilisateurs normaux plus à l'aise.

2
Leo