WordPress functions.php 文件:终极指南 + 有用的代码片段

已发表: 2023-03-30

不确定 WordPress functions.php 文件是什么或者您可以用它做什么?

简而言之,WordPress functions.php 文件为您提供了一种向站点添加代码片段的方法。 您可以以各种有用的方式使用这些片段,因此了解 functions.php 文件的工作原理可以帮助您构建更好的 WordPress 站点。

在我们的 WordPress functions.php 文件终极指南中,您将了解有关此文件的所有信息。

在您了解 functions.php 文件的所有信息后,我们还将分享 17 个有用的 functions.php 代码片段,以帮助您开始自定义您的网站。

WordPress functions.php 文件有什么作用?

WordPress functions.php 文件是一个主题文件,您可以使用它向您的网站添加自定义代码片段。 您可以使用这些代码片段来修改网站不同区域的功能或向您的网站添加新内容/代码。

尽管包含在您的主题中,但 WordPress functions.php 文件并不仅限于对您的主题进行自定义。

您可以对网站的任何部分进行调整,类似于插件的工作方式。

以下是您可以使用 WordPress functions.php 文件进行的一些常见调整类型:

  • 更改核心 WordPress 行为,例如在搜索结果页面上显示多少帖子或在您站点的 RSS 提要中包含哪些内容。
  • 创建您自己的自定义简码。
  • 向您的网站添加新内容或脚本,例如在某些页面上从您的实时聊天服务中注入脚本或编辑您网站的页脚。

这只是表面现象……

因为 functions.php 文件允许您将自定义 PHP 代码片段而不是静态 HTML 添加到您的站点,所以当涉及到您可以进行的修改类型时,天空是无限的。

WordPress functions.php 文件位于何处?

WordPress functions.php 文件与其他主题文件位于您的活动主题文件夹中。 要查找该文件,您可以使用 FTP 或文件管理器工具连接到您的服务器,然后浏览至.../wp-content/themes/[active-theme-name]/functions.php

例如,如果您使用流行的 OceanWP 主题,则 functions.php 文件将位于.../wp-content/themes/oceanwp/functions.php

您知道 functions.php 文件是自定义 WordPress 网站的强大工具吗? 以下是开始时您需要了解的所有信息(加上 17 个有用的代码片段,让您的网站真正属于您自己) 点击推文

如何安全地使用 functions.php 文件

因为使用 WordPress functions.php 文件涉及向您的网站添加代码,所以在开始进行任何编辑之前遵循一些最佳实践非常重要。

即使像缺少逗号或撇号这样简单的事情也会在您的网站上引发错误,例如 WordPress 白屏死机。

在 WordPress 的最新版本中,WordPress 在以更优雅的方式处理这些错误方面做得更好,例如显示“您的网站上出现严重错误”消息或在保存更改之前检查 PHP 错误。

但仍然 - 为避免发生任何问题,我们始终建议遵循这些最佳实践......

在暂存站点上测试您的 functions.php 代码

在将任何 functions.php 代码片段添加到您的实时 WordPress 网站之前,我们始终建议首先在您网站的暂存版本上测试它们。 这使您可以检查是否存在任何潜在错误并验证代码片段是否按预期工作。

如果您使用 Kinsta 托管,Kinsta 会为所有计划提供简单的一键式登台工具,这是使用托管 WordPress 托管的好处之一。

如果您在其他地方托管,您可以查看我们关于设置 WordPress 暂存站点的指南。

在更改 functions.php 之前备份您的站点

除了在暂存站点上进行测试之外,您还需要在将代码片段添加到实时站点的 functions.php 文件之前备份您的实时网站。

这是编辑任何 WordPress 文件时应遵循的最佳实践。

如果代码片段出现任何问题,您可以恢复到此备份点,以立即让您的网站重新运行。

如果您使用 Kinsta 托管,Kinsta 会每天自动备份您的网站,您也可以随时手动创建备份。 如果您在其他地方托管,您可以阅读我们的指南,了解如何备份 WordPress 网站。

如果您正在编辑 functions.php 文件,请始终使用子主题

