WordPress程序/functions.php收集整理的各种自定义优化代码分享
<!--以下代码为主题目录下functions.php文件内代码!-->
//彻底关闭自动更新
add_filter('automatic_updater_disabled', '__return_true');
// 关闭更新检查定时作业
remove_action('init', 'wp_schedule_update_checks');
// 移除已有的版本检查定时作业
wp_clear_scheduled_hook('wp_version_check');
// 移除已有的插件更新定时作业
wp_clear_scheduled_hook('wp_update_plugins');
// 移除已有的主题更新定时作业
wp_clear_scheduled_hook('wp_update_themes');
// 移除已有的自动更新定时作业
wp_clear_scheduled_hook('wp_maybe_auto_update');
// 移除后台内核更新检查
remove_action( 'admin_init', '_maybe_update_core' );
// 移除后台插件更新检查
remove_action( 'load-plugins.php', 'wp_update_plugins' );
remove_action( 'load-update.php', 'wp_update_plugins' );
remove_action( 'load-update-core.php', 'wp_update_plugins' );
remove_action( 'admin_init', '_maybe_update_plugins' );
// 移除后台主题更新检查
remove_action( 'load-themes.php', 'wp_update_themes' );
remove_action( 'load-update.php', 'wp_update_themes' );
remove_action( 'load-update-core.php', 'wp_update_themes' );
remove_action( 'admin_init', '_maybe_update_themes' );
// 移除WP-JSON链接
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
// 禁止后台显示升级核心提示
add_filter('pre_site_transient_update_core', create_function('$a', "return null;"));
// 禁止后台显示插件升级提示
add_filter('pre_site_transient_update_plugins', create_function('$a', "return null;"));
// 禁止后台显示主题升级提示
add_filter('pre_site_transient_update_themes', create_function('$a', "return null;"));
// 把fonts.googleapis.com替换为fonts.useso.com
function bf_google_font($content)
{
return str_replace('fonts.googleapis.com', 'fonts.useso.com', $content);
return str_replace('ajax.googleapis.com', 'ajax.useso.com', $content);
}
// 关闭WordPress的XML-RPC功能(建议清空网站根目录下下xmlrpc.php内容)
add_filter('xmlrpc_enabled', '__return_false');
// 关闭XML-RPC 的 pingback端口
add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping');
function remove_xmlrpc_pingback_ping( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
}
// 禁止后台加载谷歌字体
function wp_remove_open_sans_from_wp_core() {
wp_deregister_style( 'open-sans' );
wp_register_style( 'open-sans', false );
wp_enqueue_style('open-sans','');
}
add_action( 'init', 'wp_remove_open_sans_from_wp_core' );
// 禁用Open Sans
class Disable_Google_Fonts {
public function __construct() {
add_filter( 'gettext_with_context', array( $this, 'disable_open_sans' ), 888, 4 );
}
public function disable_open_sans( $translations, $text, $context, $domain ) {
if ( 'Open Sans font: on or off' == $context && 'on' == $text ) {
$translations = 'off';
}
return $translations;
}
}
$disable_google_fonts = new Disable_Google_Fonts;
// 禁用 WordPress 的 JSON REST API
add_filter('json_enabled', '__return_false');
add_filter('json_jsonp_enabled', '__return_false');
// 阻止WordPress的PingBack端口
function no_self_ping( &$links ) {
$home = get_option( 'home' );
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, $home ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );
// 屏蔽XML-RPC(pingback)功能,阻止pingback端口
add_filter('xmlrpc_enabled', '__return_false');
add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping');
function remove_xmlrpc_pingback_ping( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
}
// 通过多说服务器加速Gravatar头像
function mytheme_get_avatar($avatar) {
$avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"gravatar.duoshuo.com",$avatar);
return $avatar;
}
add_filter( 'get_avatar', 'mytheme_get_avatar', 10, 3 );
// 替换前端公共库jQuery到国内,加快后台访问
function my_modify_jquery() {
if (!is_admin()) {
wp_deregister_script('jquery');
wp_deregister_script('jquery-form');
wp_register_script('jquery', ('https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js'), false, null, true);
wp_register_script('jquery-form', ('https://cdn.bootcss.com/jquery.form/4.2.2/jquery.form.min.js'), array(jquery), null, true);
}
}
// 替换评论用户头像链接为国内镜像加速访问
add_filter('get_avatar', function ($avatar) {
return str_replace([
'www.gravatar.com/avatar/',
'0.gravatar.com/avatar/',
'1.gravatar.com/avatar/',
'2.gravatar.com/avatar/',
'secure.gravatar.com/avatar/',
'cn.gravatar.com/avatar/'
], 'sdn.geekzu.org/avatar/', $avatar);
});
// 禁用embeds功能
function disable_embeds_init() {
global $wp;
$wp->public_query_vars = array_diff( $wp->public_query_vars, array(
'embed',
) );
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
add_filter( 'embed_oembed_discover', '__return_false' );
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
}
add_action( 'init', 'disable_embeds_init', 9999 );
function disable_embeds_tiny_mce_plugin( $plugins ) {
return array_diff( $plugins, array( 'wpembed' ) );
}
function disable_embeds_rewrites( $rules ) {
foreach ( $rules as $rule => $rewrite ) {
if ( false !== strpos( $rewrite, 'embed=true' ) ) {
unset( $rules[ $rule ] );
}
}
return $rules;
}
function disable_embeds_remove_rewrite_rules() {
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'disable_embeds_remove_rewrite_rules' );
function disable_embeds_flush_rewrite_rules() {
remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'disable_embeds_flush_rewrite_rules' );
// WordPress关闭自动更新版本升级功能且保留提醒;
add_filter( 'automatic_updater_disabled', '__return_true' );
// 禁止WordPress头部加载境外域名s.w.org
function remove_dns_prefetch( $hints, $relation_type ) {
if ( 'dns-prefetch' === $relation_type ) {
return array_diff( wp_dependencies_unique_hosts(), $hints );
}
return $hints;
}
add_filter( 'wp_resource_hints', 'remove_dns_prefetch', 10, 2 );
// 解决后台加载ajax.googleapis无法访问
function hc_cdn_callback($buffer) {
return str_replace('ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/smoothness/jquery-ui.css', 'cdn.bootcss.com/jqueryui/1.12.1/jquery-ui.min.css', $buffer);
}
function hc_buffer_start() {
ob_start("hc_cdn_callback");
}
function izt_buffer_end() {
ob_end_flush();
}
add_action('init', 'hc_buffer_start');
add_action('shutdown', 'hc_buffer_end');
// 减少后台admin-ajax.php加载时间的方法
add_action( 'init', 'my_deregister_heartbeat', 1 );
function my_deregister_heartbeat() {
global $pagenow;
if ( 'post.php' != $pagenow && 'post-new.php' != $pagenow )
wp_deregister_script('heartbeat');
}
// 更改作者存档前缀
add_action('init', 'wpdaxue_change_author_base');
function wpdaxue_change_author_base() {
global $wp_rewrite;
$author_slug = '500'; // 更改前缀为500
$wp_rewrite->author_base = $author_slug;
}
// 更改作者链接,防止会员ID泄露;
add_filter( 'author_link', 'modify_author_link', 10, 1 );
function modify_author_link( $link ) {
$link = 'https://www.baidu.com/'; //修改为自己需要的URL
return $link;
}
// 禁用古腾堡方法一
// 1.禁用WP5.0+古滕堡反人类编辑器,使用Gutenberg模块经典文章编辑器;
add_filter('use_block_editor_for_post', '__return_false');
// 2.禁止WordPress新版本文章编辑器前端加载样式文件
remove_action('wp_enqueue_scripts', 'wp_common_block_scripts_and_styles');
// 禁用古腾堡方法二
if( wb_opt('gutenberg_switch') ) {
add_filter('use_block_editor_for_post_type',function($is_user,$post_type){return false;},10,2);
//WordPress 5.0+移除 block-library CSS
add_action( 'wp_enqueue_scripts', 'tonjay_remove_block_library_css', 100 );
function tonjay_remove_block_library_css() {
wp_dequeue_style( 'wp-block-library' );
}
}
// 自动给所有文章的外部链接添加nofollow属性(有助于SEO方面)
add_filter('the_content','the_content_nofollow',999);
function the_content_nofollow($content){
preg_match_all('/href="/go.php?url=KC4qPyk=" rel="external nofollow" rel="external nofollow" /',$content,$matches);
if($matches){
foreach($matches[1] as $val){
if( strpos($val,home_url())===false ) $content=str_replace("href=\"$val\"", "href=\"$val\" rel=\"external nofollow\" ",$content);
}
}
return $content;
}
// 发布文章主动推送到百度,加快收录保护原创,WordPress通用方式
if(!function_exists('Baidu_Submit')){
function Baidu_Submit($post_ID) {
$WEB_TOKEN = ''; //这里请换成你的网站的百度主动推送的token值
$WEB_DOMAIN = get_option('home');
// 已成功推送的文章不再推送
if(get_post_meta($post_ID,'Baidusubmit',true) == 1) return;
$url = get_permalink($post_ID);
$api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
$request = new WP_Http;
$result = $request->request( $api , array( 'method' => 'POST', 'body' => $url , 'headers' => 'Content-Type: text/plain') );
$result = json_decode($result['body'],true);
// 如果推送成功则在文章新增自定义栏目Baidusubmit,值为1
if (array_key_exists('success',$result)) {
add_post_meta($post_ID, 'Baidusubmit', 1, true);
}
}
add_action('publish_post', 'Baidu_Submit', 0);
}
// 文章插入图片自动移除 img 的 width、height、class 属性;
add_filter( 'post_thumbnail_html', 'fanly_remove_images_attribute', 10 );
add_filter( 'image_send_to_editor', 'fanly_remove_images_attribute', 10 );
function fanly_remove_images_attribute( $html ) {
//$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
$html = preg_replace( '/width="(\d*)"\s+height="(\d*)"\s+class="[^"]*"/', "", $html );
$html = preg_replace( '/ /', "", $html );
return $html;
}
// 删除WordPress新版本站点健康状态面板和菜单项
add_action( 'admin_menu', 'remove_site_health_menu' );
function remove_site_health_menu(){
remove_submenu_page( 'tools.php','site-health.php' );
}
// 删除头部冗余代码
function my_filter_head(){
remove_action( 'wp_head','_admin_bar_bump_cb');
remove_action( 'wp_head','feed_links_extra',3 );
remove_action( 'wp_head','feed_links',2 );
remove_action( 'wp_head','rsd_link' );
remove_action( 'wp_head','wlwmanifest_link' );
remove_action( 'wp_head','index_rel_link' );
remove_action( 'wp_head','parent_post_rel_link',10,0 );
remove_action( 'wp_head','start_post_rel_link',10,0 );
remove_action( 'wp_head','adjacent_posts_rel_link',10,0 );
remove_action( 'wp_head','wp_generator' );
}
add_action('get_header','my_filter_head');
// 删除emoji脚本
remove_action( 'admin_print_scripts', 'print_emoji_detection_script');
remove_action( 'admin_print_styles', 'print_emoji_styles');
remove_action( 'wp_head', 'print_emoji_detection_script', 7);
remove_action( 'wp_print_styles', 'print_emoji_styles');
remove_filter( 'the_content_feed', 'wp_staticize_emoji');
remove_filter( 'comment_text_rss', 'wp_staticize_emoji');
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email');
remove_action( 'wp_head', 'feed_links_extra', 3 ); //去除评论feed
remove_action( 'wp_head', 'feed_links', 2 ); //去除文章feed
remove_action( 'wp_head', 'rsd_link' ); //针对Blog的远程离线编辑器接口
remove_action( 'wp_head', 'wlwmanifest_link' ); //Windows Live Writer接口
remove_action( 'wp_head', 'index_rel_link' ); //移除当前页面的索引
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); //移除后面文章的url
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); //移除最开始文章的url
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );//自动生成的短链接
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); ///移除相邻文章的url
remove_action( 'wp_head', 'wp_generator' ); // 移除版本号
// 自适应图片删除width和height
function ludou_remove_width_height_attribute($content){
preg_match_all('/<[img|IMG].*?src=[\'|"](.*?(?:[\.gif|\.jpg|\.png\.bmp]))[\'|"].*?[\/]?>/', $content, $images);
if(!empty($images)) {
foreach($images[0] as $index => $value){
$new_img = preg_replace('/(width|height)="\d*"\s/', "", $images[0][$index]);
$content = str_replace($images[0][$index], $new_img, $content);
}
}
return $content;
}
// 删除默认缩略图
function v7v3_remove_image_size($sizes) {
unset( $sizes['small'] );
unset( $sizes['medium'] );
unset( $sizes['large'] );
return $sizes;
}
add_filter('image_size_names_choose', 'v7v3_remove_image_size');
// 删除文章时删除图片附件
function delete_post_and_attachments($post_ID) {
global $wpdb;
// 删除特色图片
$thumbnails = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
foreach ( $thumbnails as $thumbnail ) {
wp_delete_attachment( $thumbnail->meta_value, true );
}
// 删除图片附件
$attachments = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE post_parent = $post_ID AND post_type = 'attachment'" );
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
$wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_thumbnail_id' AND post_id = $post_ID" );
}
add_action('before_delete_post', 'delete_post_and_attachments');
// 禁用自动生成的图片尺寸
function shapeSpace_disable_image_sizes($sizes) {
unset($sizes['thumbnail']); // disable thumbnail size
unset($sizes['medium']); // disable medium size
unset($sizes['large']); // disable large size
unset($sizes['medium_large']); // disable medium-large size
unset($sizes['1536x1536']); // disable 2x medium-large size
unset($sizes['2048x2048']); // disable 2x large size
return $sizes;
}
add_action('intermediate_image_sizes_advanced', 'shapeSpace_disable_image_sizes');
// 禁用缩放尺寸
add_filter('big_image_size_threshold', '__return_false');
// 禁用其他图片尺寸
function shapeSpace_disable_other_image_sizes() {
remove_image_size('post-thumbnail'); // disable images added via set_post_thumbnail_size()
remove_image_size('another-size'); // disable any other added image sizes
}
add_action('init', 'shapeSpace_disable_other_image_sizes');
// 防止网站遭受恶意URL请求
if(strlen($_SERVER['REQUEST_URI']) > 366 ||
strpos($_SERVER['REQUEST_URI'], "eval(") ||
strpos($_SERVER['REQUEST_URI'], "base64")) {
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
@exit;
}
// 防止CC攻击
session_start(); //开启session
$timestamp = time();
$ll_nowtime = $timestamp;
// 判断session是否存在,如果存在从session取值,如果不存在进行初始化赋值!
if ($_SESSION){
$ll_lasttime = $_SESSION['ll_lasttime'];
$ll_times = $_SESSION['ll_times'] + 1;
$_SESSION['ll_times'] = $ll_times;
}else{
$ll_lasttime = $ll_nowtime;
$ll_times = 1;
$_SESSION['ll_times'] = $ll_times;
$_SESSION['ll_lasttime'] = $ll_lasttime;
}
// 中文名图片上传改名
function tin_custom_upload_name($file){
if(preg_match('/[一-龥]/u',$file['name'])):
$ext=ltrim(strrchr($file['name'],'.'),'.');
$file['name']=preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])).'_'.date('Y-m-d_H-i-s').'.'.$ext;
endif;
return $file;
}
add_filter('wp_handle_upload_prefilter','tin_custom_upload_name',5,1);
// 为网站全部页面添加canonical标签
function cx_archive_link( $paged = true ) {
$link = false;
if ( is_front_page() ) {
$link = home_url( '/' );
} else if ( is_home() && "page" == get_option('show_on_front') ) {
$link = get_permalink( get_option( 'page_for_posts' ) );
} else if ( is_tax() || is_tag() || is_category() ) {
$term = get_queried_object();
$link = get_term_link( $term, $term->taxonomy );
} else if ( is_post_type_archive() ) {
$link = get_post_type_archive_link( get_post_type() );
} else if ( is_author() ) {
$link = get_author_posts_url( get_query_var('author'), get_query_var('author_name') );
} else if ( is_single() ) {
$link = get_permalink( $id );
} else if ( is_archive() ) {
if ( is_date() ) {
if ( is_day() ) {
$link = get_day_link( get_query_var('year'), get_query_var('monthnum'), get_query_var('day') );
} else if ( is_month() ) {
$link = get_month_link( get_query_var('year'), get_query_var('monthnum') );
} else if ( is_year() ) {
$link = get_year_link( get_query_var('year') );
}
}
}
if ( $paged && $link && get_query_var('paged') > 1 ) {
global $wp_rewrite;
if ( !$wp_rewrite->using_permalinks() ) {
$link = add_query_arg( 'paged', get_query_var('paged'), $link );
} else {
$link = user_trailingslashit( trailingslashit( $link ) . trailingslashit( $wp_rewrite->pagination_base ) . get_query_var('paged'), 'archive' );
}
}
echo '';
}
add_action('wp_head', 'cx_archive_link');
// WordPress程序自定义全角转半角
$qmr_work_tags = array(
//'the_title', // 标题
'the_content', // 内容 *
//'the_excerpt', // 摘要 *
//'single_post_title', // 单篇文章标题
//'comment_author', // 评论作者
//'comment_text', // 评论内容 *
//'link_description', // 友链描述(已弃用,但还很常用)
//'bloginfo', // 博客信息
//'wp_title', // 网站标题
//'term_description', // 项目描述
//'category_description', // 分类描述
//'widget_title', // 小工具标题
//'widget_text' // 小工具文本
);
foreach ( $qmr_work_tags as $qmr_work_tag ) {
remove_filter ($qmr_work_tag, 'wptexturize');
}
// 限制用户进入后台控制面板界面
function baw_no_admin_access() {
if( !current_user_can( 'administrator' ) ) {
wp_redirect( home_url() );
die();
}
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );
// SMTP发送邮件
function mail_smtp( $phpmailer ){
$phpmailer->From = 'admin@qq.com'; //发件人邮箱
$phpmailer->FromName = '腾讯网'; //发件人名称
$phpmailer->Host = 'smtp.qq.com'; //SMTP服务器地址
$phpmailer->Port = '465'; //SMTP端口,常用的有25、465、587
$phpmailer->SMTPSecure = 'ssl'; //SMTP加密方式,常用的有SSL/TLS,port=25留空,465为ssl
$phpmailer->Username = 'admin@qq.com'; //邮箱帐号
$phpmailer->Password = '0123456789'; //邮箱密码
$phpmailer->IsSMTP(); //使用SMTP发送
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
}
add_action('phpmailer_init','mail_smtp');
//增加后台用户管理显示注册时间和IP信息-开始
add_action( 'user_register', 'log_ip' );
function log_ip($user_id){
$ip = $_SERVER['REMOTE_ADDR'];
update_user_meta( $user_id, 'signup_ip', $ip );
}
add_action( 'wp_login', 'insert_last_login' );
function insert_last_login( $login ) {
global $user_id;
$user = get_userdatabylogin( $login );
update_user_meta( $user->ID, 'last_login', current_time( 'mysql' ) );
$last_login_ip = $_SERVER['REMOTE_ADDR'];
update_user_meta( $user->ID, 'last_login_ip', $last_login_ip );
}
add_filter('manage_users_columns', 'add_user_additional_column');
function add_user_additional_column($columns) {
//$columns['user_nickname'] = '用户昵称';
//$columns['user_url'] = '用户网站';
$columns['reg_time'] = '注册时间';
$columns['signup_ip'] = '注册IP';
$columns['last_login'] = '最后登录时间';
$columns['last_login_ip'] = '最后登录IP';
unset($columns['name']);//移除姓名这一栏,如果需要保留,注释这行即可;
return $columns;
}
add_action('manage_users_custom_column', 'show_user_additional_column_content', 10, 3);
function show_user_additional_column_content($value, $column_name, $user_id) {
$user = get_userdata( $user_id );
//用户昵称
//if ( 'user_nickname' == $column_name )
//return $user->nickname;
//用户网站
//if ( 'user_url' == $column_name )
//return ''.$user->user_url.'';
//注册时间
if('reg_time' == $column_name ){
return get_date_from_gmt( $user->user_registered );
}
//注册IP
if ('signup_ip' == $column_name && $user->signup_ip ){
return get_user_meta( $user->ID, 'signup_ip', true );
}
//最后登录时间
if ('last_login' == $column_name && $user->last_login ){
return get_user_meta( $user->ID, 'last_login', true );
}
//最后登录IP
if ('last_login_ip' == $column_name && $user->last_login_ip ){
return get_user_meta( $user->ID, 'last_login_ip', true );
}
return $value;
}
//默认按照注册时间排序
add_filter( "manage_users_sortable_columns", 'cmhello_users_sortable_columns' );
function cmhello_users_sortable_columns($sortable_columns){
$sortable_columns['reg_time'] = 'reg_time';
return $sortable_columns;
}
add_action( 'pre_user_query', 'cmhello_users_search_order' );
function cmhello_users_search_order($obj){
if(!isset($_REQUEST['orderby']) || $_REQUEST['orderby']=='reg_time' ){
if( !in_array($_REQUEST['order'],array('asc','desc')) ){
$_REQUEST['order'] = 'desc';
}
$obj->query_orderby = "ORDER BY user_registered ".$_REQUEST['order']."";
}
}
//增加后台用户管理显示注册时间和IP信息-结束