wordpress二次开发技巧-functions.php篇

本文介绍了在WordPress中对functions.php文件进行二次开发的各种技巧,包括侧边栏小工具、自定义菜单、面包屑导航、文章点击量统计、链接新窗口打开、去除头部冗余信息、自动保存和修订功能、彩色标签云、搜索结果关键词高亮、自定义登录界面、文章位置显示、热门标签AJAX加载、外链添加nofollow属性、图片懒加载、获取第一张图、截取摘要、输出首个分类、分类页文章简介、按页面类型调整文章数量及显示缩略图等功能的实现。

前言

最近又写了个网站,也是基于wordpress,LEE周刊官网:www.leeweekly.com。这个网站和轩枫阁的部分功能有所不同,部分功能困扰了挺久,通过Google搜索到了各种解决方案,记录成文备忘。

LEE周刊新版PC官网设计开发总结:http://t.cn/RyzrUD4

 

functions.php

下面根据需求,对各种能实现进行简单介绍。

先对functions.php文件进行介绍,通过代码实现各功能。

 

1. widgets sidebar 侧边栏小工具

wordpress二次开发技巧-functions.php篇
wordpress二次开发技巧-functions.php篇
/** widgets sidebar 侧边栏小工具*/
if( function_exists('register_sidebar'<span class="crayon-sy">) ) {
  register_sidebar(array(
    'name' <span class="crayon-o">=> 'First_sidebar'<span class="crayon-sy">,
    'before_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'after_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'before_title' <span class="crayon-o">=> '<h4>'<span class="crayon-sy">,
    'after_title' <span class="crayon-o">=> '</h4>'
  ));
  register_sidebar(array(
    'name' <span class="crayon-o">=> 'Second_sidebar'<span class="crayon-sy">,
    'before_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'after_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'before_title' <span class="crayon-o">=> '<h4>'<span class="crayon-sy">,
    'after_title' <span class="crayon-o">=> '</h4>'
  ));
  register_sidebar(array(
    'name' <span class="crayon-o">=> 'Third_sidebar'<span class="crayon-sy">,
    'before_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'after_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'before_title' <span class="crayon-o">=> '<h4>'<span class="crayon-sy">,
    'after_title' <span class="crayon-o">=> '</h4>'
  ));
  register_sidebar(array(
    'name' <span class="crayon-o">=> 'Fourth_sidebar'<span class="crayon-sy">,
    'before_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'after_widget' <span class="crayon-o">=> ''<span class="crayon-sy">,
    'before_title' <span class="crayon-o">=> '<h4>'<span class="crayon-sy">,
    'after_title' <span class="crayon-o">=> '</h4>'
  ));
}
 
register_nav_menus(array("primary" => "Primary Navigation"));

 

2. 后台支持自定义菜单

wordpress二次开发技巧-functions.php篇
wordpress二次开发技巧-functions.php篇

 

3. 面包屑导航

asdfgvsdgsdf

