好久没有更新文章了,这次完善了下主题的文章回复可见,由于次站才用的是全站ajax刷新,所以在文章回复可见时由于种种原因,需要处理的细节很多,这里总结先实现原理:

1、首先我们常规实现ajax评论,然后在ajax评论加入以下代码,已注释

		// 回复后可见
	$is_reply = get_post_meta ( $post->ID, 'need_reply', true );
	$is_replied = true; // 重新刷新页面
	if ($is_reply) {
		$ids = array ();
		if (! empty ( $_COOKIE ['WP_REPLIED'] )) {
			$ids = explode ( ',', trim ( $_COOKIE ['WP_REPLIED'] ) );
		}
		if (in_array ( $post->ID, $ids )) {
			$is_replied = false;
		}
		$ids [] = $post->ID;
		$ids = array_unique ( $ids );
		$ids = implode ( ',', $ids );
		setcookie ( 'WP_REPLIED', $ids, time () + 86400 * 30, '/' );
	}

2、在文章发布前我们先进行一次文章处理

//保存文章前的处理
function idream_save_post($post_id) {
	// 判断是否有 回复可见内容
	if (isset($_POST['content'])) {
	
		if (preg_match ( '/<\!--idream_hide_start-->([\s\S]*)<\!--idream_hide_end-->/Ui', $_POST['content'], $need_reply )) {
			if (isset ( $need_reply [1] )) {
				update_post_meta ( $post_id, 'need_reply', '1' );
			}
		} else {	
			delete_post_meta ( $post_id, 'need_reply' );
		}
		
		return $post_id;
	}
}
add_action( 'save_post', 'idream_save_post' );
//自动生成文章目录、内容回复可见、生成关键词内链
function idream_the_content($content) {
	if (is_single ()) {
		// 回复可见
		$preg = '/<\!--idream_hide_start-->([\s\S]*)<\!--idream_hide_end-->/Ui';
		if (preg_match ( $preg, $content, $hide_content )) {
			$replace = '
如果您要查看本文隐藏内容请 回复
'; if (! empty ( $_COOKIE ['WP_REPLIED'] ) && $post_ids = explode ( ',', trim ( $_COOKIE ['WP_REPLIED'] ) )) { if (in_array ( get_the_ID (), $post_ids )) { $content = preg_replace ( $preg, '$1', $content ); } else { $content = preg_replace ( $preg, $replace, $content ); } } else { $content = preg_replace ( $preg, $replace, $content ); } } } return $content; } add_filter( 'the_content', 'idream_the_content' );

总结这样基本实现了文章在发布前先进行判断是否带有回复可见按钮,然后在进行判断,后面我们在文章发布以后会自动加入回复可见参数,在前台我们经过参数判断是否进行ajax刷新即可。

3、演示

此部分已被隐,回复可见

如果您要查看本文隐藏内容请 回复

正文到此结束

留言

1条评论

LEAVE A REPLY

  • face face face face face face face face face face face face face face face face face face face face face face face face face