functions.php 是 WordPress 主题的核心功能文件,相当于主题的”配置中心”。通过向该文件添加自定义代码,无需安装插件即可实现禁用版本号、安全加固、性能优化、自定义后台等功能。本文整理了七大类常用代码片段,涵盖基础配置、安全加固、性能优化、文章媒体、用户权限及 WooCommerce 定制,帮助开发者快速打造高效、安全的 WordPress 站点。
基础配置
禁用 WordPress 版本号显示
WordPress 默认在前端和 RSS 中输出版本号,暴露版本信息可能被攻击者利用。以下代码彻底移除版本号显示:
// 彻底移除 WordPress 版本号显示
remove_action('wp_head', 'wp_generator'); // 移除 head 中的版本号
add_filter('the_generator', '__return_empty_string'); // 移除 RSS 中的版本号
add_filter('script_loader_src', 'remove_version_query');
add_filter('style_loader_src', 'remove_version_query');
function remove_version_query($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src); // 移除 CSS/JS 资源中的版本号参数
}
return $src;
}
本节小结: 通过移除 head、RSS 及资源链接中的版本号,有效防止站点版本信息泄露,提升基础安全性。
修改登录页面 Logo
将登录页面的 WordPress 默认 Logo 替换为自己的品牌 Logo,提升站点专业度:
// 自定义登录页面 Logo
add_action('login_head', 'custom_login_logo');
function custom_login_logo() {
// 替换为你的 Logo 图片路径(建议放在主题目录下)
$logo_url = get_template_directory_uri() . '/assets/images/logo.png';
echo '<style type="text/css">
.login h1 a {
background-image: url(' . $logo_url . ') !important;
background-size: 200px 60px !important;
width: 200px !important;
height: 60px !important;
margin-bottom: 10px !important;
}
</style>';
}
// 修改 Logo 点击跳转地址(默认跳转到 wordpress.org)
add_filter('login_headerurl', function() {
return home_url(); // 改为跳转到站点首页
});
本节小结: 自定义登录页 Logo 和链接地址,让后台入口保持品牌一致性,给用户留下专业印象。
修改后台底部版权信息
替换 WordPress 后台”感谢使用 WordPress”的默认文字,自定义版权声明:
// 自定义后台底部版权信息
add_filter('admin_footer_text', 'custom_admin_footer');
function custom_admin_footer() {
echo '<span id="footer-thankyou">
感谢使用 <a href="' . home_url() . '">' . get_bloginfo('name') . '</a> 进行创作
</span> | 由 <a href="https://wordpress.org" target="_blank">WordPress</a> 驱动';
}
本节小结: 一行代码即可自定义后台页脚文字,适用于企业站和定制化项目,彰显品牌形象。
禁用文章修订版本
文章修订版本会占用大量数据库空间,以下代码彻底禁用该功能:
// 禁用文章修订版本功能
define('WP_POST_REVISIONS', false); // 设为 false 完全禁用,设为数字则保留指定数量
// 可选:设置自动保存间隔为 120 秒(默认 60 秒)
define('AUTOSAVE_INTERVAL', 120);
注意:以上两行代码需添加到
wp-config.php文件中,而非 functions.php。
本节小结: 禁用不必要的修订版本可显著减少数据库体积,建议在 wp-config.php 中配置。
安全加固
隐藏后台登录地址
将默认的 wp-login.php 登录地址改为自定义地址,防止暴力破解:
// 隐藏后台登录地址,自定义登录入口
add_action('init', 'custom_login_url');
function custom_login_url() {
$secret_slug = 'my-secret-login'; // 自定义登录别名,请修改为复杂字符串
$request_uri = $_SERVER['REQUEST_URI'];
// 访问自定义地址时重定向到真正的登录页
if (strpos($request_uri, $secret_slug) !== false) {
require_once ABSPATH . 'wp-login.php';
exit();
}
// 禁止直接访问 wp-login.php
if (strpos($request_uri, 'wp-login.php') !== false && $_SERVER['REQUEST_METHOD'] === 'GET') {
wp_redirect(home_url());
exit();
}
}
本节小结: 自定义登录地址是防暴力破解的有效手段,配合限制登录次数效果更佳。
限制后台登录尝试次数
防止恶意用户通过反复尝试密码入侵后台:
// 限制登录尝试次数
add_filter('authenticate', 'limit_login_attempts', 30, 3);
function limit_login_attempts($user, $username, $password) {
if (empty($username)) return $user;
$ip = $_SERVER['REMOTE_ADDR'];
$transient = 'login_attempts_' . $ip;
$attempts = get_transient($transient);
// 最多允许 5 次尝试,锁定 15 分钟
if ($attempts >= 5) {
return new WP_Error('too_many_attempts', '登录尝试次数过多,请 15 分钟后再试。');
}
// 验证失败时递增计数
if (wp_authenticate($username, $password) instanceof WP_Error) {
set_transient($transient, $attempts + 1, 15 * MINUTE_IN_SECONDS);
}
return $user;
}
本节小结: 限制 IP 登录频率,有效抵御暴力破解攻击,建议与登录地址隐藏配合使用。
禁用 XML-RPC
XML-RPC 是 WordPress 的远程发布接口,常被用于 DDoS 和暴力破解攻击:
// 禁用 XML-RPC 接口
add_filter('xmlrpc_enabled', '__return_false');
// 移除 head 中的 XML-RPC 链接
remove_action('wp_head', 'rsd_link');
本节小结: 绝大多数站点不需要 XML-RPC,禁用后可消除一个常见攻击面。
移除 WordPress 版本号
与基础配置中的版本号移除不同,此处侧重安全视角的补充措施:
// 从 REST API 响应中移除版本号
add_filter('rest_index', function($response) {
if (isset($response->data['description'])) {
$response->data['description'] = get_bloginfo('description');
}
return $response;
});
本节小结: 多维度隐藏版本信息,确保攻击者无法通过任何途径获取站点 WordPress 版本。
性能优化
禁用 Emoji 表情代码
WordPress 4.2 起默认加载 Emoji 脚本和样式,对不需要表情的站点是额外负担:
// 禁用 WordPress Emoji 表情功能
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_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');
// 移除 WordPress 内置的 Emoji CDN 域名
add_filter('tiny_mce_plugins', 'disable_emoji_tinymce');
function disable_emoji_tinymce($plugins) {
if (is_array($plugins)) {
return array_diff($plugins, array('wpemoji'));
}
return array();
}
本节小结: 移除 Emoji 相关资源可减少约 30KB 的页面加载量,对性能提升有明显帮助。
延迟加载 JS 代码
将非关键 JavaScript 延迟到页面加载完成后执行,提升首屏渲染速度:
// 延迟加载指定 JS 文件(defer 属性)
add_filter('script_loader_tag', 'defer_scripts', 10, 3);
function defer_scripts($tag, $handle, $src) {
// 将需要延迟的脚本 handle 添加到数组中
$defer_handles = array('contact-form-7', 'wp-embed');
if (in_array($handle, $defer_handles)) {
return str_replace(' src', ' defer src', $tag);
}
return $tag;
}
本节小结: 通过 defer 属性延迟非关键脚本加载,改善 Core Web Vitals 中的 LCP 指标。
禁用 Google Fonts 代码
国内用户访问 Google Fonts 会导致页面加载缓慢甚至超时:
// 禁用 Google Fonts(适用于使用经典编辑器的站点)
add_action('wp_enqueue_scripts', 'disable_google_fonts', 20);
function disable_google_fonts() {
wp_deregister_style('open-sans');
wp_register_style('open-sans', false);
wp_enqueue_style('open-sans', '');
}
// 替换为国内镜像源(可选方案)
add_filter('style_loader_src', 'replace_google_fonts_cdn', 10, 2);
function replace_google_fonts_cdn($src, $handle) {
if (strpos($src, 'fonts.googleapis.com') !== false) {
$src = str_replace('fonts.googleapis.com', 'fonts.loli.net', $src);
}
return $src;
}
本节小结: 禁用或替换 Google Fonts 可大幅提升国内用户的页面加载速度。
精简 head 区域代码
移除 WordPress 默认在 head 中注入的不必要标签:
// 精简 WordPress head 区域
remove_action('wp_head', 'feed_links', 2); // 移除文章和评论 RSS
remove_action('wp_head', 'feed_links_extra', 3); // 移除分类等 RSS
remove_action('wp_head', 'rsd_link'); // 移除 RSD 链接
remove_action('wp_head', 'wlwmanifest_link'); // 移除 Windows Live Writer
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0);// 移除短链接
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); // 移除前后文章链接
remove_action('wp_head', 'rest_output_link_wp_head'); // 移除 REST API 链接
remove_action('wp_head', 'wp_oembed_add_discovery_links');// 移除 oEmbed 发现链接
remove_action('wp_head', 'wp_oembed_add_host_js'); // 移除 oEmbed JS
本节小结: 精简 head 区域可减少不必要的 HTTP 请求,使页面源码更加干净整洁。
文章与媒体
设置特色图片尺寸
根据主题布局需求注册自定义缩略图尺寸:
// 注册自定义特色图片尺寸
add_action('after_setup_theme', 'custom_image_sizes');
function custom_image_sizes() {
// add_image_size(名称, 宽度, 高度, 是否裁剪);
add_image_size('card-thumb', 400, 250, true); // 卡片缩略图
add_image_size('banner', 1200, 400, true); // 横幅大图
add_image_size('sidebar-thumb', 300, 200, true); // 侧边栏缩略图
}
本节小结: 按需注册图片尺寸可避免前端 CSS 缩放导致的带宽浪费,提升图片加载效率。
自定义文章摘要长度
修改 WordPress 默认的 55 字摘要长度,适配主题设计:
// 自定义文章摘要长度为 120 个字符
add_filter('excerpt_length', 'custom_excerpt_length');
function custom_excerpt_length($length) {
return 120; // 修改为你需要的字符数
}
// 修改摘要末尾的省略符号
add_filter('excerpt_more', 'custom_excerpt_more');
function custom_excerpt_more($more) {
return '...'; // 自定义省略样式,也可返回 HTML 链接
}
本节小结: 灵活控制摘要长度和样式,使文章列表页的展示更加统一美观。
禁用自动保存
减少编辑文章时产生的自动保存记录,降低数据库压力:
// 禁用 WordPress 自动保存功能
add_action('wp_print_scripts', 'disable_autosave');
function disable_autosave() {
wp_deregister_script('autosave');
}
本节小结: 禁用自动保存可减少数据库冗余数据,但建议编辑长文时手动保存以防丢失。
允许上传 SVG 文件
WordPress 默认出于安全考虑禁止上传 SVG 文件,以下代码安全地开放此权限:
// 允许上传 SVG 文件
add_filter('upload_mimes', 'allow_svg_upload');
function allow_svg_upload($mimes) {
$mimes['svg'] = 'image/svg+xml'; // 添加 SVG 到允许的 MIME 类型列表
return $mimes;
}
// 修复 SVG 上传后显示为 broken image 的问题
add_filter('wp_check_filetype_and_ext', 'fix_svg_filetype', 10, 5);
function fix_svg_filetype($data, $file, $filename, $mimes, $real_mime) {
if ($data['ext'] === 'svg' || $real_mime === 'image/svg+xml') {
$data['type'] = 'image/svg+xml';
$data['ext'] = 'svg';
}
return $data;
}
本节小结: SVG 是矢量图标常用格式,开放上传权限的同时需注意 SVG 文件的安全审查。
用户与权限
隐藏后台管理菜单
根据用户角色隐藏不必要的后台菜单项,简化后台界面:
// 隐藏后台管理菜单
add_action('admin_menu', 'hide_admin_menus');
function hide_admin_menus() {
// 仅对非管理员隐藏以下菜单
if (!current_user_can('manage_options')) {
remove_menu_page('tools.php'); // 工具
remove_menu_page('options-general.php'); // 设置
remove_menu_page('plugins.php'); // 插件
remove_menu_page('themes.php'); // 外观
}
}
本节小结: 按角色精简后台菜单,降低非管理员用户的误操作风险,保持界面简洁。
限制非管理员访问后台
禁止普通用户进入 WordPress 后台面板,将其重定向到首页:
// 限制非管理员访问后台
add_action('admin_init', 'restrict_dashboard_access');
function restrict_dashboard_access() {
if (!current_user_can('manage_options') && !defined('DOING_AJAX')) {
wp_redirect(home_url());
exit();
}
}
本节小结: 一段简洁的重定向代码即可有效防止普通用户误入后台管理区域。
添加自定义用户角色
创建具有特定权限组合的自定义用户角色,满足站点运营需求:
// 添加自定义用户角色:内容编辑
add_action('init', 'add_custom_user_roles');
function add_custom_user_roles() {
// 移除旧角色(更新时使用,防止重复添加)
remove_role('content_editor');
// 添加新角色并分配权限
add_role('content_editor', '内容编辑', array(
'read' => true, // 阅读内容
'edit_posts' => true, // 编辑文章
'edit_published_posts' => true, // 编辑已发布文章
'upload_files' => true, // 上传文件
'publish_posts' => true, // 发布文章
'delete_posts' => true, // 删除文章
'moderate_comments' => true, // 管理评论
));
}
本节小结: 自定义角色实现精细化权限管理,适用于多作者协作和内容外包场景。
WooCommerce 定制
修改”加入购物车”按钮文字
将默认按钮文字替换为自定义文案,提升转化率:
// 修改"加入购物车"按钮文字
add_filter('woocommerce_product_single_add_to_cart_text', 'custom_add_to_cart_text');
add_filter('woocommerce_product_add_to_cart_text', 'custom_add_to_cart_text');
function custom_add_to_cart_text() {
return '立即购买'; // 单品页和列表页统一修改
}
// 针对不同商品类型设置不同文字
add_filter('woocommerce_product_add_to_cart_text', 'variable_add_to_cart_text', 10, 2);
function variable_add_to_cart_text($text, $product) {
if ($product->is_type('variable')) {
return '选择规格'; // 变体商品显示"选择规格"
}
return $text;
}
本节小结: 自定义按钮文案可引导用户操作,根据商品类型差异化展示效果更佳。
自定义产品页 Tab
添加或修改 WooCommerce 产品页的标签页内容:
// 添加自定义产品页 Tab
add_filter('woocommerce_product_tabs', 'custom_product_tabs');
function custom_product_tabs($tabs) {
// 添加"常见问题"标签页
$tabs['faq_tab'] = array(
'title' => '常见问题',
'priority' => 50,
'callback' => 'faq_tab_content',
);
// 移除默认的"评价"标签页(按需取消注释)
// unset($tabs['reviews']);
return $tabs;
}
// Tab 回调函数:输出常见问题内容
function faq_tab_content() {
echo '<h2>常见问题</h2>';
echo '<p>Q: 商品支持退换货吗?</p>';
echo '<p>A: 支持 7 天无理由退换货。</p>';
echo '<p>Q: 发货需要多长时间?</p>';
echo '<p>A: 下单后 48 小时内发货。</p>';
}
本节小结: 自定义 Tab 可展示售后保障、常见问题等关键信息,有效减少客服咨询量。
显示商品库存数量
在商品页面直观展示库存信息,营造紧迫感促进转化:
// 在商品页面显示库存数量
add_action('woocommerce_single_product_summary', 'show_stock_quantity', 25);
function show_stock_quantity() {
global $product;
// 仅对有库存管理的商品显示
if ($product->managing_stock()) {
$stock = $product->get_stock_quantity();
$status = $product->get_stock_status();
if ($stock > 0) {
echo '<p class="stock-info" style="color:#e74c3c;font-weight:bold;">
仅剩 ' . $stock . ' 件库存,抓紧下单!
</p>';
} elseif ($status === 'onbackorder') {
echo '<p class="stock-info" style="color:#f39c12;">
当前缺货,可预订,预计 3-5 天到货。
</p>';
} else {
echo '<p class="stock-info" style="color:#999;">
该商品暂时缺货。
</p>';
}
}
}
本节小结: 库存信息透明化有助于提升用户购买决策效率,配合营销文案可提高转化率。
写在最后
本文整理了 WordPress 主题 functions.php 中七大类共 20 个常用代码片段,涵盖了从基础配置到 WooCommerce 定制的典型开发场景。需要特别注意的是:修改 functions.php 前务必备份原文件,建议使用子主题(Child Theme)来存放自定义代码,避免主题更新时丢失修改。此外,每添加一段代码后都应测试站点功能是否正常,确保代码与当前 WordPress 版本及已安装插件兼容。希望这些代码片段能为你的 WordPress 开发工作提供实用的参考价值。









暂无评论内容