如何在子网站上强制“用户必须注册并登录”?

时间:2014-03-27 作者:Leo

所以现在我终于找到了可以在我的网上酒店上使用的社交网络登录插件。(Nextend插件):-)

我在主站点(这是一个多站点)上设置了“用户必须注册并登录才能发表评论”。在主站点上运行良好。

不幸的是,这没有结转到子网站。如何将此强制应用于子网站?(无需手动操作。)

还有一个小问题(我认为更容易解决):我只想在登录页面上使用社交插件登录。有没有真正简单的方法可以做到这一点?

更新:已解决。可以通过为“comment\\u registration”选项添加过滤器来完成。看见

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

抱歉吵闹了。

1 个回复
SO网友:Leo

以下是您在子网站上强制注册的操作:

/**
 * 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 );
要仅显示用于登录的社交按钮,可以使用以下方法:

/**
 * 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);
由于社交按钮的插件不会将其放置在子站点上,因此您可能希望通过主站点登录:

/**
 * 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);
这可以添加到主题函数中。php。或者加入一个插件(我还没来得及这么做)。

也许我应该补充一点,恶意用户仍然可以尝试以其他方式获取。这只是为了让普通用户更舒适。

结束

相关推荐

SSL设置:WP-LOGIN CSS不通过HTTPS加载

我有一个使用SSL的多站点设置。一切正常。访问者通过https获取所有内容。我的页面源中没有一个没有httpS的url。(包括指向css、js文件的URL)但是,一旦进入登录页面,我的所有css文件都有一个带有http的URL,而不是https。所以大多数浏览器都会屏蔽这些不安全的源代码,从而破坏了管理界面。页面本身通过https加载,所有重定向也通过https提供。我的网站url设置为https://...I\'v搜索了我的数据库和项目文件,没有对http://...什么会导致此问题?