WordPress主题functions.php常用代码片段大全

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 开发工作提供实用的参考价值。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容