我的想法是,访问者在页面上输入密码,然后在wordpress帖子上加载属于自己的密码(如果有)。
代码如下:
第页表单:
<form method="post" action="">
<input type="password" name="passwordfield">
<input type="hidden" name="homepagepassword" value="1">
<input type="submit" value="Submit">
</form>
功能。php:
function dopasswordstuff(){
if(isset($_POST[\'homepagepassword\'])){
$post_password = $_POST[\'passwordfield\'];
global $wpdb;
$post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %s", $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();
}
}
add_action(\'init\',\'dopasswordstuff\');
无论我做什么,也不管我输入什么密码,该功能都会引导我找到博客上的第一篇文章。有人能解释一下吗?
最合适的回答,由SO网友:s_ha_dum 整理而成
以下是您完成这项工作所需的全部内容,当然还有您的实际形式:
function dopasswordstuff(){
if(isset($_POST[\'homepagepassword\'])){
global $wpdb;
$post_password = trim($_POST[\'passwordfield\']);
$post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %s", $post_password) );
if (!empty($post_id)) {
wp_redirect(get_permalink($post_id));
}
exit;
}
}
add_action(\'template_redirect\',\'dopasswordstuff\');
我利用以下事实大大简化了您的功能:
get_permalink
将接受post ID a参数。
我迷上了template_redirect
而不是init
这似乎更合适。
SO网友:pipedragon72
我想我用这个使用cookies的代码找到了答案(我没有写!),然而,如果有人输入了错误的密码,我会看到白色的死亡屏幕,因此如果有人知道如何重新添加代码以进行重定向,那将是非常棒的。
function dopasswordstuff(){
if(isset($_POST[\'homepagepassword\'])) {
global $wpdb;
$post_password = trim($_POST[\'passwordfield\']);
$post_id = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_password = %s", $post_password) );
if (!empty($post_id)) {
if ( empty( $wp_hasher ) ) {
require_once( ABSPATH . \'wp-includes/class-phpass.php\' );
// By default, use the portable hash from phpass
$wp_hasher = new PasswordHash(8, true);
}
// 10 days
setcookie( \'wp-postpass_\' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $post_password ) ), time() + 864000, COOKIEPATH );
wp_redirect(get_permalink($post_id));
}
exit;
}
}
add_action(\'template_redirect\',\'dopasswordstuff\');