如何根据登录屏幕上输入的密码重定向到密码页面

时间:2014-02-17 作者:Thought Space Designs

所以我在找peter\'s login redirect, 但略有不同。我想为摄影网站建立一个客户端门户,我认为最好的方法是为客户端添加一个自定义帖子类型,并使用高级自定义字段添加CPT所需的所有额外功能。添加新客户端时,将为客户端的访问页创建一个新URL。看起来很简单。

然后,我们可以对每个页面进行密码保护,并将密码发送给客户端。这一切都很好,但是我也想在网站的主导航中附带一个“登录”按钮。当有人单击此按钮时,我希望他们看到一个密码表单,可以在其中输入我们在电子邮件中发送给他们的密码。根据他们输入的密码,他们将被重定向到相应的CPT页面。有人知道我该怎么做吗?我假设我可以运行一个查询来根据密码获取帖子,但我不确定DB中使用的加密是否允许这样做。如有任何见解,将不胜感激。

2 个回复
最合适的回答,由SO网友:Thought Space Designs 整理而成

我回答了自己的问题。这是一个插件,它几乎完全满足了我的需要,但我在自定义帖子类型上需要相同的功能:

Smart Passworded Pages

我只是修改了插件,并制作了自己的插件供个人使用。

编辑有用性:

此插件仅包含一个PHP文件。此文件中有一个名为“smartPWPages”的类,它包含3个函数。在“process\\u form”函数中,调用了get\\u pages函数。在版本3.8.1中,插件无法立即运行,因此我从get\\u pages调用中删除了“child\\u of”和“parent”参数。删除这些参数后,插件可以工作,但仅适用于页面。为了使其适用于自定义帖子类型,只需将“post\\u type”参数更改为自定义帖子类型,而不是“page”。

这些细微的调整使我能够使用自定义帖子类型设置客户端门户,该类型有一个单独的登录页面,用户可以根据输入的密码重定向到其相应的区域。我可以看到它在项目管理系统等项目中有很多用途。绝对是一个有用的插件。

SO网友:Morgan Estes

这是我提出的解决方案,它依赖于数据库中已有的信息。

后台

每个受密码保护的帖子都将密码以明文形式存储在wp_posts 表(在post_password 列)。我们可以使用它来查询数据库中任何分配了该密码的帖子,并根据该密码获取帖子信息。从那里,我们可以重定向到受密码保护的帖子。

假设/约束

OP表示,客户将使用自定义登录表单输入其特殊密码。我假设表单已经创建,并且可以使用GET请求发送密码,因为它已经是纯文本。

OP还指出,保护帖子/页面的每个密码都是唯一的。我假设唯一密码是与此答案分开生成的。

它的工作原理client_key 发送(通过表单获取或通过链接)并使用get_query_var(). 如果存在,请检查wp_posts 密码设置等于的第一篇帖子的表client_key 并将行作为对象返回。

健全性检查:如果已创建对象,请创建几个变量以在JavaScript函数中使用。

回声ascript 元素,该元素将运行POST函数wp-login.php. 这模仿了首次访问受密码保护的页面时通常会发生的表单发布。在那里,客户端将被提示输入查看帖子内容的密码,一旦给了密码,就会创建一个cookie以允许将来访问内容。此函数在后台执行相同的表单提交,重定向到相应的帖子(基于GUID)。

最后,仅在以下情况下在站点前端运行该功能wp_head 被激发(当jQuery[通常]被加载时)。

代码

<?php
/**
 * Add our custom query string to the global query_vars.
 *
 * @param array $vars The global vars used throughout WP.
 *
 * @return array
 */
function wpse134962_add_query_vars_filter( $vars ) {
    $vars[] = \'client_key\';

    return $vars;
}

add_filter( \'query_vars\', \'wpse134962_add_query_vars_filter\' );

/**
 * Redirect to a password-protected page based on the query string.
 *
 * If client_key is passed in the query string, check the database for a post that
 * has a password assigned that equals the client_key. If one is found, submit the
 * login form to create the cookie that allows entry, then redirect to the post.
 */
function wpse134962_password_redirect() {
    $client_key = get_query_var( \'client_key\' ) ? get_query_var( \'client_key\' ) : \'\';

    if ( ! empty( $client_key ) ) {
        /** @var wpdb $wpdb */
        global $wpdb;
        $query          = $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_password = %s", $client_key );
        $password_posts = $wpdb->get_row( $query );

        if ( isset( $password_posts ) ) {
            $post_id   = $password_posts->ID;
            $login_url = site_url( \'wp-login.php\' );

            echo <<<HTML
<script>
jQuery(function() {
var postURL = "$login_url?action=postpass",
    postData = {
        post_password: "$client_key"
    },
    postRedirect = function() {
        document.location = "{$password_posts->guid}";
    };
jQuery.post( postURL, postData, postRedirect() );
})();
</script>
HTML;

        }
    }

}

if ( ! is_admin() ) {
    /** Only fire on the front end of the site. */
    add_action( \'wp_head\', \'wpse134962_password_redirect\' );
}

结束

相关推荐

无法使用BAW登录注销插件添加‘LoginLogout’链接

我安装并激活了“BAW登录/注销”插件,在屏幕上显示登录或注销链接。但这对我不起作用。有人能帮我吗我遵循的步骤是:1)安装并激活“BAW Login/logout”插件2)在菜单面板中,我选择“Login/logout”值并单击“Add to Menu”(添加到菜单)3)将“Login/logout”(登录/注销)选项添加到菜单结构中4)我保存了菜单5)我刷新了网站。但找不到“Login”或“Logout”链接