1-1 wordpress 主题功能

Functions.php 可供经典主题、块主题和子主题使用。

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 中的代码。 如果您的主题已经有一个函数文件,您可以向其中添加代码。 如果没有,您可以创建一个名为 functions.php 的纯文本文件以添加到您的主题目录中,如下所述。

子主题可以有自己的 functions.php 文件。 将函数添加到子函数文件是修改父主题的无风险方法。 这样,当父主题更新时,您不必担心新添加的功能会消失。

注意:虽然子主题的functions.php 被WordPress 加载在父主题的functions.php 之前,但它不会覆盖它。 子主题的 functions.php 可用于扩充或替换父主题的功能。 同样,functions.php 在任何插件文件加载后加载。

使用functions.php,您可以:

  • 使用 WordPress 钩子。 例如,使用 excerpt_length 过滤器,您可以更改您的文章摘录长度(默认为 55 个字)。
  • 使用 add_theme_support() 启用 WordPress 功能。 例如,打开帖子缩略图、帖子格式和导航菜单。
  • 定义您希望在多个主题模板文件中重用的功能。

如果 WordPress 插件调用与您在 functions.php 中所做的相同的函数或过滤器,则结果可能出乎意料,甚至导致您的网站被禁用。

二、例子

下面是一些示例,您可以在 functions.php 文件中使用它们来支持各种功能。 如果您选择将这些示例提交到 WordPress.org 主题目录,则这些示例中的每一个都可以在您的主题中使用。

1、主题设置

许多主题功能应包含在“设置”功能中,该功能最初在您的主题被激活时运行。 如下所示,这些功能中的每一个都可以添加到您的 functions.php 文件中以激活推荐的 WordPress 功能。

使用主题名称命名函数很重要。 下面的所有示例都使用 myfirsttheme_ 作为它们的命名空间,应根据您的主题名称进行自定义。

要创建这个初始函数,请启动一个名为 myfirsttheme_setup() 的新函数,如下所示:

1 if ( ! function_exists( 'myfirsttheme_setup' ) ) :
2 /**
3 * 设置主题默认值并注册对各种 WordPress 功能的支持
4 *
5 *  在 init 钩子之前设置这些功能很重要,这样这些功能都不会丢失。
6 *
7 *  @since MyFirstTheme 1.0
8 */
9 function myfirsttheme_setup() {

注意:在上面的示例中,函数 myfirsttheme_setup 已启动但未关闭。 一定要关闭你的函数。

(1)自动提要链接

默认情况下,自动提要链接启用发布和评论 RSS 提要。 这些提要会自动显示在 <head> 中。 可以使用 add_theme_support() 调用它们。

1 add_theme_support( 'automatic-feed-links' );

(2)导航菜单

在经典主题中,自定义导航菜单允许用户在菜单管理面板中编辑和自定义菜单,为用户提供拖放界面来编辑其主题中的各种菜单。

您可以在functions.php 中设置多个菜单。 它们可以使用 register_nav_menus() 添加并使用 wp_nav_menu() 插入到主题中,如本手册后面所述。 如果您的主题允许多个菜单,则应使用数组。 虽然某些主题没有自定义导航菜单,但建议您允许此功能以便于自定义。

1 register_nav_menus( array(
2     'primary'   => __( 'Primary Menu', 'myfirsttheme' ),
3     'secondary' => __( 'Secondary Menu', 'myfirsttheme' )
4 ) );

您定义的每个菜单都可以稍后使用 wp_nav_menu() 并使用分配的名称(即主要)作为 theme_location 参数来调用。

 在块主题中,您使用导航块。

(3)加载文本域

通过使主题中的字符串可用于翻译,可以将主题翻译成多种语言。 为此,您必须使用 load_theme_textdomain()。 有关使您的主题可用于翻译的更多信息,请阅读国际化部分。

1 load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );

(4)发布缩略图

帖子缩略图和特色图像允许您的用户选择一个图像来代表他们的帖子。 您的主题可以根据其设计决定如何显示它们。 例如,您可以选择在存档视图中显示每个帖子的帖子缩略图。 或者,您可能想在主页上使用大型特色图片。 虽然不是每个主题都需要特色图片,但建议您支持帖子缩略图和特色图片。

1 add_theme_support( 'post-thumbnails' );

(5)帖子格式

