0

我正在尝试设置一个带有单个密码输入字段的页面,该页面在提交时会将用户重定向到给定密码的相应帖子。

认为这样的事情会起作用:

模板:

    <form action="" method="POST">
        <input type="password" name="post_password" value=""/>
        <input type="submit" name="submit" value="Submit"/>
    </form>
    <?php             
            $result = $wpdb->get_results("SELECT id FROM wp_posts WHERE post_password = '{$_POST['post_password']}'");
            if ($result) {
                $location = $result[0]->id;
                do_action('init', $location); 
            } else {
                echo '<p>Invalid password</p>';
            }  

    ?>

函数.php:

function process_post($arg0){    
    if (isset($arg0) {
        wp_safe_redirect(get_bloginfo('url'). "/?page_id=" . $arg0 );   
        exit();
    }
}
add_action('init', 'process_post', 10, 1);

但不起作用。认为使用 init 钩子可以避免标头信息发送错误,但我仍然得到它。

仍然需要实际将提交的密码设置为 cookie 值 - 是否有 WP 功能可以做到这一点?

4

1 回答 1

0

输出缓冲发挥了重要作用 - 添加了该操作,并在重定向之前设置了密码 cookie。然后将目标页面包装在 post_password_required 检查中,如果未设置密码,则重定向回父页面。一切都很好,正是我想要实现的(除了如果您登录到 Wordpress 并尝试访问受保护的帖子,这对我的上下文无关紧要)。

函数.php:

function process_post($arg0, $arg1){
    if ($arg0 != "") {
        setcookie('wp-postpass_' . COOKIEHASH, wp_hash_password( $arg1 ), time() + 60, COOKIEPATH);
        wp_safe_redirect(get_bloginfo('url'). "/gallery/" . $arg0 );
        exit;  
    }
}
add_action('init', 'process_post', 10, 2);

function app_output_buffer() {
  ob_start();
}
add_action('init', 'app_output_buffer');

模板:

    <form action="" method="POST">
        <input type="password" name="post_password" value=""/>
        <input type="submit" name="submit" value="Submit"/>
    </form>
    <?php             
        if (isset($_POST['post_password']) ) {
            $result = $wpdb->get_results("SELECT post_name FROM wp_posts WHERE post_password = '{$_POST['post_password']}'");
            if ($result) {
                $location = $result[0]->post_name;
                do_action('init', $location, $_POST['post_password']); 
            } else {
                echo '<p>Invalid password</p>';
            }  
        }            
    ?>
于 2013-07-06T21:03:04.317 回答