在Wordpress中有条件地加载样式和脚本

时间:2017-03-10 15:08:41

标签: php wordpress

我正在寻找有条件地在特定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有基本的了解。谢谢!

3 个答案:

答案 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指定当前页面。