帖子和页面的密码保护

时间:2016-06-10 作者:Paul

我需要为客户建立一个网站,在那里密码可以保护前端的某些页面和帖子。因此,访问者需要在这些页面/帖子上输入密码。

搜索并试用了两个插件“密码保护”和“智能密码页面”,但都没有成功。

我想知道是否有办法在全球范围内设置wordpress内置密码保护密码。因此,客户端只需选择是否要对页面/帖子进行保护,而不必每次都输入密码。。。这在这里不是一个选项。

此外,由于他们将更改每个术语的密码,因此能够从单个位置更改密码将是非常棒的!

如果有人能给我指出正确的方向,那将是一个很大的帮助。

非常感谢

2 个回复
SO网友:dg4220

我使用了以下方法来保护各个页面:首先将字段添加到Publish Metabox:

add_action( \'post_submitbox_misc_actions\', \'my_post_submitbox_misc_actions1\' );

function my_post_submitbox_misc_actions1(){

    echo \'<div class="misc-pub-section my-options">
    <input type="checkbox" id="fgpsn_protected_content" name="fgpsn_protected_content" value="true"\';

    if ( get_post_meta(get_the_ID(), \'fgpsn_protected_content\', true) == \'true\' ){ echo \' checked\'; }
    echo \'>
    <label for="fgpsn_protected_content">FGPSN Content</label></div>\';

}
然后保存元数据-当前的一个缺陷是必须先保存帖子。然后您可以选中并保存该框。

add_action( \'save_post\', \'fgpsn_protect_content_save\' );
function fgpsn_protect_content_save($post_id)
        {

            if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
            return;

            if ( \'page\' == $_POST[\'post_type\'] ) {
                if ( !current_user_can( \'edit_page\', $post_id ) )
                return;
            } else {
                if ( !current_user_can( \'edit_post\', $post_id ) )
                return;
            }

            /* check if the custom field is submitted (checkboxes that aren\'t marked, aren\'t submitted) */
            if(isset($_POST[\'fgpsn_protected_content\'])){

                update_post_meta($post_id, \'fgpsn_protected_content\', $_POST[\'fgpsn_protected_content\']);
                //add_post_meta($postid, \'fgpsn_update_zillow_feed_result\', 1, true );
            }
            else{

                update_post_meta($post_id, \'fgpsn_protected_content\', \'false\');
            }

        }
最后,添加检查:

add_action( \'get_header\', \'site_access_filter\' );
function site_access_filter() {

    if ( get_post_meta(get_the_ID(), \'fgpsn_protected_content\', true) == \'true\' &&  is_user_logged_in() === false ) {
        wp_redirect( \'http://fgpsn.com/login\' ); exit;

    } 

}
显然,我将用户重定向到登录页面,但您可以从这里以任何方式管理它。

SO网友:rémy

您可以创建一个模板,然后为受保护的站点选择该模板。您只需复制默认模板,然后添加自定义登录检查:

<?php if ( !is_user_logged_in() ) :
  if ( \'failed\' == get_query_var( \'login\', \'\' ) ) :
    <h2 class="red">Wrong credentials !</h2>
  endif;
  wp_login_form( $args );
else:
  the_content();
endif; ?>
需要更多的错误处理等。。。您可以看到$args的参考here.

并将其添加到Functions中。自定义查询变量的php:

function my_front_end_login_fail( $username ) {
     $referrer = wp_get_referer();
     if ( !empty($referrer) && !strstr($referrer,\'wp-login\') && !strstr($referrer,\'wp-admin\')     ) {
          if (!strstr($referrer,\'?login=failed\')) {
            $referrer .= \'?login=failed\';
          }
          wp_redirect( $referrer );
          exit;
     }
}
add_action( \'wp_login_failed\', \'my_front_end_login_fail\' );

function add_query_vars_filter( $vars ){
  $vars[] = \'login\';
  return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );

And, this would require, that you create a general user, which could be used to login.

您也可以使用post\\u password\\u required()代替user\\u is\\u logged\\u in()。

相关推荐

是否有必要清理wp_set_password用户输入?

我正在尝试向WP注册表添加密码表单。请参见下面的代码。我想知道是否需要清理这个特定的用户输入?(如果是,怎么做?)如果我理解正确,WP为某些东西内置了净化功能,密码可能就是其中之一。对吗?WP会在将其添加到数据库之前自动对其进行清理吗?add_action( \'register_new_user\', \'registration_change_pass\', 10, 99 ); function registration_change_pass( $user_id ) { &