仅当加载模板部件时才将脚本样式入队

时间:2021-09-21 作者:Alexandro Giles

我已经注册了一些样式和脚本,如果将模板部件加载到模板文件中,则应该加载这些样式和脚本。对于ex:

在家里。php

<?php get_template_part( \'template-parts/external_links\'); ?>
(此模板部分跨不同的模板文件加载)因此,我想排队(functions.php中以前注册的文件)

使用模板文件例如,我使用:

if(is_page_template(\'admin.php\')){
        wp_enqueue_script( \'unicorn-admin\');
    }
get\\u template\\u part(“模板部件/外部\\u链接”)时,是否有方法将文件排队;是否已使用?

3 个回复
SO网友:Laloptk

您可以使用get_template_part_{$slug} 钩子,在加载模板零件之前激发。您可以找到参考here, 我发现这比官方参考资料更有用。

因此,我在twentytwentyone主题中测试了它(是的,我直接修改了主题,但只是为了测试)。我用template-parts/content/content-single.php 我创建了一个test.js 文件,其中包含警报assets/js/ 主题的文件夹。然后,我在functions.php.

function test_template_part_hook($slug, $name, $args) {
    wp_enqueue_script(\'test\', get_template_directory_uri() . \'/assets/js/test.js\', array(\'jquery\'));
}

add_action( \'get_template_part_template-parts/content/content-single\', \'test_template_part_hook\', 10, 3 );
当然,每个帖子中都会触发警报,您应该使用自己的文件路径修改上述代码,并完成wp_enqueue_script函数的其他参数。

所以,基本上您需要做的就是上面描述的,使用get_template_part_slug 作为操作名称,其中slug 是您想要使用的模板零件文件的路径,在您的情况下,用于我在您的问题中读到的内容,slug = \'template-parts/external_links\', 所以整个钩子的名字应该是get_template_part_template-parts/external_links.

SO网友:cameronjonesweb

Just call wp_enqueue_script/wp_enqueue_style in the template part file itself.

SO网友:Pixelsmith

与此非常相似的一个问题是answered here. 本质上,解决方案是编写一个函数,在站点初始排队函数之外有条件地加载脚本。

首先,使用必要的条件创建函数以加载所需的脚本或样式,例如:

// Conditional script loading
function conscripts($type) {
  if($type===\'blue\'):
    // Register blue stylesheet
    wp_enqueue_style( \'blue\', get_template_directory_uri() . \'/assets/styles/blue.css\', array(), filemtime(get_template_directory() . \'/assets/styles/scss\'), \'all\' );
  elseif($type===\'red\'):
    // Register red stylesheet
    wp_enqueue_style( \'red\', get_template_directory_uri() . \'/assets/styles/red.css\', array(), filemtime(get_template_directory() . \'/assets/styles/scss\'), \'all\' );
  endif;
}
接下来,在使用所使用的模板部件时,使用函数加载正确的脚本/样式。类似于:

if( get_field(\'color\') == \'red\') {

        get_template_part( \'red\' ); 
        conscripts(\'red\');

} elseif (get_field(\'color\') == \'blue\') {

        get_template_part(\'blue\' ); 
        conscripts(\'blue\');
}
如果没有看到您的实际代码,我无法给出更详细的答案,虽然这种方法不是自动的,但如果您不确定在何处加载了哪些模板,那么它是脚本/样式绑定的一个整洁的解决方案。

相关推荐

static array on functions.php

在函数中。php中,我想访问数据库一次,以获取一个ACF对象,然后在本地“保存”它,以防止对数据库的进一步请求。我想首先在“init”钩子中调用以下函数。然后,假设,当我在以后的挂钩上调用它时,由于使用了“static”关键字,$current\\u store var已经设置好了,函数将在第一个“if”返回已经保存的静态var时停止。它不起作用-当访问稍后挂钩上的函数时,“isset($current\\u store)”返回false。我做错了什么?function get_current_store