FilemTime():子主题内的统计失败警告

时间:2020-12-18 作者:Kris K

我正在努力研究我的孩子主题,但我无法摆脱filemtime(): stat failed 警告,在我激活我的孩子主题时立即出现。在阅读了其他问题后,我了解到filemtime警告通常是由于URL和路径的错误使用引起的。然而,我认为我正确地提供了URL和路径,如果是这样的话,那么我还缺少一些其他东西。

此函数来自父主题:

function mtt_styles()
{
    wp_enqueue_style(
    \'mtt-custom-style\', 
    get_stylesheet_directory_uri() . \'/dist/css/custom-style.css\', 
    false, 
    filemtime(get_stylesheet_directory() . \'/dist/css/custom-style.css\'), 
    \'all\'
    );
  
    wp_enqueue_style(\'mtt-main-style\', get_stylesheet_uri());    
}
add_action(\'wp_enqueue_scripts\', \'mtt_styles\');
这是我的孩子主题:

function child_styles()
{
    $theme = wp_get_theme();    
    wp_enqueue_style(
        \'mtt-custom-style\',
        get_template_directory_uri() . \'/dist/css/custom-style.css\',
        array(),
        filemtime(get_template_directory() . \'/dist/css/custom-style.css\'),
        \'all\'
    );
    wp_enqueue_style(
        \'mtt-main-style\',
        get_template_directory_uri() . \'/style.css\',
        array(),
        $theme->parent()->get(\'Version\'),
        \'all\'
    );
    wp_enqueue_style(
        \'child-main-style\', 
        get_stylesheet_uri(), 
        array(\'mtt-custom-style\', \'mtt-main-style\'));
}
add_action(\'wp_enqueue_scripts\', \'child_styles\');
当我转到页面源代码时,我看到排队工作正常。所有文件都在那里,父主题中的所有样式在子主题中都能正常工作,但警告仍然存在。

有人能帮我找出我在这里遗漏了什么或做错了什么吗?

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

问题出在您的父主题中。父主题正在使用get_stylesheet_directory() 此处:

filemtime(get_stylesheet_directory() . \'/dist/css/custom-style.css\'),
当父主题处于活动状态时,这很好,因为get_stylesheet_directory() 将该文件指向父主题。问题是,当您激活子主题时,它试图获取filemtime() 属于\'/dist/css/custom-style.css\' 在你的子主题中,我猜这个文件不存在。因此失败了。

问题是因为filemtime() 如果立即运行,则无论是重新定义脚本的URL,还是将其出列,都无关紧要,因为它已经尝试过,但无法检查时间,从而引发错误。

如果您是父主题的作者,那么解决问题就像替换get_stylesheet_directory() 具有get_template_directory_uri() (或者更好,get_parent_theme_file_path()). 这样,当加载缺少该文件的样式表时,就不会发生错误,并且不需要从该子主题重新使用它。

如果你不是原作者,那么正确的解决方法就是脱钩mtt_styles() 从…起wp_enqueue_scripts 完全然后从子主题使用正确的路径将它们重新排队。你已经在做后者了,所以你只需要做脱钩部分。这样做的诀窍是,您需要从after_setup_theme 钩子,否则将不会添加原始钩子,因为首先加载子主题:

add_action(
    \'after_setup_theme\',
    function()
    {
        remove_action( \'wp_enqueue_scripts\', \'mtt_styles\' );
    }
);

SO网友:Tom J Nowell

这里有两个主要问题:

问题1:get_template__....get_stylehsheet_... 不一样

filemtime(get_template_directory() . \'/dist/css/custom-style.css\'), 表示获取父主题的文件修改时间dist/css/custom-style.css 文件

我怀疑,父主题中没有这样的文件,因为它只存在于子主题中,所以PHP发出警告,要求提供不存在的文件的文件修改时间。

get_template_directoryget_stylesheet_directory 不要做同样的事情。

  • get_template_directory 是父主题(如果未使用子主题,则为当前主题get_stylesheet_directory 当前主题(又名子主题)是否与从get_template_...get_stylesheet_...

    问题2:误解functions.php 在子主题和父主题中,以及子主题的工作方式

    如果使用子主题,则父主题functions.php 仍在运行。子主题不允许通过在子主题中放置同名的新文件来覆盖任何文件。仅适用于通过加载的模板get_template_part.

    A PHP file in a child theme, or a JS/CSS file in a child theme does not override the same file in the parent theme.

    因此,如果将CSS文件排入父主题中,则复制functions.php 并对其进行更改,它并没有覆盖父主题。而是:

    两者functions.php 文件运行所有重复的代码现在运行两次原始JS和您试图用其覆盖的新JS文件都已排队

相关推荐

Child-theme breaks site

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