实现wordpress内容登录或回复可见


采用短代码(简码)的形式来实现,这里命名简码为 hide ,如果重复可以换一个。

php 代码

// 复制到 主题 function.php 里即可
// 处理了管理员永远可见
add_shortcode('hide', 'qzhai_hidden_content_shortcode');
function qzhai_hidden_content_shortcode($atts, $content = null)
{
  if (is_null($content)) {
    return ''; // 内有内容不执行
  }

  $subtitle = '隐藏内容';
  $login_hide_info = '此内容登录可见';
  $reply_hide_info = '此内容回复可见';

  $show_content = false;
  $content_html = '';
  $content_html .= '<div class="qzhai-login-hide">';


  if (is_user_logged_in()) {
    $show_content = true;
  }

  if ($show_content && !current_user_can('level_10') && isset($atts['reply'])) { // 处理设置回复可见
    global $wpdb;
    $user = wp_get_current_user();
    $post_id = get_the_ID();
    try {
      $query = "SELECT `comment_ID` FROM {$wpdb->comments} WHERE `comment_post_ID`={$post_id} and `comment_approved`='1' and `comment_author_email`='{$user->user_email}' LIMIT 1";
      if (!$wpdb->get_results($query)) {
        $show_content = false;
      }
    } catch (\Throwable $th) {
      $show_content = false;
    }
  }

  if ($show_content) {
    $show_content .= '<p class="qzhai-hide-subtitle">' . $subtitle . '</p>';
    $show_content .= apply_filters('the_content', $content); // 内容用 the_content 过滤
  } else {
    if (isset($atts['reply'])) {
      return '<p class="qzhai-hide-info">' . $reply_hide_info . '</p>';
    } else {
      return '<p class="qzhai-hide-info">' . $login_hide_info  . '</p>';
    }
  }

  $content_html .= '</div>';
  return $content_html;
}

样式:

记得改一下颜色好适配你的主题,变量我都写好了。

.qzhai-login-hide {
  /* 这个颜色改成你主题的主题色会更佳 */
  --qz-hide-color: #f44336;/* 主色 */
  --qz-hide-bg-color: #fff;/* 背景  */

  padding: 50px 10px;
  border: 1px dashed var(--qz-hide-color);
  background-color: var(--qz-hide-bg-color);
  position: relative;
  margin: 20px 0;
}

.qzhai-login-hide::before {
  content: "";
  position: absolute;
  border: 1px dashed var(--qz-hide-color);
  top: 2px;
  left: 2px;
  right: 2px;
  bottom: 2px;
}

.qzhai-hide-subtitle {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translate(-50%, -50%);
  text-align: center;
  color: var(--qz-hide-color);
  background-color: var(--qz-hide-bg-color);
  padding: 5px 10px;
  font-size: 16px;
  margin: 0;
}

.qzhai-hide-info {
  margin: 0;
  text-align: center;
  font-size: 16px;
  color: var(--qz-hide-color);
}

使用方法,在编辑器使用短代码包含即可。

AD: 稳定便宜的云服务器推荐

评论
还没有评论
    发表评论 说点什么