是否可以根据在主页上输入的密码将用户引导到某个帖子?

时间:2011-07-08 作者:Travis Northcutt

我希望能够有这样一个工作流程:

创建帖子并为其分配密码在主页上有一个单字段表单用户在主页上输入密码,然后发送到相应的帖子有人知道这是否可行吗?

5 个回复
最合适的回答,由SO网友:Travis Northcutt 整理而成

多亏了汤姆的帮助,我的结局是这样的。这使用了内置的密码保护功能来保护帖子,因此访问者只需在主页上输入密码,然后就可以访问帖子,并且可以直接查看帖子内容,而无需重新输入密码。

在主页上:

<form method="post" action="">
    <input type="password" name="passwordfield">
    <input type="hidden" name="homepagepassword" value="1">
    <input type="submit" value="Submit">
</form>
在中functions.php (当然可以将其转换为插件):

if(isset($_POST[\'homepagepassword\'])){

    global $wpdb;

    $post_password = $_POST[\'passwordfield\'];
    $post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %d", $post_password) );
    $q = new WP_Query( \'p=$post_id\' );
    if($q->have_posts()){
        while($q->have_posts()){
            $q->the_post();
            wp_redirect(get_permalink());
            die();
        }
    } else {
        // oh dear, there isnt a post with this \'password\', put a redirect to a fallback here
        wp_redirect(\'http://www.google.com\');
        die();
    }
    wp_reset_query();
}

SO网友:anu

是的,但您需要保留密码如何映射到帖子的详细信息。

因此:

将映射存储在某个最简单的位置,作为哈希/键值对(密码->post\\u id)存储wp_redirect() 重定向用户

SO网友:Tom J Nowell

在主页上:

<form method="post" action="">
    <input type="password" name="passwordfield">
    <input type="hidden" name="homepagepassword" value="1">
    <input type="submit" value="Submit">
</form>
放入函数。php(如果文件不存在,请创建该文件并添加<?php 在顶部)或插件文件中:

function doPasswordStuff(){
    if(isset($_POST[\'homepagepassword\'])){
        $pass = $_POST[\'passwordfield\'];
        $q = new WP_Query( array( \'meta_key\' => \'password_value\', \'meta_value\' => $pass));
        if($q->have_posts()){
            while($q->have_posts()){
                $q->the_post();
                wp_redirect(get_permalink());
                die();
            }
        } else {
            // oh dear, there isnt a post with this \'password\', put a redirect to a fallback here
            wp_redirect(\'http://www.google.com\');
            die();
        }
        wp_reset_query();
    }
}
add_action(\'init\',\'doPasswordStuff\');
使用键/名称在帖子中添加自定义字段password_value 该值是您的密码。

如果要跳过此步骤并使用Wordpress用于直接锁定帖子的密码,则需要使用$wpdb 和SQL查询,并对之前检查的密码进行哈希运算。

edit: 我已将其更新为使用“init”挂钩,您可以将代码放在插件文件中,而不是函数中。php,如果您希望它独立于主题。(尽管您仍然需要将表单标记放在某个地方)。

SO网友:hakre

我会用插件来代替。该插件仍然可以与帖子共享密码,并适当设置cookie,以便在不输入密码的情况下无法访问页面。

一个插件,因为要有一个手动映射,如果没有这样的映射,查找哪个密码属于哪个帖子将非常昂贵。在像主页这样的中心位置没有用处。

SO网友:Chris

您为每个帖子创建的密码是否唯一?如果没有,您将如何识别用户正在寻找的帖子?

假设您保持每个密码唯一,我会将密码存储为post meta。您可以创建custom meta box 允许输入/存储密码。

然后,当用户在主页上输入密码时:

清理用户输入(Duh!)WP_Query. 在此查询中,您可以使用meta\\u query参数来搜索具有用户输入的密码的帖子

结束

相关推荐

Merge posts plugin?

有谁知道有一个插件能够将帖子元从一篇帖子合并到另一篇帖子中吗?我正在重新发布浮木联系人管理器主题,并试图找到解决重复联系人问题的方法。显然,这个问题可能影响的人远远不止我自己。:)