在受密码保护的页面上添加错误消息

时间:2012-11-02 作者:ogni

我用密码保护了一个页面。我想在插入的密码不正确时添加一条简短的错误消息。

我该怎么做?

我添加此代码是为了在我的页面上显示和自定义表单。

我的functions.php

add_filter( \'the_password_form\', \'custom_password_form\' );
function custom_password_form() {
global $post;
$label = \'pwbox-\'.( empty( $post->ID ) ? rand() : $post->ID );
$o = \'<form class="protected-post-form" action="\' . get_option(\'siteurl\') . \'/wp-pass.php" method="post">\' . 
\'<p class="glossar-form-p">Alle weiteren Glossarbeiträge sind durch ein Passwort geschützt. </p>\' . 
\' <label for="\' . $label . \'">\' . \' </label><input name="post_password" id="\' . $label . \'" type="password" size="20" />
<input type="submit" name="Submit" value="\' . esc_attr__( "Login" ) . \'" />
</form>
\';
return $o;
}

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

最新输入的密码作为安全哈希存储在名为\'wp-postpass_\' . COOKIEHASH.

调用密码表单时,该cookie已validated WordPress已经发布了。所以你只需要检查一下exists: 如果是,并且显示了密码表单,则表明密码错误。

add_filter( \'the_password_form\', \'wpse_71284_custom_post_password_msg\' );

/**
 * Add a message to the password form.
 *
 * @wp-hook the_password_form
 * @param   string $form
 * @return  string
 */
function wpse_71284_custom_post_password_msg( $form )
{
    // No cookie, the user has not sent anything until now.
    if ( ! isset ( $_COOKIE[ \'wp-postpass_\' . COOKIEHASH ] ) )
        return $form;

    // Translate and escape.
    $msg = esc_html__( \'Sorry, your password is wrong.\', \'your_text_domain\' );

    // We have a cookie, but it doesn’t match the password.
    $msg = "<p class=\'custom-password-message\'>$msg</p>";

    return $msg . $form;
}

SO网友:Stan Derksen

后续跟进自fuxia\'s答案。完整的代码段(包括检查页面加载是否来自同一页面)是:

add_filter( \'the_password_form\', \'wpse_71284_custom_post_password_msg\' );

/**
 * Add a message to the password form.
 *
 * @wp-hook the_password_form
 * @param   string $form
 * @return  string
 */
function wpse_71284_custom_post_password_msg( $form )
{
    // No cookie, the user has not sent anything until now.
    if ( ! isset ( $_COOKIE[ \'wp-postpass_\' . COOKIEHASH ] ) )
        return $form;

    // The refresh came from a different page, the user has not sent anything until now.
    if ( ! wp_get_raw_referer() == get_permalink() )
        return $form;

    // Translate and escape.
    $msg = esc_html__( \'Sorry, your password is wrong.\', \'your_text_domain\' );

    // We have a cookie, but it doesn’t match the password.
    $msg = "<p class=\'custom-password-message\'>$msg</p>";

    return $msg . $form;
}
一定要使用wp_get_raw_referer() 而不是wp_get_referer() 因为后者会回来false 如果当前页面和参考页面相同。

SO网友:Tuhin

也许真的很晚才回答。您需要执行以下操作。由于没有默认的验证方法,您需要遵循几个步骤。这里我将使用session变量检查生成的cookie是否匹配。首先需要启动会话。

add_action(\'init\', \'myStartSession\', 1);
add_action(\'wp_logout\', \'myEndSession\');
add_action(\'wp_login\', \'myEndSession\');
function myStartSession() {
    if(!session_id()) {
        session_start();
    }
}
function myEndSession() {
    session_destroy ();
}
然后在要显示错误消息的地方使用以下代码。

if ( post_password_required() ) {
       $session_id = \'wp-postpass_\' . get_the_ID();
       //onload
       $current_cookie = wp_unslash($_COOKIE[ \'wp-postpass_\' . COOKIEHASH ]);
       //get old cookie 
       $old_cookie = isset( $_SESSION[ $session_id ] ) ? $_SESSION[ $session_id ] : \'\';
       //set new session
       $_SESSION[ $session_id ] = $current_cookie;
       if ( $current_cookie != $old_cookie && !empty( $old_cookie ) ){
           error_notification(\'<b>Error!</b> Authentication failed!\');
       }
   }
就这样!!

结束

相关推荐

如何在Contact Form 7-Forms中使用其他快捷码?

我注意到任何不是联系人表单7内置短代码一部分的短代码都不起作用。例如:我试图在contact form 7中的表单元素之间使用手风琴快捷码。但是代码不起作用。如何在不编辑联系人表单7核心文件的情况下解决此问题?