是否可以为受Wordpress密码保护的页面创建其他自定义消息?

时间:2019-07-25 14:12:05

标签: php html css wordpress

我有一个Wordpress网站,其中有2个不同的页面,均使用本机Wordpress密码保护功能进行了保护。

我正在寻找一种方法(如果存在)针对不同受密码保护的页面以不同的方式自定义密码字段上方的文本。

我找到了一个用自定义HTML代码替换默认文本的插件,但是随后此消息显示在所有受密码保护的页面上。

我要实现的目标是,受密码保护的页面A在密码字段上方显示“消息A”,而受密码保护的页面B在密码字段上方显示“消息B”,而目前所有密码-受保护的页面显示相同的消息。

有人知道是否有办法实现这一结果?预先感谢!

2 个答案:

答案 0 :(得分:1)

有可能。

您必须将此代码添加到您的 functions.php 中:

add_filter( 'the_password_form', 'custom_password_protected_form' );

function custom_password_protected_form($output) {
    global $post;

    switch ($post->post_name) {
        case 'page-a':
            $replacement_text = 'Message A';
            break;
        case 'page-b':
            $replacement_text = 'Message B';
        case 'default':
            $replacement_text = '';
    }

    if (!empty($replacement_text)) $output = str_replace(__( 'This content is password protected. To view it please enter your password below:' ), $replacement_text, $output);
    return $output;
}

在WP 5.2.2上进行了测试

答案 1 :(得分:0)

进入the_password_form过滤器并编写您自己的自定义密码形式,作为默认形式的一种形式。然后,您可以添加任何想要的自定义逻辑,例如检测页面并输出不同的消息。

在我的示例中,我使用is_page()确定页面,但是您可以在此处使用任何逻辑。

function my_custom_password_form() {
  global $post;

  // custom logic for the message
  $password_form_message = is_page('Private Page One') ?
    __( "MESSAGE FOR ONE PAGE... This post is password protected. To view it please enter your password below:" ) :
    __( "MESSAGE FOR ANOTHER PAGE... This post is password protected. To view it please enter your password below:" );

  // put together the custom form using the dynamic message
  $label = 'pwbox-'.( empty( $post->ID ) ? rand() : $post->ID );
  $form = '<form class="protected-post-form" action="' . get_option('siteurl') . '/wp-pass.php" method="post">
  ' . $password_form_message . '
  <label for="' . $label . '">' . __( "Password:" ) . ' </label><input name="post_password" id="' . $label . '" type="password" size="20" /><input type="submit" name="Submit" value="' . esc_attr__( "Submit" ) . '" />
  </form>
  ';
  return $form;
}
add_filter( 'the_password_form', 'my_custom_password_form' );