1

这是一个有趣的问题,但可能只有天才才能解决这个问题。这是一个奇怪的。

需要一点 javascript 和对我现有的 php wordpress 功能进行一点调整。

我有一个使用此功能对公众锁定的 wp 网站...

add_action('get_header', 'wpq_member_only_site');
function wpq_member_only_site() {

    if ( !is_user_logged_in() ) {

        $redirect_after_login = get_home_url();

        $login_url = wp_login_url( $redirect_after_login );

        wp_redirect( $login_url, 302 );
        exit;
    }

}

...它将未登录的用户重定向到登录表单。

我的问题是,我想使用这样的 URL 变量...

http://example.com?user=media&password=23747

...不知何故,(我猜)通过函数将其传递到登录页面 URL ...

http://example.com/wp-login.php?redirect_to=http%3A%2F%2Fexample.com&user=media&password=23747

...所以我的 login_head 中的脚本可以使用,并自动预填充登录表单。

我将使用此函数将脚本插入到我的 login_head 中...

function my_login_head() {
  echo '

      <!-- script here -->
  ';
}
add_action('login_head', 'my_login_head');

有人认为他们可以帮助我吗?或者知道它是否可能。

这个想法是,所以我可以使用这个 URL 让人们无需知道用户名或密码即可访问。

任何想法或帮助都会很棒,谢谢!

4

2 回答 2

1

对于这样的网址...

http://example.com/wp-login.php?ul=media&up=5434535

function my_login_head() {
        if(isset($_GET['ul'])&& isset($_GET['up'])){
                $ul=esc_attr($_GET['ul']);
                $up=esc_attr($_GET['up']);
                echo '<script>
                        window.onload = function() {
                                var ul=document.getElementById("user_login");
                                ul.value = "'.$ul.'";
                                var up=document.getElementById("user_pass");
                                up.value = "'.$up.'";
                        }
                </script>';
        }
}
add_action('login_head', 'my_login_head');


如果您想使用如下网址:

http://example.com/?ul=media&up=5434535

要将非成员重定向到预先填写的登录表单,您可以使用原始“wpq_member_only_site”函数的修改版本:

add_action('get_header', 'wpq_member_only_site');
function wpq_member_only_site() {
        if ( !is_user_logged_in() ) {
                $redirect_after_login = get_home_url();
                $autofill="";
                if(isset($_GET['ul']) && isset($_GET['up'])){
                        $ul=esc_attr($_GET['ul']);
                        $up=esc_attr($_GET['up']);
                        $autofill="&ul=".$ul."&up=".$up;
                }
                $login_url = wp_login_url( $redirect_after_login ).$autofill;
                wp_redirect( $login_url, 302 );
                exit;
        }
}
于 2012-11-08T00:08:00.603 回答
0

写完后,您似乎可以通过另一种方法来做到这一点:只需调用wp_signon()函数,因此您无需弄乱 wp-login.php。只需 wp_signon($credentials) 然后 wp_redirect($wherever)。

您可以在任何页面上执行此操作,因此您的拇指驱动器技术可以链接到site.com/member-login/?query=string. /member-login将是处理此信息的自定义模板。

我可能会建议:创建一个散列以使其更加模糊。然后它看起来像: /member-login/?x=Ajzf29xjz4jfjAJkdSlj3或其他。

无论如何......回到我原来的答案。听起来你很接近...

wp_redirect('wp-login.php?redirect_to=http%3A%2F%2Fexample.com&user=media&password=23747');

在您的登录头函数中,尝试追踪这些$_GET变量以确保它们通过。我认为这个页面上没有加载 jQuery,所以<script>如果你要使用它,你会想要回显一个 jQuery 包含。

您的登录头功能:

<script src="jquery.js"></script>
<script>
$(document).ready(function(){
    $("form selector").val("<?php echo $_GET['user']; ?>");
});

类似的东西?

事情是这样的:

他们仍然必须单击提交按钮。

您知道您可以使用简单的函数调用登录用户吗? wp_signon()

于 2012-11-07T23:06:03.793 回答