在 wordpress 中正确创建 child 主题的困惑

Confusion of creating a child theme properly in wordpress

正在尝试从 wordpress twentyfifteen 主题创建 child 主题。 WordPress 法典说

Note that the previous method was to import the parent theme stylesheet using @import: this is no longer best practice. The correct method of enqueuing the parent theme stylesheet is to use wp_enqueue_script() in your child theme's functions.php.

twentyfifteen的样式和javascript文件的加载函数是

function twentyfifteen_scripts() {
    // Add custom fonts, used in the main stylesheet.
    wp_enqueue_style( 'twentyfifteen-fonts', twentyfifteen_fonts_url(), array(), null );

    // Add Genericons, used in the main stylesheet.
    wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.2' );

    // Load our main stylesheet.
    wp_enqueue_style( 'twentyfifteen-style', get_stylesheet_uri() );

    // Load the Internet Explorer specific stylesheet.
    wp_enqueue_style( 'twentyfifteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfifteen-style' ), '20141010' );
    wp_style_add_data( 'twentyfifteen-ie', 'conditional', 'lt IE 9' );

    // Load the Internet Explorer 7 specific stylesheet.
    wp_enqueue_style( 'twentyfifteen-ie7', get_template_directory_uri() . '/css/ie7.css', array( 'twentyfifteen-style' ), '20141010' );
    wp_style_add_data( 'twentyfifteen-ie7', 'conditional', 'lt IE 8' );

    wp_enqueue_script( 'twentyfifteen-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20141010', true );

    if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
        wp_enqueue_script( 'comment-reply' );
    }

    if ( is_singular() && wp_attachment_is_image() ) {
        wp_enqueue_script( 'twentyfifteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20141010' );
    }

    wp_enqueue_script( 'twentyfifteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20141212', true );
    wp_localize_script( 'twentyfifteen-script', 'screenReaderText', array(
        'expand'   => '<span class="screen-reader-text">' . __( 'expand child menu', 'twentyfifteen' ) . '</span>',
        'collapse' => '<span class="screen-reader-text">' . __( 'collapse child menu', 'twentyfifteen' ) . '</span>',
    ) );
}
add_action( 'wp_enqueue_scripts', 'twentyfifteen_scripts' );

所以从 parent 的 functions.php 复制它并将其粘贴到 child 的 functions.php 之后我做了什么: 1.Changed 函数名称。 2.Replaced 行

wp_enqueue_style( 'twentyfifteen-style', get_stylesheet_uri() );

wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );

3.Removed javascript 个文件的代码。

我是否也删除了不是 parent 主题的主要样式 sheet 的其他样式 sheet? 如何正确包含 child 主题中的另一种样式 sheet? (我只使用 wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css' ); 吗?)

制作子主题不需要太多,你问题中的大部分代码都不需要:

  1. 在您的 'themes' 目录中创建一个文件夹,并根据您的喜好命名。 twentyfifteenchild 会说清楚的
  2. 创建一个名为 style.css 的文件并将以下内容放在顶部:

    /*
     Theme Name:   Twenty Fifteen Child
     Theme URI:    http://example.com/twenty-fifteen-child/
     Description:  Twenty Fifteen Child Theme
     Author:       John Doe
     Author URI:   http://example.com
     Template:     twentyfifteen
     Version:      1.0.0
     License:      GNU General Public License v2 or later
     License URI:  http://www.gnu.org/licenses/gpl-2.0.html
     Tags:         light, dark, two-columns, right-sidebar, responsive-layout,             accessibility-ready
     Text Domain:  twenty-fifteen-child
    */
    
  3. 创建一个 functions.php 文件并将以下内容粘贴到其中:

    <?php
    add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
    function theme_enqueue_styles() {
        wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    
    }
    

奇怪,我可以回答但还不能发表评论...我也想知道为什么人们在 CSS 中使用 @import,而 WordPress 特别说明是这样的:

以下示例函数仅在您的父主题仅使用一个主 style.css 来容纳所有 css 时才有效。如果您的主题有多个 .css 文件(例如 ie.css、style.css、main.css),那么您必须确保维护所有父主题依赖项.

add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );

}

将 'parent-style' 设置为依赖项将确保子主题样式表在它之后加载。请参阅此处更详细的讨论:

add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array('parent-style')
    );
}

我现在实际上了解到我并不总是做依赖关系的事情...noob/designer 失败或错误的文档失败...?!?