我正在寻找有条件地在特定Wordpress页面上加载脚本和样式的解决方案。我一直在寻找解决方案,但已经走到了尽头。我无法在functions.php文件中使用php选择器(如is_page())来执行此操作。以下是我过去尝试的一个例子:
function blog_style() {
if ( is_page('blog') ) {
wp_enqueue_style( 'blog' );
}
}
add_action( 'wp_print_styles', 'blog_style' );
我有一种感觉,这是因为在识别页面之前加载了functions.php文件。任何建议都有帮助。我对php和Wordpress codex有基本的了解。谢谢!
答案 0 :(得分:3)
我理解你在这件事上的困惑,并且必须承认WordPress有时会有奇怪的方法处理事情。
首先;你应该在wp_enqueue_scripts
钩子中列出脚本和样式:
add_action('wp_enqueue_scripts', 'themeslug_styles');
function themeslug_styles() {
wp_enqueue_style(...);
}
或者以简写/匿名函数格式,如果您愿意:
add_action('wp_enqueue_scripts', function () {
wp_enqueue_style(...);
});
if语句中is_page('blog')
的基本概念是正确的。但也请查看此detailed info about conditional tags - 也许有更好的方法来定位您网站的博客页面(请参阅链接资源上的“博客页面”)。
你必须在你的函数中使用if语句,因为它只在运行函数的wp_enqueue_scripts
点,WordPress有关于实际内容的信息。
add_action('wp_enqueue_scripts', function () {
if (is_home()) {
wp_enqueue_style('themeslug-stylename', URL-to-your-style);
wp_enqueue_script('themeslug-scriptname', URL-to-your-script);
}
});
添加:您是对的,functions.php
文件主要用于设置所有内容并将功能作为操作连接到WordPress挂钩。因此,代码在WordPress执行流程中很早就执行,以便您可以访问尽可能多的钩子。正如您所经历的那样,缺点是此时很多东西都无法直接访问。
答案 1 :(得分:0)
我认为你在这里使用了错误的钩子。尝试
add_action( 'wp_enqueue_scripts', 'blog_style' );
答案 2 :(得分:-1)
您可以查看this功能。我曾使用此函数在不同的帖子类型和页面上动态加载脚本。我使用screen_id
指定当前页面。