因为 WordPress functions.php 文件位于您的 WordPress 主题代码中,所以当您更新主题时,您的主题将覆盖 functions.php 文件。

为避免覆盖您对主题的 functions.php 文件所做的更改,您应该始终使用 WordPress 子主题并将代码片段添加到子主题中的functions.php 文件。

通过使用子主题,您仍然可以在需要时更新父主题,但您的所有 functions.php 自定义永远不会被覆盖。

要了解更多信息,请查看我们关于如何创建 WordPress 子主题的完整指南。

2 个可能更好的 functions.php 文件替代方案

虽然 WordPress functions.php 文件提供了一种将代码片段添加到站点的简单方法,但在大多数情况下,还有一些 functions.php 替代方案可以提供更好的解决方案:

  1. 使用代码管理器插件
  2. 在自定义插件中存储代码片段

与使用 functions.php 文件相比,这些替代方案有一些优势:

  • 不依赖于您的主题——这意味着如果您更改主题,您的 functions.php 定制将仍然存在。
  • 更好的组织——这些替代方案可以更轻松地组织您的代码片段,如果您计划向您的网站添加大量代码片段,这会很有帮助。
  • 更多控制——在代码管理器插件的情况下,您可以获得有用的选项,例如使用切换按钮启用/禁用片段,仅在前端或后端运行片段,等等。

使用代码管理器插件

代码管理器插件是一个插件,它为您提供一个用户友好的界面来添加和编辑代码片段,否则这些代码片段将进入 functions.php 文件。

最受欢迎的选项之一是免费的代码片段插件,但您可以找到提供类似功能的其他插件。

使用代码片段,您可以从 WordPress 仪表板添加您的 functions.php 代码片段,并带有选项以......

  • 添加标题和说明。
  • 使用标签组织您的片段。
  • 仅在您网站的特定部分运行代码段。
在代码片段插件中添加代码片段。
在代码片段插件中添加代码片段。

然后,您可以在列表中查看所有代码片段,并根据需要轻松启用/禁用它们。

如何在代码片段中管理片段。
如何在代码片段中管理片段。

因为代码片段是一个插件,所以即使您更改了 WordPress 主题,您的所有代码片段仍将存在。

创建自定义功能插件

WordPress functions.php 文件的另一种替代方法是创建您自己的自定义插件来存放代码片段。

虽然这听起来很复杂,但实际上比看起来要简单得多。

它是这样工作的:

  1. 在您的本地计算机上为您的插件创建一个文件夹。
  2. 在该文件夹中创建一个 .php 文件,然后使用您喜欢的文本编辑器对其进行编辑。
  3. 将下面的代码模板添加到文件中。
  4. 将您的 functions.php 代码片段添加到文件中
<?php /** * Plugin Name: My Custom Code Snippets * Description: This is a custom plugin to house code snippets. * Author: Kinsta * Version: 1.0 */ /* Add the first code snippet below this comment - use the comment to explain what it does. */ [CODE] /* Add the second code snippet below this comment. */' [CODE] /* Continue as needed. */ [CODE] ?>

然后,您只需要在 WordPress 上安装并激活插件即可。 这里有两种方法可以做到这一点:

  1. 通过 FTP/SFTP 连接到您的服务器,并将自定义插件文件夹上传到wp-content/plugins文件夹。 然后,转到插件列表并激活插件。
  2. 使用您的计算机创建该文件夹的 .zip 文件。 然后,转到插件 → 添加新插件并上传 .zip 文件以像安装任何其他插件一样安装它。

如何访问 WordPress functions.php 文件:2 个选项

您可以通过不同的方式访问和编辑 WordPress functions.php 文件。 以下是适用于任何主机的两种最通用的方法:

  1. WordPress 仪表板内主题代码编辑器。
  2. SFTP 和您自己的代码编辑器。

1. 使用 WordPress In-Dashboard 主题代码编辑器

默认情况下,WordPress 允许您从 WordPress 仪表板编辑所有主题代码,包括 functions.php 文件:

  1. 打开您的 WordPress 仪表板。
  2. 转到外观 → 主题文件编辑器
  3. 在右侧的Theme Files列表中选择Theme Functions (functions.php)文件。
  4. 在代码编辑器中添加您的编辑。
  5. 单击更新文件按钮以保存您的更改。