你提到 `/wp-admin/admin-ajax.php` 的大量 `POST` 请求都来自你自己(即服务器自身),这通常意味着 WordPress 的某些功能或插件在通过 **本地 AJAX 请求** 来执行后台任务。虽然这是 WordPress 的常见行为,但如果请求频繁或负载过高,可能会影响性能。 --- ## 一、为什么 `/wp-admin/admin-ajax.php` 会有大量来自本地的 POST 请求? WordPress 使用 `admin-ajax.php` 作为统一的 AJAX 处理接口,很多插件、主题和 WordPress 核心功能都会通过这个接口执行异步任务,例如: - **自动保存草稿(Auto Save)** - **仪表盘小工具更新(Dashboard Widgets)** - **插件后台轮询(如缓存插件、监控插件)** - **定时任务模拟(wp-cron.php)** - **媒体库更新、评论更新、用户在线状态更新等** 这些请求通常由服务器自己发起(如 `127.0.0.1` 或 `localhost`),目的是在不依赖外部访问的情况下,执行内部逻辑。 --- ## 二、如何判断这些请求是否正常? 你可以通过以下方式判断这些请求是否属于正常行为: ### 1. 查看访问日志中的 User-Agent ```bash tail -f /var/log/apache2/access.log | grep "admin-ajax.php" ``` 正常请求通常带有 WordPress 自带的 User-Agent,例如: ``` WordPress / X.X.X; https://your-site.com ``` 如果不是浏览器或外部客户端发起的请求,而是 WordPress 自身调用,那属于正常行为。 ### 2. 检查请求来源 IP 如果是 `127.0.0.1` 或 `localhost`,则说明是本机发起的请求。 --- ## 三、如何优化或减少这些请求? 虽然这些请求是 WordPress 正常运行的一部分,但如果你发现它们过于频繁、影响性能,可以尝试以下方法: ### ✅ 1. **禁用不必要的插件 AJAX 请求** 检查你安装的插件是否频繁调用 `admin-ajax.php`,特别是以下类型的插件: - 实时统计插件(如 WP Statistics) - 后台监控插件 - 自定义仪表盘插件 - 自动更新插件 可以临时禁用这些插件,观察 `/wp-admin/admin-ajax.php` 请求是否减少。 ### ✅ 2. **优化 WordPress Cron 任务** WordPress 默认使用伪定时任务(`wp-cron.php`),它通过 `admin-ajax.php` 模拟定时任务,这可能导致频繁的本地请求。 #### 替换为系统定时任务(推荐): 1. 编辑 `wp-config.php`,禁用伪定时任务: ```php define('DISABLE_WP_CRON', true); ``` 2. 添加系统定时任务(每 5 分钟执行一次): ```bash crontab -e ``` 添加如下内容: ```bash */5 * * * * curl -s https://your-site.com/wp-cron.php > /dev/null 2>&1 ``` ### ✅ 3. **减少仪表盘小工具更新频率** 如果你使用了需要频繁更新的小工具(如“活动”面板),可以禁用它们或降低更新频率。 ### ✅ 4. **启用缓存插件** 使用缓存插件(如 WP Super Cache、W3 Total Cache、Redis Object Cache)可以减少对数据库的频繁查询,从而减少 `admin-ajax.php` 的调用。 --- ## 四、代码示例:如何通过 `.htaccess` 阻止某些不必要的 `admin-ajax.php` 请求(谨慎使用) 你可以通过 `.htaccess` 或 Nginx 规则限制某些 `admin-ajax.php` 请求的来源(例如限制非预期的请求): ### Apache `.htaccess` 示例: ```apache <IfModule mod_rewrite.c> RewriteEngine On # 限制 admin-ajax.php 只能由特定来源访问 RewriteCond %{HTTP_REFERER} !^https://your-site.com/.*$ [NC] RewriteCond %{REQUEST_URI} ^/wp-admin/admin-ajax.php$ RewriteRule ^(.*)$ - [F,L] </IfModule> ``` ⚠️ 注意:这可能影响部分插件功能,建议先测试。 --- ## 五、相关问题 #### 1. WordPress 的 wp-cron.php 是什么?为什么它会影响性能? WordPress 的 `wp-cron.php` 是一个伪定时任务调度器,每次页面访问时都会检查是否有到期任务。这会导致频繁的本地请求,影响性能。建议使用系统 cron 替代。 #### 2. 如何查看哪些插件或函数在调用 admin-ajax.php? 可以使用调试插件(如 Query Monitor)或在 `functions.php` 中添加日志记录,追踪调用 `admin-ajax.php` 的钩子。 #### 3. 如何在 WordPress 中禁用自动保存和文章修订功能? 编辑 `functions.php`: ```php // 禁用自动保存 wp_deregister_script('autosave'); // 禁用文章修订 define('WP_POST_REVISIONS', false); ``` #### 4. 如何用 Redis 缓存 WordPress 的 AJAX 请求? 可以使用 Redis Object Cache 插件,将 `admin-ajax.php` 的响应缓存到 Redis 中,减少重复请求对数据库的压力。 #### 5. 什么是 WordPress 的 Heartbeat API?它和 admin-ajax.php 有什么关系? Heartbeat API 是 WordPress 用于后台轮询的机制,默认每 15 秒调用一次 `admin-ajax.php`。可以降低频率或禁用: ```php add_filter('heartbeat_settings', function($settings) { $settings['interval'] = 60; // 改为每 60 秒一次 return $settings; }); ``` --- 如果你愿意提供具体的 `/wp-admin/admin-ajax.php` 请求日志或调用的 action 名称(如 `action=my_custom_ajax`),我可以进一步帮你定位是哪个插件或功能在调用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值