零基础建站培训介绍

当前位置:

WordPress 搜索功能开发:一篇自动跳转、回复的评论加@

以下是5个在Wordpress 搜索功能开发过程中用到的小功能代码。

第一个:搜索结果只有一篇文章时自动跳转到文章


function Bing_redirect_single_post() {
global $wp_query;
if ($wp_query->post_count == 1 && $wp_query->max_num_pages == 1) {
wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
exit;
}
}
if( is_search() ) add_action('template_redirect', 'Bing_redirect_single_post');

第二个:回复的评论加at


function Bing_comment_add_at( $comment_text, $comment = '') {
if( $comment->comment_parent > 0) {
$comment_text = '<a class="comment_at" href="#comment-' . $comment->comment_parent . '">@'.get_comment_author( $comment->comment_parent ) . '</a> ' . $comment_text;
}
return $comment_text;
}
add_filter( 'comment_text' , 'Bing_comment_add_at', 20, 2);

第三个:提高搜索结果相关性


function search_orderby_filter( $orderby = '' ){
global $wpdb;
$keyword = $wpdb->prepare($_REQUEST['s']);
return "((CASE WHEN {$wpdb->posts}.post_title LIKE '%{$keyword}%' THEN 2 ELSE 0 END) + (CASE WHEN {$wpdb->posts}.post_content LIKE '%{$keyword}%' THEN 1 ELSE 0 END)) DESC,
{$wpdb->posts}.post_modified DESC, {$wpdb->posts}.ID ASC"
;
}
if( is_search() ) add_filter('posts_orderby_request', 'search_orderby_filter');

第四个:搜索结果只限文章


function Bing_search_filter_page( $query ){
if ( $query->is_search ) {
$query->set('post_type', 'post');
}
return $query;
}
if( is_search() ) add_filter('pre_get_posts','Bingsearch_filter_page');

第五个:垃圾评论拦截


if( Bing_get_panel('comment_anti') ):
class anti_spam {
function anti_spam() {
if ( !current_user_can('level_0') ) {
add_action('template_redirect', array($this, 'w_tb'), 1);
add_action('init', array($this, 'gate'), 1);
add_action('preprocess_comment', array($this, 'sink'), 1);
}
}
function w_tb() {
if ( is_singular() ) {
ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=(["\'])comment(["\'])(.+)/textarea>#",
"textarea$1name=$2w$3$4/textarea><textarea name="comment" cols="100%" rows="4" style="display:none"></textarea>",$input);'
) );
}
}
function gate() {
if ( !empty($_POST['w']) && empty($_POST['comment']) ) {
$_POST['comment'] = $_POST['w'];
} else {
$request = $_SERVER['REQUEST_URI'];
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隐瞒';
$IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过代理)' : $_SERVER["REMOTE_ADDR"];
$way = isset($_POST['w']) ? '手动操作' : '未经评论表格';
$spamcom = isset($_POST['comment']) ? $_POST['comment'] : null;
$_POST['spam_confirmed'] = "请求: ". $request. "\n来路: ". $referer. "\nIP: ". $IP. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 记录成功 --";
}
}
function sink( $comment ) {
if ( !empty($_POST['spam_confirmed']) ) {
if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
//方法一: 直接挡掉, 將 die(); 前面两斜线刪除即可.
die();
//方法二: 标记为 spam, 留在资料库检查是否误判.
//add_filter('pre_comment_approved', create_function('', 'return "spam";'));
//$comment['comment_content'] = "[ 小墙判断这是 Spam! ]\n". $_POST['spam_confirmed'];
}
return $comment;
}
}
$anti_spam = new anti_spam();

function Bing_spam_comments($comment_data){
$pattern = '/[一-龥]/u';
if(!preg_match($pattern,$comment_data['comment_content'])){
$err = __( '不允许不包含中文的评论哦' , 'Bing' );
if( function_exists( 'err' ) ) err( $err );
else wp_die( $err );
}
return($comment_data);
}
add_filter('preprocess_comment','Bing_spam_comments');
endif;
上一课: 下一课:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关教程

  • 内容1 简介2 钩子:动作和过滤器3 函数参考4 动作4.1 创建动作函数4.1.1 避免函数名冲突4.2 连接 到 WordPress4.3 安装和激活4.4 当
  • 这是(希望如此)WordPress 2.1 及更高版本中可用的动作钩子的完整列表。欲了解更多信息:内容1 典型请求期间运行的操作管理页面请求期间运行
  • 本文包含可用于 WordPress 2.1 及更高版本插件开发的广泛(但不是 100% 全面)过滤器钩子列表。欲了解更多信息:内容1 帖子、页面和附件(上传
  • bloginfo() 直接在浏览器中输出内容,我们创建一个wordpress博客的时候,我们需要填写博客的相关信息,包括博客名称,博客描述,博客地址等等。当我们
  • 以下是Wordpress做网站过程中常用的几个功能,分享给学习建网站的新手们。功能一:文章内容全部链接新窗口打开function Bing_autoblank($text
  • 首先,不仅是WordPress,互联网上所有具有内容管理系统(CMS)的网站都容易受到黑客攻击。并且WORDPRESS程序在多个程序对比中,是相对安全的程序。W
  • 现在很多网站的文章图片都是采用灯箱轮播展示的,非常高大上。对于WordPress网站要实现文章图片实现灯箱轮播展示效果也非常简单,只需要一个插件即可
  • 今天介绍一款非常棒的在线问答插件DW Question & Answer,它可以制作在线问答功能。用户可以提交问题,搜索和按状态过滤的问题,得到别人的回答。
  • WordPress网站可以实现自动给你新发布的文章(比如发布后24小时内)显示一个【new】图标,这样可以提醒访客。实现方法很简单,就是算个时间差,在规定
  • SVG(可伸缩矢量图形)是基于XML文本的矢量图像格式。JPG和PNG这些常见图像格式是由非常多的称为像素的微小正方形组成的,但SVG格式依赖于XML标记来描