Wordpress functions.php儿童主题

时间:2017-06-20 07:52:12

标签: php wordpress parent-child

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

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

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

的建议

编辑2:[求助]观看以下答案。

1 个答案:

答案 0 :(得分:1)

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

如何创建子主题

  1. 创建子主题目录(将子主题命名为父主题的常用方法以及最后添加的 -child 。)
  2. 创建 style.css
  3. 创建 functions.php
  4. 样式表必须以下面的内容(样式表标题)开头:

    /*
    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
    ------------------------------------------------------- */
    

    需要注意几点:

    • 您需要将示例文本替换为与您的主题相关的详细信息。
    • 模板行对应于父主题的目录名称,因此请相应调整。

    最后一步是将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' );
    }
    

    最后,要激活子主题,请在仪表板中转到Appearance-> Themes。查找您创建的子主题并将其激活。而已。此外,请确保父主题也存在于已安装的主题中,以使子主题起作用。如果您现在访问您的网站,它应该看起来就像激活父主题时一样。

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

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

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

    因此,如果您将父主题中的函数包含在这样的条件标记中,WordPress将检查您的子主题中是否存在已经运行过的具有相同名称的函数,如果这样,&#39 ;它不会从父主题运行该函数。

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

    <?php
    function my_function() {
        // Contents for your function override here.
    }
    ?>
    

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

    如果您不想触及parent functions.php ,那么您可以:

    1. 将子主题功能指定为更高优先级:

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

      remove_action( 'init', 'parent_function' );