WordPress文章密码保护Ajax设置

wordpress 中对于文章有一个密码访问的功能,后台发布文章时填写密码即可设置。在 WordPress 中 Ajax 的应用越来越多,要做到密码文章查看无刷新应用,请看下面的代码:

  1. add_action('wp_ajax_do_post_password', 'do_x_post_password_cb');
  2. add_action('wp_ajax_nopriv_do_post_password', 'do_x_post_password_cb');
  3. function do_x_post_password_cb() {
  4.     require_once( ABSPATH . 'wp-includes/class-phpass.php' );
  5.     $wp_hasher = new PasswordHash(8, true);
  6.     // 10 天
  7.     setcookie( 'wp-postpass_' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST['pass'] ) ), time() + 864000, COOKIEPATH );
  8. 
    
  9.     $_COOKIE['wp-postpass_' . COOKIEHASH] = $wp_hasher->HashPassword( stripslashes( $_POST['pass'] ) );
  10.     $q = new WP_Query( "p={$_POST['pid']}" );
  11.     if ( $q->have_posts() ) : while( $q->have_posts() ) : $q->the_post();
  12.         $error = false;
  13.         if ( post_password_required() ) {
  14.             $error = true;
  15.         }
  16.         ob_start();
  17.         echo '<a href="'; the_permalink(); echo '">';
  18.         the_title();
  19.         echo '</a>';
  20.         $title = ob_get_clean();
  21.         @ob_end_flush();
  22.         ob_start();
  23.         the_content();
  24.         $content = ob_get_clean();
  25.         @ob_end_flush();
  26.     endwhile; endif;
  27.     wp_reset_postdata();
  28.     $return = array( 'title' => $title, 'content' => $content, 'error' => '' );
  29.     if ($error)
  30.         $return['error'] = '密码不正确';
  31.     die( json_encode( $return ) );
  32. }

实现功能所必须的 php,加载到你的 functions.php 中。这里设置了 10 天的 cookie,输入正确密码后 10 天内不需要再次输入,可根据你自己的需要更改。

  1. jQuery(document).ready( function($) {
  2.     $('.post-password-required').on( 'submit', 'form[action$="postpass"]', function( ev ) {
  3.     ev.preventDefault();
  4.     var id = $(this).find('label').attr('for').replace('pwbox-', ''),
  5.         ajaxurl = barley.ajaxurl,
  6.         loading = '';
  7.         $(this).find('input[type="submit"]').css({
  8.             'background-image': 'url('+loading+')',
  9.             'background-position': '92% 50%',
  10.             'background-repeat': 'no-repeat',
  11.             'padding-right': '25px'
  12.         }).attr('disabled','disabled');
  13.         $.post( ajaxurl, {
  14.             action: 'do_post_password',
  15.             pass: $(this).find('input[name="post_password"]').val(),
  16.             pid: id
  17.         }, function( response ) {
  18.             if ( response.error != '' ) {
  19.                 response.content = '<p class="error" style="background:#fcc;padding:10px;">'+ response.error+'</p>' + response.content;
  20.             } else {
  21.                 $('#post-'+id).find('.posttitle').HTML( response.title );
  22.             }
  23.             $('#post-'+id).find('.postcontent').html( response.content );
  24.         }, 'json' );
  25.     });
  26. });

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/96008

WordPress安全防护插件
服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

电子邮件地址不会被公开。 必填项已用*标注

51建站客服微信二维码
点击这里购买