functions.php
文件是您为 WordPress 主题添加功能的唯一位置。您可以在其中把自定义功能挂载到 WordPress 的核心功能上,使您的主题更加模块化、更具扩展性、功能更加丰富。
什么是functions.php?
functions.php
文件的行为类似于 WordPress 插件,为 WordPress 网站添加一些特性和功能。您可以使用它来调用 WordPress 函数或定义自己的函数。
使用插件或
functions.php
可以产生相同的结果。如果我们正在为主题创建新功能,无论网站是什么样的, 最好将它们放在插件中 。
使用 WordPress 插件或 functions.php 各有利弊:
使用 WordPress 插件:
- 需要特定的,唯一的标题文本;
- 存储在 wp-content/plugins 中
- 仅在激活时执行;
- 适用于所有主题
- 应该有一个特定目的 – 例如,提供搜索引擎优化功能或帮助备份。
使用 functions.php
文件:
- 不需要唯一的标题文本;
- 存储在 wp-content/themes 中的主题子目录中;
- 仅在主题激活时执行;
- 仅适用于该主题(如果主题更改,则无法再使用这些功能)
- 可以有许多代码块,实现各种功能
每个主题都有自己的函数文件,但只有在激活主题的functions.php
文件中的代码会被直接执行。如果您的主题已有 function.php 文件,我们可以添加代码到这个文件中。如果没有,我们需要先创建这个文件。
子主题可以拥有自己的 functions.php
文件。向子主题的函数文件添加函数是修改父主题的无风险方法。当更新父主题时,您不必担心添加的新功能会消失。
虽然子主题的
functions.php
在父主题的functions.php
之前加载,但它不会覆盖父主题的文件。子主题functions.php
可用于扩充或替换父主题的功能。同时,functions.php
在加载任何插件文件后加载 。
在 functions.php
中,您可以:
- 使用 WordPress 钩子。例如,使用
excerpt_length
过滤器,您可以更改文章摘录长度(默认为55个单词)。 - 使用 add_theme_support() 函数启用 WordPress 功能 。例如,启用缩略图,文章格式和导航菜单。
- 定义需要在主题的其他模板文件中重用的函数。
如果在 WordPress 插件和主题的 functions.php 中调用相同的函数或 filter,可能会产生意外的结果,极端情况下甚至会导致我们的网站无法访问。
示例
下面是一些示例,您可以在 functions.php 文件中使用这些示例来支持各种功能。如果您选择将其提交到 WordPress.org 主题目录,您可以在自己的主题中使用这些示例中的任意一个。
主题设置
许多主题功能应包含在“设置”功能中,该功能在激活主题时运行。如下所示,您可以将这些函数添加到自己主题的 functions.php
文件中,以激活推荐的WordPress 功能。
使用主题名称为函数名加一个前缀非常重要。以下所有示例都
myfirsttheme_
用作命名空间,您可以根据自己的主题名称进行定义。
要创建此初始函数,您需要新建一个名为 myfirsttheme_setup()
的函数 ,如下所示:
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* 设置主题默认值,并注册一些 WordPress 功能
* 在 init 钩子之前设置这些函数非常重要,以确保这些功能不会失效
* @since MyFirstTheme 1.0
*/
function myfirsttheme_setup() {
注意:在上面的示例中,函数 myfirsttheme_setup
已打开但未关闭。一定要关闭我们的函数
自动 Feed 链接
您可以使用 add_theme_support() 函数为主题添加 automatic-feed-links 功能支持,默认情况下,该功能可以发布文章和评论 RSS Feed。这些 Feed 将在<head>
自动显示 。
add_theme_support( 'automatic-feed-links' );
导航菜单
自定义导航菜单可以让用户在菜单管理面板中编辑和自定义菜单,为用户提供拖放界面来编辑主题中的各种菜单。
您可以使用 register_nav_menus() 函数在 functions.php
中设置多个菜单 。并使用 wp_nav_menu() 将它添加插入到主题中 ,如果您主题允许多个菜单,可以使用数组。虽然某些主题没有自定义导航菜单,但建议启用此功能以一变用户可以轻松的管理网站菜单。
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' )
) );
您定义的每个菜单都可以使用 wp_nav_menu() 调用,调用菜单式,指定菜单名称名称(如:primary)为该函数的 theme_location
参数值即可。
加载文本域
通过使主题中的字符串可翻译,主题可以被翻译成多种语言。为此,您必须使用load_theme_textdomain() 函数来设置翻译文件。有关使主题可用于翻译的更多信息,请阅读国际化部分。
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
文章缩略图
文章缩略图和特色图片可让用户选择一个图像来代表他们的文章。您可以根据主题设计来决定如何显示它们。例如,您可以选择在存档页面中显示每个文章的文章缩略图。或者,您可能希望在主页上使用大幅特色图像。虽然并非每个主题都需要特色图片,但建议为主题添加缩略图支持。
add_theme_support( 'post-thumbnails' );
文章格式
文章格式允许用户以不同的方式格式化他们的帖子。这对于允许网站管理员根据文章内容选择不同的格式和模板很有用。 add_theme_support()
也可以用来启用文章格式。
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
初始设置示例
我们在这里为您整理了包含上面所有功能的 functions.php 代码,如下所示。已添加代码注释,以供将来使用。
如本示例代码底部所示,必须添加 add_action()
语句才可以确保已加载 myfirsttheme_setup
函数。
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* 设置主题默认值并注册对各种WordPress功能的支持。
*
* 请注意,此函数已挂接到after_setup_theme挂钩中,该挂钩在init挂钩之前运行。
* 对于某些功能(例如指示支持帖子缩略图),init挂钩为时已晚。
*/
function myfirsttheme_setup() {
/**
* 使主题可用于翻译。
* 可以将翻译放在/ languages /目录中。
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* 将默认文章和评论RSS feed链接添加到<head>。
*/
add_theme_support( 'automatic-feed-links' );
/**
* 启用对文章缩略图和特色图片的支持。
*/
add_theme_support( 'post-thumbnails' );
/**
* 添加对两个自定义导航菜单的支持。
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __('Secondary Menu', 'myfirsttheme' )
) );
/**
* 启用对以下文章格式的支持:
* aside, gallery, quote, image, and video
*/
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
}
endif; // myfirsttheme_setup
add_action( 'after_setup_theme', 'myfirsttheme_setup' );
内容宽度
您可以添加一个内容宽度变量到functions.php
文件中,以确保网站内容或文件不会破坏网站布局。内容宽度设置了允许添加到您网站的任何内容的最大允许宽度,包括上传的图片。在下面的示例中,内容区域的最大宽度为 800 像素。网站上显示的内容不会超过这个宽度。
if ( ! isset ( $content_width) )
$content_width = 800;
其他功能
您还可以在functions.php
中包含其他常见功能 。下面是一些最常见。
您的 functions.php 文件
如果您包含上面列出的所有函数,下面的代码这就是您主题的 functions.php代码。
/**
* MyFirstTheme 主题功能和定义
*
* @package MyFirstTheme
* @since MyFirstTheme 1.0
*/
/**
* 首先,设置最大宽度,这将限制上传的文件大小和嵌入内容的宽度
*/
if ( ! isset( $content_width ) )
$content_width = 800; /* 像素 */
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* 设置主题默认值并注册对各种WordPress功能的支持。
*
* 请注意,此函数已挂接到after_setup_theme挂钩中,该挂钩在init挂钩之前运行。
* 对于某些功能(例如指示支持文章缩略图),init挂钩为时已晚。
*/
function myfirsttheme_setup() {
/**
* 使主题可用于翻译。
* 可以将翻译放在/ languages /目录中。
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* 将默认文章和评论RSS feed链接添加到<head>。
*/
add_theme_support( 'automatic-feed-links' );
/**
* 启用对文章缩略图和特色图片的支持。
*/
add_theme_support( 'post-thumbnails' );
/**
* 添加对两个自定义导航菜单的支持。
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __('Secondary Menu', 'myfirsttheme' )
) );
/**
* 启用对以下文章格式的支持:
* aside, gallery, quote, image, and video
*/
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
}
endif; // myfirsttheme_setup
add_action( 'after_setup_theme', 'myfirsttheme_setup' );