Functions.php
可以由经典主题,封锁主题和儿童主题使用。这functions.php
文件是您在WordPress主题中添加唯一功能的地方。它可用于将WordPress的核心函数挂钩,以使您的主题更加模块化,可扩展和功能。
什么是functions.php?
这functions.php
文件的行为就像WordPress插件,在WordPress站点中添加功能和功能。您可以使用它来调用WordPress函数并定义自己的功能。
functions.php
。如果您正在创建新功能,无论网站是什么样的,最好的做法是将它们放入插件。使用WordPress插件或使用functions.php
。
WordPress插件:
- 需要特定独特的标题文本;
- 通常存储在WP-CONTENT/插件中,通常在子目录中;
- 激活时仅在页面加载上执行;
- 适用于所有主题;和
- 应该有一个单一的目的 – 例如,提供搜索引擎优化功能或备份帮助。
同时,functions.php
文件:
- 不需要独特的标题文字;
- 存储在主题的子目录中,以WP-CONTENT/主题为主题;
- 仅在Active主题的目录中执行;
- 仅适用于该主题(如果更改了主题,则不能再使用功能);和
- 可以使用许多用于许多不同目的的代码块。
每个主题都有自己的函数文件,但仅在Active主题中代码functions.php
实际上是运行。如果您的主题已经有一个函数文件,则可以向其添加代码。如果没有,您可以创建一个名为的普通文本文件functions.php
如下所述,要添加主题目录。
A 儿童主题 可以有自己的functions.php
文件。将函数添加到子函数文件是修改父主题的一种无风险方法。这样一来,当父主题更新时,您就不必担心新添加的功能消失。
functions.php
在父主题之前由WordPress加载functions.php
,它不是覆盖它。孩子主题的functions.php
可用于增强或替换父主题的功能。相似地,functions.php
已加载加载任何插件文件后。和functions.php
你可以:
- 使用WordPress钩。例如,这
excerpt_length
过滤器您可以更改帖子摘录长度(默认值为55个单词)。 - 启用WordPress功能
add_theme_support()
。例如,打开缩略图,后格式和导航菜单。 - 定义您希望在多个主题模板文件中重复使用的函数。
在WordPress中,当两个或多个函数,类或变量具有相同名称时,可能会发生命名冲突。这可能会导致WordPress站点中的错误或意外行为。主题开发人员和插件开发人员的责任是避免在各自的代码中命名冲突。
主题开发人员应确保其功能,类和变量具有与WordPress Core或其他插件使用的唯一名称。他们还应将其功能和班级名称与唯一标识符(例如主题名称或缩写)前缀,以最大程度地减少命名冲突的机会。
例子
以下是您可以在functions.php文件中使用的许多示例来支持各种功能。如果您选择将其提交给WordPress.org主题目录,则在主题中允许这些示例中的每一个。
主题设置
当您的主题被激活时最初运行的“设置”函数中应包含许多主题功能。如下所示,可以将这些功能添加到您的functions.php
文件以激活推荐的WordPress功能。
myfirsttheme_
作为其名称空间,应根据您的主题名称进行自定义。要创建此初始功能,请启动一个标题为“新功能”myfirsttheme_setup()
,这样:
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various WordPress
* features.
*
* It is important to set up these functions before the init hook so
* that none of these features are lost.
*
* @since MyFirstTheme 1.0
*/
function myfirsttheme_setup() { ... }
注意:在上面的示例中,启动了函数myfirsttheme_setup,但未关闭。确保关闭您的功能。
自动供稿链接
默认情况下,自动提要链接可以启用和注释RSS提要。这些提要将显示在<head>
自动地。他们可以使用add_theme_support()
在经典主题中。此功能将自动启用用于块主题,并且在主题设置中无需包含。
add_theme_support( 'automatic-feed-links' );
导航菜单
在经典主题中,定制 导航菜单 允许用户在菜单管理面板中编辑和自定义菜单,从而为用户提供拖放接口,以编辑主题中的各种菜单。
您可以在functions.php
。可以使用register_nav_menus()
并使用wp_nav_menu()
,如所讨论的 后来在本手册中。如果您的主题允许多个菜单,则应使用数组。尽管某些主题不会具有自定义导航菜单,但建议您允许此功能轻松自定义。
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' )
) );
您定义的每个菜单都可以在以后使用wp_nav_menu()
并使用分配的名称(即主)作为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' ) );
主题主题主题支持
在块主题中,自动启用以下主题支持:
add_theme_support( 'post-thumbnails' );
add_theme_support( 'responsive-embeds' );
add_theme_support( 'editor-styles' );
add_theme_support( 'html5', array( 'style','script' ) );
add_theme_support( 'automatic-feed-links' );
初始设置示例
包括以上所有功能将为您提供functions.php
像下面的文件一样归档。为将来的清晰度添加了代码评论。
如本示例底部所示,您必须添加所需的add_action()
声明以确保myfirsttheme_setup
功能已加载。
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various
* WordPress features.
*
* Note that this function is hooked into the after_setup_theme
* hook, which runs before the init hook. The init hook is too late
* for some features, such as indicating support post thumbnails.
*/
function myfirsttheme_setup() {
/**
* Make theme available for translation.
* Translations can be placed in the /languages/ directory.
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* Add default posts and comments RSS feed links to <head>.
*/
add_theme_support( 'automatic-feed-links' );
/**
* Enable support for post thumbnails and featured images.
*/
add_theme_support( 'post-thumbnails' );
/**
* Add support for two custom navigation menus.
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' ),
) );
/**
* Enable support for the following post formats:
* 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;
}
包括theme.json配置文件的主题无需在functions.php中包含变量。而是将内容宽度添加到theme.json中的布局设置中。你可以 了解有关使用主题的更多信息。。
其他特性
您还可以包含其他常见功能functions.php
。下面列出的是一些最常见的功能。单击并了解有关这些功能的每个功能的更多信息。
您的functions.php文件
如果您选择包括上面列出的所有功能,这就是您的functions.php可能看起来像。它已经评论了上述引用。
/**
* MyFirstTheme's functions and definitions
*
* @package MyFirstTheme
* @since MyFirstTheme 1.0
*/
/**
* First, let's set the maximum content width based on the theme's
* design and stylesheet.
* This will limit the width of all uploaded images and embeds.
*/
if ( ! isset( $content_width ) ) {
$content_width = 800; /* pixels */
}
if ( ! function_exists( 'myfirsttheme_setup' ) ) :
/**
* Sets up theme defaults and registers support for various
* WordPress features.
*
* Note that this function is hooked into the after_setup_theme
* hook, which runs before the init hook. The init hook is too late
* for some features, such as indicating support post thumbnails.
*/
function myfirsttheme_setup() {
/**
* Make theme available for translation.
* Translations can be placed in the /languages/ directory.
*/
load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
/**
* Add default posts and comments RSS feed links to <head>.
*/
add_theme_support( 'automatic-feed-links' );
/**
* Enable support for post thumbnails and featured images.
*/
add_theme_support( 'post-thumbnails' );
/**
* Add support for two custom navigation menus.
*/
register_nav_menus( array(
'primary' => __( 'Primary Menu', 'myfirsttheme' ),
'secondary' => __( 'Secondary Menu', 'myfirsttheme' ),
) );
/**
* Enable support for the following post formats:
* 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' );