帖子格式允许用户以不同的方式格式化他们的帖子。 这对于允许博主根据帖子的内容选择不同的格式和模板很有用。 add_theme_support() 也用于帖子格式。 这是推荐的。

1 add_theme_support( 'post-formats',  array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );

(6)块主题中的主题支持

在块主题中,自动启用以下主题支持:

1 add_theme_support( 'post-thumbnails' );
2 add_theme_support( 'responsive-embeds' );
3 add_theme_support( 'editor-styles' );
4 add_theme_support( 'html5', array('style','script', ) );
5 add_theme_support( 'automatic-feed-links' );

(7)初始设置示例

包含上述所有功能将为您提供如下所示的 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 提要链接到 <head>。
     */
    add_theme_support( 'automatic-feed-links' );
 
    /**
     * 启用对帖子缩略图和特色图片的支持。
     */
    add_theme_support( 'post-thumbnails' );
 
    /**
     * 添加对两个自定义导航菜单的支持。
     */
    register_nav_menus( array(
        'primary'   => __( 'Primary Menu', 'myfirsttheme' ),
        'secondary' => __('Secondary Menu', 'myfirsttheme' )
    ) );
 
    /**
     * 启用对以下帖子格式的支持:
     * 边栏、画廊、报价、图片和视频
     */
    add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
}
endif; // myfirsttheme_setup
add_action( 'after_setup_theme', 'myfirsttheme_setup' );

2、内容宽度

将内容宽度添加到您的 functions.php 文件中,以确保没有内容或资产破坏站点的容器。 内容宽度设置添加到您网站的任何内容(包括上传的图像)的最大允许宽度。 在下面的示例中,内容区域的最大宽度为 800 像素。 没有内容会比这更大。

1 if ( ! isset ( $content_width) )
2     $content_width = 800;

3、其他特性

您可以在 functions.php 中包含其他常见功能。 下面列出了一些最常见的功能。

  • 自定义标题 - 经典主题
  • 侧边栏(小部件区域) - 经典主题
  • 自定义背景 - 经典主题
  • 标题标签 - 经典主题
  • 添加编辑器样式
  • HTML5

二、您的 functions.php 文件

如果您选择包含上面列出的所有函数,这就是您的 functions.php 的样子。 已参考上述内容对其进行了评论。

 1 /**
 2  * MyFirstTheme 的功能和定义
 3  *
 4  * @package MyFirstTheme
 5  * @since MyFirstTheme 1.0
 6  */
 7  
 8 /**
 9  * 首先,让我们根据主题的设计和样式表设置最大内容宽度。
10  * 这将限制所有上传图像和嵌入的宽度。
11  */
12 if ( ! isset( $content_width ) )
13     $content_width = 800; /* pixels */
14  
15 if ( ! function_exists( 'myfirsttheme_setup' ) ) :
16 /**
17  * 设置主题默认值并注册对各种 WordPress 功能的支持。
18  *
19  * 请注意,此函数与 after_setup_theme 挂钩,该挂钩在 init 挂钩之前运行。 init 钩子对于某些功能来说太晚了,例如指示支持帖子缩略图。
20  */
21 function myfirsttheme_setup() {
22  
23     /**
24      * 使主题可用于翻译。
25      * 翻译可以放在 /languages/ 目录中。
26      */
27     load_theme_textdomain( 'myfirsttheme', get_template_directory() . '/languages' );
28  
29     /**
30      * 添加默认帖子和评论 RSS 提要链接到 <head>。
31      */
32     add_theme_support( 'automatic-feed-links' );
33  
34     /**
35      * 启用对帖子缩略图和特色图片的支持。
36      */
37     add_theme_support( 'post-thumbnails' );
38  
39     /**
40      * 添加对两个自定义导航菜单的支持。
41      */
42     register_nav_menus( array(
43         'primary'   => __( 'Primary Menu', 'myfirsttheme' ),
44         'secondary' => __('Secondary Menu', 'myfirsttheme' )
45     ) );
46  
47     /**
48      * 启用对以下帖子格式的支持:
49      * 边栏、画廊、报价、图片和视频
50      */
51     add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
52 }
53 endif; // myfirsttheme_setup
54 add_action( 'after_setup_theme', 'myfirsttheme_setup' );

 

posted @ 2022-03-08 14:00  Arya-Wang  阅读(216)  评论(0)    收藏  举报