我正在努力研究我的孩子主题,但我无法摆脱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\');
当我转到页面源代码时,我看到排队工作正常。所有文件都在那里,父主题中的所有样式在子主题中都能正常工作,但警告仍然存在。
有人能帮我找出我在这里遗漏了什么或做错了什么吗?
最合适的回答,由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\' );
}
);