如何从 WordPress 仪表板编辑 functions.php 文件。
如何从 WordPress 仪表板编辑 functions.php 文件。

话虽如此,许多人喜欢禁用 WordPress 仪表板内文件编辑以提高安全性。 在这种情况下,您可以使用下一个方法。

2. 使用 SFTP + 你自己的代码编辑器

对于编辑 WordPress functions.php 文件的另一种方法,您可以通过 FTP/SFTP 连接到您的服务器并以这种方式编辑文件。

就是这样:

  1. 如果您还没有下载 FTP 客户端,请下载 - 我们将使用免费的 FileZilla 客户端来获取屏幕截图。
  2. 使用您的 FTP 凭据连接到您的服务器 – 以下是使用 SFTP 进行连接的方法。
  3. 使用文件夹结构导航到.../wp-content/themes/[your-active-child-theme]
  4. 右键单击functions.php文件并选择Edit
如何使用 FileZilla 编辑 functions.php 文件。
如何使用 FileZilla 编辑 functions.php 文件。

这应该将文件下载到您的本地计算机并自动在文本编辑器中打开它。 您现在可以将代码片段添加到文件中。

FileZilla 将在本地文本编辑器中打开文件——例如崇高的文字。
FileZilla 将在本地文本编辑器中打开文件——例如 Sublime Text。

完成后,保存更改并关闭文件。

然后 FileZilla 应该会提示您将编辑后的版本重新上传到您的服务器。

确保在进行更改后重新上传 functions.php 文件。
确保在进行更改后重新上传 functions.php 文件。

要添加到您的 WordPress functions.php 文件中的最有用的函数

现在您已经知道如何编辑 WordPress functions.php 文件,让我们看一下可以添加到站点的一些最有用的 functions.php 代码片段。

在博客文章上显示最后修改日期

默认情况下,大多数主题显示您发布博客文章的日期。 但是,如果您定期更新和刷新旧内容,您可能还想显示最后修改日期(或将发布日期替换为最后修改日期)。

这不仅让您的访问者知道您仍在更新内容,而且还向 Google 表明您的内容是最新的。

 function show_last_updated( $content ) { $u_time = get_the_time('U'); $u_modified_time = get_the_modified_time('U'); if ($u_modified_time >= $u_time + 86400) { $updated_date = get_the_modified_time('F jS, Y'); $updated_time = get_the_modified_time('h:i a'); $custom_content .= '<p class="last-updated-date">Recently updated on '. $updated_date . ' at '. $updated_time .'</p>'; } $custom_content .= $content; return $custom_content; } add_filter( 'the_content', 'show_last_updated' );

有关更多详细信息,请查看我们显示 WordPress 上最后修改日期的完整帖子。

为某些用户禁用 WordPress 工具栏

默认情况下,WordPress 会为所有使用内置 WordPress 用户角色的登录用户显示 WordPress 工具栏。 这不一定是自定义角色的情况,例如WooCommerce 商店的客户用户角色

如果你想改变这一点,你可以使用 functions.php 代码片段来隐藏某些用户角色的 WordPress 工具栏。

此示例将为具有作者用户角色的用户租用管理工具栏。

 add_filter( 'show_admin_bar', function( $show ) { if ( current_user_can( 'author' ) ) { return false; } return $show; } );

延迟帖子出现在 RSS 提要中

默认情况下,内容会在您发布后立即出现在您的 RSS 提要中。 这可以让内容抓取者有机会在谷歌索引你的原始帖子之前抓取你的内容并在谷歌中索引它。

为避免让其他人因您的内容而获得荣誉,您可以延迟帖子出现在您的 RSS 提要中。

虽然这不会完全阻止内容抓取,但这确实意味着您可以给 Google 时间来首先为您的内容编制索引。

