正在使用wp_enQueue_脚本忽略子主题路径

时间:2019-03-11 作者:treyBake

我在下面创建了一个儿童主题wp-content/themes/my-theme 目前有5个文件:

|-my-theme
|----assets
|--------css
|------------bootstrap.min.css
|--------js
|------------bootstrap.min.js
|----functions.php
|----index.php
|----style.css
现在问题在我的functions.php 文件,我已尝试添加.css.js 文件如下:

<?php 
    # functions.php

    /**
     * add css | js files to WP
     */
    function theme_asset_setup()
    {
        # styles
        wp_enqueue_style(\'bootstrap\', get_template_directory_uri(). \'/assets/css/bootstrap.min.css\', []);

        # scripts
        wp_enqueue_script(\'bootstrap\', get_template_directory_uri(). \'/assets/js/bootstrap.min.js\', []);
    }

    /** actions **/
    add_action(\'wp_enqueue_scripts\', \'theme_asset_setup\');
这一半就可以了。这将添加我的.js.css 具有此路径的文件:

http://site.local/wp-content/themes/twentynineteen/assets/css/bootstrap.min.css?ver=5.1

我的父主题是twentynineteen 如我的style.css 文件:

/*
 Theme Name: My Theme
 Author: treybake
 Description: foobar
 Requires at Least: WordPress 4.9.6
 Version: 0.1
 License: GNU General Public License v2 or later
 Text Domain: my-theme
 Template: twentynineteen
 */
所以我猜这是我.css.js - 但我不知道如何进一步调试。

为什么我的css/js文件会忽略我的子主题路径?

谢谢

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

get_template_directory_uri() 显式用于获取父主题的URL,这就是脚本和样式在该路径排队的原因(在此上下文中,“模板”是父主题)。

获取子主题路径的等效函数为get_stylesheet_directory_uri(). 如果您没有子主题,那么这两个函数的作用是相同的,但当您使用子主题时,选择很重要。

然而,这两种功能都被更有用的功能所取代:get_theme_file_uri()get_parent_theme_file_uri().

get_theme_file_uri() 将获取主题中特定文件的URL。如果主题是子主题,它将在那里查找文件,但如果找不到,它将在父主题中查找。get_stylesheet_directory_uri() 不能这样做。

因此,对于您的用例,您应该使用get_theme_file_uri():

wp_enqueue_style(\'bootstrap\', get_theme_file_uri( \'assets/css/bootstrap.min.css\' ), [] );
wp_enqueue_script(\'bootstrap\', get_theme_file_uri( \'assets/js/bootstrap.min.js\' ), [] );
用法上的主要区别在于,不是将文件路径的其余部分连接到末尾,而是将其作为参数传递。这就是为什么它能够检查文件的父主题。

SO网友:rudtek

因为这是一个子主题,所以应该使用

 # styles
        wp_enqueue_style(\'bootstrap\', get_stylesheet_directory_uri(). \'/assets/css/bootstrap.min.css\', []);

        # scripts
        wp_enqueue_script(\'bootstrap\', get_stylesheet_directory_uri(). \'/assets/js/bootstrap.min.js\', []);
get_template_directory_uri()从父主题目录中提取

get_stylesheet_directory_uri()从子主题目录中提取

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c