从主题函数动态加载样式和脚本.php

时间:2014-07-27 作者:Adam

我正在尝试根据模板名称动态加载样式表和脚本。所以如果我有一个名为page-signup.php 然后它将加载相应的样式表page-signup.csspage-signup.js 如果它们存在于我的主题文件夹中的特定目录中的该页面。

这是我到目前为止在函数方面的内容。我的主题的php。当css和js文件位于适当的目录中时,它当前不会加载任何样式或脚本:

/**
 * Auto loads scripts and styles based on the page name if they exist.
 */
function mytheme_bootstrap_page_resources() {
    if( is_page_template() ) {
        $page_template = basename( get_page_template(), \'.php\' );
        $css_file_path = get_template_directory() . "/css/pages/$page_template.css";
        $js_file_path = get_template_directory() . "/js/pages/$page_template.js";
        $css_file_uri = get_template_directory_uri() . "/css/pages/$page_template.css";
        $js_file_uri = get_template_directory_uri() . "/js/pages/$page_template.js";

        if(file_exists($css_file_path)){
            wp_enqueue_style($page_template, $css_file_uri);
        }

        if(file_exists($js_file_path)){
            wp_enqueue_script($page_template, $js_file_uri);
        }
    }
}
add_action(\'wp_enqueue_scripts\', \'mytheme_bootstrap_page_resources\');

1 个回复
最合适的回答,由SO网友:Jared Cobb 整理而成

这里有几个问题。。。

首先init WordPress现在还不知道要使用哪个页面模板。(因此is_page_template() 函数将始终返回false)。

继续并将您的函数挂接到wp_enqueue_scripts (您可能已经在为您的全局CSS/JavaScript做这些了)然后检查页面模板,并在该函数中运行逻辑。

第二get_template_directory_uri() 将返回文件的web URL和PHP的file_exists 需要磁盘上的目录路径(不是URL)。使用get_template_directory() 函数获取该路径,并使用get_template_directory_uri().

下面是一个工作示例,包括适当的挂钩wp_enqueue_scripts 但您需要移动的内容load_resources() 在你的主题中加入你自己的功能。

function load_resources() {
    if( is_page_template() ) {
        $page_template = basename( get_page_template(), \'.php\' );
        $css_file_path = get_template_directory() . \'/css/pages/\' . $page_template . \'.css\';
        $js_file_path = get_template_directory() . \'/js/pages/\' . $page_template . \'.js\';
        $css_file_uri = get_template_directory_uri() . \'/css/pages/\' . $page_template . \'.css\';
        $js_file_uri = get_template_directory_uri() . \'/js/pages/\' . $page_template . \'.js\';

        if(file_exists($css_file_path)){
            wp_enqueue_style($page_template, $css_file_uri);
        }

        if(file_exists($js_file_path)){
            wp_enqueue_script($page_template, $js_file_uri);
        }
    }
}
add_action( \'wp_enqueue_scripts\', \'load_resources\' );

结束

相关推荐

Pages for Cron use Only?

因此,我有一组自定义页面模板,这些模板是由cron运行的脚本,用于更新wordpress站点上的各种内容,而不是供常规站点用户查看。注意:我使用的是“常规”cron作业,而不是“wp cron”作业。Q: 有没有办法阻止普通joe访问这些页面,但允许cron仍然能够执行页面中包含的脚本?谢谢--更新#1--What do the crons job pages do?由cron触发的页面上的脚本使用短代码触发一个插件,该插件对各种页面进行爬网(要爬网的URL列表位于一个数组中,该数组被馈送到触发短代码的f