我是否可以像这样将脚本排入队列以控制它们在哪些页面上?

时间:2014-02-20 作者:4th_dimention

我正在开发我的第一个WordPress插件。该插件基本上创建了一些短代码来实现一些效果。为了只在需要的页面上包含所有css和js文件,我将我的wp\\u enqueue\\u*函数调用设置为在激活短代码时调用。这可能不是一个非常清晰的描述,因此以下是与我所说内容相关的代码片段:

add_shortcode( \'slider_space\', \'f_slider_space\');

function link_page_files(){
        wp_enqueue_style( \'cccslider-style\', plugins_url("...") );
        wp_enqueue_script( \'jquery\' );
        wp_enqueue_script( \'jquery.easing\', plugins_url("..."), array(\'jquery\') );
        wp_enqueue_script( \'scrollcontrol\', plugins_url("...") );
        wp_enqueue_script( \'cccslider\', plugins_url("..."), array(\'jquery.easing\', \'scrollcontrol\') );
    }

function f_slider_space($atts, $content = null){
link_page_files();
// ..........
}
这似乎奏效了,但我想知道这是否是最佳做法。控制文件包含在哪些页面中的最佳解决方案是什么?

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

这将把样式表链接打印到页脚中。适用于大多数浏览器,但HTML无效。你应该参与行动wp_head 相反,请检查帖子内容中的短代码。使用优先级0 在操作之前运行wp_enqueue_scripts.

add_action( \'wp_head\', \'shortcode_check\', 0 );

function shortcode_check() {
    global $wp_query;

    if ( empty ( $wp_query ) or empty ( $wp_query->posts ) )
        return;

    foreach ( $wp_query->posts as $post )
    {
        if ( FALSE !== stripos( $post->post_content, \'[shortcodename\' ) )
            return add_action( \'wp_enqueue_scripts\', \'shortcode_enqueue\' );
    }
}

function shortcode_enqueue() {
    // enqueue scripts and stylesheets here
}

结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/