关闭WordPress搜索功能

近期接连收到RDS和ECS的使用率异常报警,通过日志发现都是搜索引擎蜘蛛爬虫爬了搜索页地址,而这些搜索词都是违规词,通过搜索这些关键词发现有许多站点中招,其目的是为了在搜索引擎进行非法推广。

%title插图%num
%title插图%num

遂决定关闭WordPress搜索功能,只需在当前主题的 functions.php 文件里加入以下代码即可。

//禁用WordPress前台搜索功能
function disable_search( $query, $error = true ) {
	if (is_search() && !is_admin()) {
		$query->is_search = false;
		$query->query_vars['s'] = false;
		$query->query['s'] = false;
		if ( $error == true )
		// 执行搜索后显示的错误页面
		// $query->is_home = true; //跳转到首页
		$query->is_404 = true;//跳转到404页
	}
}
add_action( 'parse_query', 'disable_search' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

网上找到的代码大都是不兼容PHP7的,经测试以上代码是支持PHP7的。

代码出处:https://zmingcx.com/disable-wordpress-search.html

给WordPress添加关键词和描述

WordPress不能直接添加关键词和描述,为了对搜索引擎比较友好,需要手动进行修改添加,这里提供一个无需插件即可实现的简单方法。

第一步:进入后台,打开外观->编辑->主题页眉 (header.php)

第二步:确认header.php文件是否有修改权限,如果文本编辑器下方有“更新文件”按钮说明有修改权限,如果没有就没有修改权限,进入该文件目录wp-content/themes/theme_name/ 修改header.php的权限为777即可。

第三步:把下面的代码复制到header.php的head标签之间即可。

<?php
//主页描述和关键词,内容为自定义
if (is_home()){
$description = "这里是主页描述";
$keywords = "这里是主页关键词";
}
//文章页面文章名称为描述,文章标签为关键词
elseif(is_single()){
if($post->post_excerpt)
{$description = $post->post_excerpt;}
elseif(function_exists('wp_thumbnails_excerpt'))
{$description = wp_thumbnails_excerpt($post->post_content, true);}
else {$description = $post->post_title;}
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag )
{$keywords = $keywords . $tag->name . ",";}
$keywords = rtrim($keywords, ', ');
}
//分类页面关键词和描述,is_category()括号中写分类页面的别名
//使用分类名称作为关键词,分类描述做为描述
elseif(is_category()){
$keywords = single_cat_title('', false);
$description = category_description();
}
//标签页使用标签名作为关键字,标签描述作为描述
elseif (is_tag()){
$keywords = single_tag_title('', false);
$description = tag_description();
}
//page页面描述,page_name为你所创建的page页面的别名,可以更换。
//关键词和描述均为自定义
elseif (is_page('page_name')){
$keywords = "这里是关键词";
$description = "这里是描述";}
//打印出描述和关键词的内容
echo "<meta name=\"description\" content=\"$description\" />
<meta name=\"keywords\" content=\"$keywords\" />";
?>