我正在尝试设置一个带有单个密码输入字段的页面,该字段在提交时会将用户重定向到给定密码的相应帖子。
认为这样的东西会起作用:
模板:
<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>';
}
?>
Functions.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函数可以做到这一点?
输出缓冲带来了所有的不同-添加了该操作,并在重定向之前设置了后密码cookie。然后,目标页面被包装在post_password_required检查中,如果没有设置密码,则重定向回父页面。一切都很好,这正是我想要实现的(除了如果你登录Wordpress并试图访问一个受保护的帖子,这不起作用之外,这对我的上下文来说并不重要)。
Functions.hp:
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>';
}
}
?>