Wordpress functions.php 子主题

Ced*_*Ced 3 php wordpress parent-child

实际上,我正在使用 Wordpress 构建一个网站,一切正常,但是现在我需要在functions.php 中添加一些更改,即父文件夹中的原始文件,那么我该怎么办?是否可以复制functions.php子主题中的所有内容,然后添加更改?

由于未来的主题更新,我不想在父文件夹中添加更改。但是告诉我这是否是唯一的选择。

编辑:“不要将父主题的functions.php 的全部内容复制到子主题的functions.php 中。” 是来自 Wordpress Codex 的建议 https://codex.wordpress.org/Child_Themes

编辑 2:[已解决] 观看下面的答案。

Atl*_*dal 10

一个儿童主题是继承了功能和造型的另一个主题,称为父主题的主题。子主题是修改现有主题的推荐方式。

如何创建子主题

  1. 创建子主题目录(将子主题命名为父主题并在末尾添加-child 的常用方法。)
  2. 创建style.css
  3. 创建函数.php

样式表必须以以下内容开头(样式表标题):

/*
Theme Name: XYZ Child Theme
Theme URI: http://example.com/themes/spacious/
Description: XYZ Child theme
Author: ABC
Author URI: http://example.com
Template: XYZ
Version: 1.0
*/
/* =Theme customization starts here
------------------------------------------------------- */
Run Code Online (Sandbox Code Playgroud)

需要注意的几点:

  • 您需要将示例文本替换为与您的主题相关的详细信息。
  • Template 行对应父主题的目录名,所以做相应的调整。

最后一步是将里面排队这样的functions.php父和子主题风格:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_styles' );
function enqueue_parent_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
}
Run Code Online (Sandbox Code Playgroud)

最后,要激活子主题,请在仪表板中转到外观->主题。查找您创建的子主题并激活它。就是这样。此外,请确保父主题也存在于已安装的主题中,以便子主题正常工作。如果您现在访问您的站点,它应该看起来与激活父主题时一样。

现在,您可以毫无问题地更改您的子主题!

如果要修改父主题函数,则只需将其包含在条件标记中即可检查是否已运行该名称的函数:

<?php
if ( ! function_exists ( 'my_function' ) ) {
    function my_function() {
        // Contents of your function here.
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

因此,如果您将父主题中的函数包含在这样的条件标签中,WordPress 将检查您的子主题中是否存在已运行的同名函数,如果是这种情况,它将不会运行该函数从父主题。

然后,当您在子主题中编写要覆盖父主题中的函数的函数时,只需将其命名为与父主题中的函数相同的名称:

<?php
function my_function() {
    // Contents for your function override here.
}
?>
Run Code Online (Sandbox Code Playgroud)

WordPress 将首先运行子主题中的函数,当涉及到父主题中的函数时,它会检查它是否已经存在,因为存在,它不会运行它。

如果你不想接触父functions.php,那么你可以:

  1. 为子主题功能分配更高的优先级:

    add_action( 'init', 'child_function', 15 );   
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从钩子中删除父主题函数:

    remove_action( 'init', 'parent_function' );
    
    Run Code Online (Sandbox Code Playgroud)