wordpress给文章创建密码的两种方式(非插件)

用户在浏览我们wordpress网页的时候,有些内容我们需要加密的,不是直接公开的,这时候可以给页面中设定密码访问,输入指定的密码才可以显示内容,这里介绍两种方式给wordpress文章创建密码,都不使用插件。

首先wordpress的文章添加密码是如下图所示:

第一种方法:使创建密码的帖子不被普通访客可见,在functions.php中添加如下代码
function hx_add_password($where){
    global $wpdb;  //使用wordpress内置查询对象
    return $where .= " AND {$wpdb->posts}.post_password != '' ";
}

function hx_out_password(){
    if (!is_single() && !is_page() && !is_admin()){
        add_filter( 'posts_where' ,'hx_add_password');
    }
}

add_action('pre_get_posts','hx_out_password');

讲解一下上面的这段代码,第一段的函数是将更改wordpress主题的拼接sql查询语句,意思是查询password字段不为空的数据,第二段函数是将第一个函数作为钩子函数挂载在wordpress主题的查询拼接sql上,目的是只在wordpress的归档页和wordpress的列表页可以执行此查询,最后一句就是我们熟悉的pre_get_posts钩子,将上面的查询挂载一下,默认的posts查询便会被更改。

第二种方法:这个是在列表中正常显示,文章也正常显示,只是wordpress文章创建密码的部分不显示

function hx_action_post_password($atts, $content=null){
    extract(shortcode_atts(array('key'=>null), $atts));
    if (isset($_POST['hx_password'])){
        if($_POST['hx_password']==$key){
            return '
      <div class="hx_password_body">'.$content.'</div>
    ';
        }else{
            return '
      <script>
        alert("输入的密码错误");
      </script>
    ';
        }
    }
    else{
        return '
      <form class="hx_enter_password" action="'.get_permalink().'" method="post">
      <input type="password" name="hx_password" size="20" placeholder="please input password"/>
      <input type="submit" value="submit" />
      </form>
    ';
    }
}
add_shortcode('hx_pwd_safe','hx_action_post_password');

function hx_tag_password() {
    if (wp_script_is('quicktags')){
        ?>
        <script type="text/javascript">
            QTags.addButton( 'hx_pwd_safe', '密码保护', '【hx_pwd_safe key="输入密码"]','[/hx_pwd_safe】' );
        </script>
        <?php
    }
}
add_action('admin_print_footer_scripts', 'hx_tag_password' );

这里设置后会在文章的展示页面中出现输入密码的选项框。输入正确后才会显示密码保护的内容,这里有两个地方需要注意,一个是wordpress自定义短代码,另外一个是钩子函数的使用。短代码在文章详情中添加如下:

[hx_pwd_safe key="保护密码"][/hx_pwd_safe]

把保护的内容放在短代码的中间即可,可以是获取的字段数据,也可以是普通的文本数据。

我爱主题网 自2012
主题:260+ 销售:1000+
兼容浏览器

电话咨询

7*12服务咨询电话:

133-7205-6573

微信咨询