这是代码片段——您可以将数字——本例中的“30”——更改为您希望延迟的分钟数:

 function kinsta_delay_feed_content($where) { global $wpdb; if ( is_feed() ) { // timestamp in WP-format $now = gmdate('Ymd H:i:s'); // value for wait; + device $wait = '30'; // integer // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff $device = 'MINUTE'; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR // add SQL-sytax to default $where $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait "; } return $where; } add_filter('posts_where', 'kinsta_delay_feed_content');

从 RSS 提要中排除某些类别

除了延迟内容出现在 RSS 提要中之外,您还可能希望排除整个类别的博客帖子出现在您站点的 RSS 提要中。

为此,您可以使用以下 functions.php 代码片段:

 function kinsta_exclude_category_rss($query) { if ($query->is_feed) { $query->set('cat','-38'); } return $query; } add_filter('pre_get_posts','kinsta_exclude_category_rss');

确保将示例类别 ID – “38” – 替换为您要排除的实际类别 ID(并且不要删除减号)

查找身份证号码的方法如下:

  1. 转到帖子 → 类别以查看您网站上所有类别的列表。
  2. 单击要排除的类别下的编辑
  3. 在浏览器地址栏中查看编辑页面的 URL。 类别 ID 是?taxonomy=category&tag_ID=X之后的数字。

例如,如果 URL 为https://yoursite.com/wp-admin/term.php?taxonomy=category&tag_ID=38&post_type=post ,则类别 ID 为38 。

按帖子类型限制 WordPress 修订

为避免网站数据库膨胀,您可能希望限制要保存的后期修订数量。

虽然在整个站点范围内限制 WordPress 帖子修订的一种方法是编辑站点的 wp-config.php 文件,但您可能希望为不同的帖子类型存储不同数量的修订 - 例如博客帖子与 WooCommerce 产品。

这个 functions.php 代码片段可以让您做到这一点。 要使其成为您自己的,请将帖子类型(本例中为“post”)更改为您要控制的实际帖子类型,并将数字(本例中为“5”)更改为您要存储的修订数。

 function kinsta_post_revisions_by_type( $revisions, $post ) { if( 'post' == $post->post_type ) { $revisions = 5; } return $revisions; } add_filter( 'wp_revisions_to_keep', 'kinsta_post_revisions_by_type', 10, 2 );

* 注意——您正在编辑紧接在“if”语句之后的“post”。 例如,要定位产品,该行应如下所示:

 if( 'product' == $post->post_type ) {

禁用 WordPress 搜索功能

如果您的站点不需要搜索功能,您可能希望禁用 WordPress 搜索功能以防止潜在的滥用。

例如,即使您没有在您的站点上显示搜​​索框,机器人仍然可以通过将 ?s=[search-term] 添加到您的 URL 来使用搜索功能。

为此,您可以添加以下代码片段:

 function kinsta_disable_wp_search( $query, $error = true ) { if ( is_search() ) { $query->is_search = false; $query->query_vars[s] = false; $query->query[s] = false; // to error if ( $error == true ) $query->is_404 = true; } } add_action( 'parse_query', 'kinsta_disable_wp_search' ); add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

如果有人试图直接使用搜索功能,您的站点将返回 404 页面。

创建您自己的自定义简码(例如当年)

WordPress 短代码是非常方便的快捷方式,可让您在网站中嵌入动态内容。

虽然许多 WordPress 插件依靠短代码来帮助增强其功能,但您也可以使用 WordPress functions.php 文件和 add_shortcode() 函数创建自己的自定义短代码。

例如,一个常见的用例是创建一个显示当前年份的简码。 这使您可以在所有内容中自动显示当前年份,而无需每年 1 月 1 日手动更新所有内容。

要创建这样的短代码,您可以使用以下代码:

 function year_shortcode() { $year = date('Y'); return $year; } add_shortcode('currentyear', 'year_shortcode');

然后,当您将 [currentyear] 短代码添加到您的内容时,它将自动替换为实际年份 - 例如 2023。

允许在帖子标题中使用简码

默认情况下,WordPress 不会执行您放置在帖子标题字段中的任何简码。 如果您想在 WordPress 帖子标题中使用短代码,您可以通过向 WordPress functions.php 文件添加一个简单的代码片段来启用此功能。

例如,与前面的代码片段结合使用时,您可以通过添加 [currentyear] 简码自动将当前年份包含在帖子标题中。

 add_filter( 'the_title', 'do_shortcode' );

隐藏登录错误以提高安全性

默认情况下,WordPress 会在登录尝试失败时显示解释消息。 此消息可以泄露一些信息,例如某个电子邮件地址是否已在您的站点上注册(即使密码不正确)。

为避免泄露任何潜在的敏感信息,您可以通过将以下代码片段添加到您的 functions.php 文件来隐藏这些登录错误。

 function kinsta_hide_login_errors(){ return 'These are not valid credentials'; } add_filter( 'login_errors', 'kinsta_hide_login_errors' );

此代码段将默认登录错误文本替换为以下消息 – These are not valid credentials

您可以根据自己的喜好自定义文本——但尽量避免使用破折号、斜线或其他字符,因为它会导致错误(除非您“转义”这些字符),

更改摘录长度

默认情况下,WordPress 摘录显示帖子的前 55 个单词。

如果要对此进行调整,可以将以下代码片段添加到 functions.php 文件中。

 function kinsta_change_excerpt_length($length) { return 90; } add_filter('excerpt_length', 'kinsta_change_excerpt_length');

上面的代码片段会将摘录长度更改为 90 个单词。 如果您更喜欢不同的数字,您可以将“90”更改为您要使用的确切字数。

删除 WordPress 版本号

为了让恶意行为者更难检测到您使用的是哪个版本的 WordPress,一些用户喜欢删除 WordPress 版本号,以免出现在您网站前端代码中的任何位置。

为此,您可以将以下代码片段添加到您的 functions.php 文件中。

 function kinsta_hide_version() { return ''; } add_filter('the_generator', 'kinsta_hide_version');

设置 WordPress 分页

如果您对分页在您的主题中的工作方式不满意,您可以使用 functions.php 代码片段来调整分页行为,甚至创建您自己的分页系统。

如果您对这种类型的修改感兴趣,我们有完整的 WordPress 分页指南,其中包括一些示例 functions.php 代码片段。

更改要包含在搜索列表页面上的结果数量

WordPress 为您提供了一个仪表板内选项来控制在存档页面上列出多少帖子(设置 → 阅读)。

但是,这会更改所有存档页面的数量。 如果您只想为搜索结果页面使用不同的编号怎么办?

为此,您可以将此代码段添加到您的 functions.php 文件中——确保在对其他结果进行分页之前将数字(本例中的“12”)更改为您想要显示的实际结果数。

 function kinsta_search_results_list() { if ( is_search() ) set_query_var('posts_per_archive_page', 12); } add_filter('pre_get_posts', 'kinsta_search_results_list');

在 WordPress RSS Feed 中包含特色图片

如果您想在 RSS 提要内容中包含帖子的特色图片,可以将以下代码片段添加到 functions.php 文件中。

 function kinsta_featured_image_rss($content) { global $post; if ( has_post_thumbnail( $post->ID ) ){ $content = '<div>' . get_the_post_thumbnail( $post->ID, 'full', array( 'style' => 'margin-bottom: 15px;' ) ) . '</div>' . $content; } return $content; } add_filter('the_excerpt_rss', 'kinsta_featured_image_rss'); add_filter('the_content_feed', 'kinsta_featured_image_rss');

正如所写,上面的代码片段将以全尺寸插入图像。 要使用不同的缩略图大小,您可以将“完整”更改为不同的缩略图大小——例如“大”或“中”。

添加对文件类型(例如 SVG)的上传支持

默认情况下,WordPress 会阻止您上传某些文件类型,例如 SVG 文件。

要启用对这些被阻止文件类型的支持,您可以将以下代码片段添加到 WordPress functions.php 文件中:

 function kinsta_myme_types($mime_types){ $mime_types['svg'] = 'image/svg+xml'; return $mime_types; } add_filter('upload_mimes', 'kinsta_myme_types', 1, 1);

此代码片段仅支持 SVG 上传,但您可以根据需要修改它以添加对其他文件类型的支持。

为非管理员隐藏 WordPress 更新唠叨

默认情况下,当有新更新可用时,WordPress 将向所有具有仪表板访问权限的用户显示仪表板范围的消息。

即使用户的角色不允许他们应用更新,仪表板消息也会告诉该用户联系管理员。

要对此进行调整,您可以使用此代码段来隐藏所有非管理员用户的更新通知:

 function kinsta_hide_update_nag ( ) { if ( ! current_user_can ( 'update_core' ) ) { remove_action ( 'admin_notices' , 'update_nag' , 3 ) ; } } add_action ( 'admin_menu' , 'kinsta_hide_update_nag' ) ;

对于其他一些变体,请查看我们关于如何禁用 WordPress 更新通知的指南。

更改自动 JPEG 优化质量

虽然不是每个人都知道此功能,但在您上传图像后为您的网站创建缩略图时,WordPress 会自动压缩 JPEG 图像。

从 WordPress 4.5 开始,WordPress 将默认质量级别设置为 82(100 为零压缩)。

如果你想让这个质量级别更高或更低,你可以将以下代码片段添加到你的 functions.php 文件中——确保将数字(本例中的“90”)更改为你想要使用的实际质量级别:

 add_filter( 'jpeg_quality', create_function( '', 'return 90;' ) );

组织 WordPress functions.php 文件的最佳实践

如果您只是使用 WordPress functions.php 文件添加几个代码片段,您可能不需要担心组织问题。

但是,如果您要向网站添加大量代码片段,如果您不遵循一些 functions.php 文件组织最佳实践,它很快就会变得笨拙和复杂。

以下是一些让您的代码片段井然有序的最佳实践……

添加代码注释以解释一切

当您第一次将代码片段添加到 functions.php 文件时,您确切地知道该片段的作用以及添加它的原因。 但是当你一年后回顾 functions.php 文件时,事情可能就不那么清楚了。

为避免这种情况,您需要向每个片段添加代码注释,以解释该片段的作用以及添加它的原因。

代码注释是 WordPress 不执行的文本,但人类用户可以阅读以了解代码片段的作用。

要添加单行代码注释,您可以使用以下格式:

 // This is a single-line code comment

要添加多行代码注释,您可以使用以下格式:

 /** * This is a code comment that spans multiple lines * This text is also in the same comment * This is the last line in the code comment */

下面是您可以如何使用代码注释的示例——您可以看到每个片段之前的注释解释了该片段的作用。

使用代码注释来记录 functions.php 文件中的片段的示例。
使用代码注释来记录 functions.php 文件中的片段的示例。

使用包含文件将片段分离到不同的文件中

如果你真的有很多代码片段,你可以将它们存储在单独的文件中,而不是只使用 functions.php 文件。

然后,您可以使用 include 或 require 将这些代码片段包含在 functions.php 文件中。 Mike Schinkel 在 StackExchange 上提供了一个很好的示例来说明如何执行此操作。

考虑上面的 functions.php 替代方案之一

如果您发现您的 functions.php 文件变得有点混乱,您可能更喜欢我们之前详述的 functions.php 替代方案之一。

例如,免费的 Code Snippets 插件让组织一切变得非常容易,因为您可以单独添加每个代码片段,并附上自己的标题和描述。 您还可以使用标签来组织您的片段。

使用 functions.php 文件根据您的确切规格自定义您的网站! 您需要知道的一切都在本指南中点击鸣叫

概括

WordPress functions.php 文件是一个特定于主题的文件,可让您将 PHP 代码片段添加到您的网站。

如果您想将代码片段添加到 functions.php 文件,您应该始终使用子主题,这样您的更改就不会在您更新主题时被覆盖。 我们还建议在添加代码段之前备份您的网站,并尽可能在暂存网站上测试它们。

作为使用 functions.php 文件的替代方法,您还可以考虑使用代码管理器插件或创建您自己的自定义插件来存放您的代码片段。

现在您了解了 WordPress functions.php 文件的工作原理,您可以开始以各种有用的方式自定义您的站点。

上面的示例 functions.php 代码片段为您提供了一些很好的起点,但在您可以做的事情上,天空是无限的。