为什么我无法在插件中加载Head中的脚本?

时间:2017-06-21 作者:Pravin Work

我已经注册了应该加载到head部分的脚本。但出于某种原因,我没有把这些链接加载到head中。这些脚本不是在页眉中加载,而是在页脚中加载。

 add_action(\'init\', \'my_enqueued_assets\');

    function my_enqueued_assets() { 
        //Register Css
        wp_register_style(\'my-css\', MY_PLUGIN_URL.\'css/my_styles.css\'); 
        wp_register_style(\'my-admin-css\', MY_PLUGIN_URL.\'css/my_admin_styles.css\'); 
        //Register JS 
        wp_register_script(\'my-jquery-min\', MY_PLUGIN_URL.\'js/jquery-3.2.1.min.js\');
        wp_register_script(\'my-script-min\', MY_PLUGIN_URL.\'js/my_isotope.min.js\');
        wp_register_script(\'my-script\', MY_PLUGIN_URL.\'js/my_isotope.js\', array(\'jquery\'), my_PLUGIN_VERSION, false );
        wp_register_script(\'my-lightbox-script\', MY_PLUGIN_URL.\'js/my-lightbox.js\', array(\'jquery\'), my_PLUGIN_VERSION, false );
        wp_register_script(\'my-prefix-script\',MY_PLUGIN_URL.\'/js/myscript.js\', array(\'jquery\'), \'0.1\',false );
    }
我将这些脚本加载到shortcode中,以便在只使用或调用shortcode时加载脚本和样式。

function my_shortcodes_init()
{
    function my_shortcode($atts = [], $content = null)
    {
        //default portfolio value
        $id = 1;
        wp_enqueue_style(\'my-css\'); 
        wp_enqueue_script(\'my-jquery-min\');
        wp_enqueue_script(\'my-script-min\'); 
        wp_enqueue_script(\'my-script\');
        wp_enqueue_script(\'my-lightbox-script\');

        if (isset($atts["id"])) {
            $id = $atts["id"];
        }       
        require MY_PLUGIN_DIR.\'views/isotope.php\';
    }
    add_shortcode(\'MY_GALLERY\', \'my_shortcode\');
}
add_action(\'init\', \'my_shortcodes_init\');

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

这是因为WordPress页面的执行顺序。在您的代码中是这样的:

位于init, 在页面生成过程的早期,您正在注册脚本。也就是说,您正在告诉WP您以后要使用这些。未生成html

  • 位于init 您还注册了一个短代码。这意味着您正在定义一个函数,一旦遇到短代码,该函数将被触发。未生成htmlmy_shortcode 您已定义。它在该函数中找到wp_enqueue_script. 此时,头部的html已经生成。因此,它别无选择,只能将带有脚本的html放在页面的页脚中
  • 如果你想把脚本放在头上,你必须确保wp_enqueue_scripts 触发时间init. 当然,这意味着当内容中没有快捷码时,它们也将排队。

    SO网友:joetek

    中的最后一个参数wp-enqueue-script function 是一个布尔值,指定脚本是否应显示在页脚中。

    wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
    
    示例中的前两个脚本没有指定可选参数,因此默认为true, 将脚本放在页脚中。

    结束

    相关推荐

    Use WP_Query in shortcode

    我正在尝试从前四篇文章中获取元信息,这些文章的元键等于Sedan,然后对这些文章的元进行格式化,以便设置图库类型的显示框。我相信这与我的方法有关,因为我仍处于学习曲线的陡峭部分。如有任何意见、建议或回答,将不胜感激。使用此代码,我试图生成的HTML不会显示在前端。好像我什么都没做似的。add_shortcode(\'sedan-tabs\',\'build_sedan_tabs\'); function build_sedan_tabs(){ $args1 = array(