将特定短码的脚本入队

时间:2018-10-20 作者:Nick

我已经创建了一些短代码,对于其中的一些,我需要根据需要加载特定的脚本。

默认情况下,我已将其包含在函数中。php文件

vendor.js
myscript.js
加载短代码时,我需要在上面两个脚本之间包含一个单独的脚本(这意味着myscript.js需要先包含新脚本才能工作)。

我创建了如下短代码:

function callbackService()
{
    ob_start();    
    get_template_part(\'hg_custom_shortcodes/callback\');
    return ob_get_clean();   
}
add_shortcode(\'callbackService\', \'callbackService\');
模板正在加载角度应用程序。

然后,我尝试通过将上面的代码片段更改为以下内容来加载我的脚本(只有在加载短代码时才需要包含的脚本):

function callbackService()
{
    ob_start();    
    wp_enqueue_script(\'angular-bundle\', get_template_directory_uri() . \'/scripts/angular-bundle.js\', array(), false, true);
    get_template_part(\'hg_custom_shortcodes/callback\');
    return ob_get_clean();   
}
add_shortcode(\'callbackService\', \'callbackServhowever
剧本已经包括在内了,霍维尔,我想在myscript.js 而且整个短代码(angular app)并没有像“angular is not defined”那样工作。

我如何告诉队列在之后加载脚本?我知道通常我会改变add_action() 优先权,但在这种情况下add_action 参与其中,我不知道还能尝试什么。

有什么建议吗?谢谢

3 个回复
最合适的回答,由SO网友:Remzi Cavdar 整理而成

wp_enqueue_script 不会在短代码中工作,这是因为加载顺序。

你可以使用wp_register_script 然后你就可以wp_enqueue_script 在您的短代码函数中,如以下示例所示:

// Front-end
function front_end_scripts() {
    wp_register_script( \'example-js\', \'//example.com/shared-web/js/example.js\', array(), null, true );
}
add_action( \'wp_enqueue_scripts\', \'front_end_scripts\' );
然后在短代码中使用:

function example_shortcode() {

   wp_enqueue_script( \'example-js\' );
   return; // dont forget to return something

}
add_shortcode( \'example-shortcode\', \'example_shortcode\' );
此外,您可以使用has_shortcode 要检查是否加载了短代码,请执行以下操作:

function custom_shortcode_scripts() {
global $post;
if( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, \'custom-shortcode\') ) {
    wp_enqueue_script( \'custom-script\');
}
}
add_action( \'wp_enqueue_scripts\', \'custom_shortcode_scripts\');

SO网友:Antti Koskinen

has_shortcode 帮助您解决问题?

在抄本上有一个例子,

当某些帖子使用某些短代码时,将某些脚本排队

function custom_shortcode_scripts() {
    global $post;
    if( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, \'custom-shortcode\') ) {
        wp_enqueue_script( \'custom-script\');
    }
}
add_action( \'wp_enqueue_scripts\', \'custom_shortcode_scripts\');

SO网友:Christian Žagarskas

我们确实可以通过快捷码有条件地加载CSS和JS文件,而无需使用任何过于复杂的函数:

首先,假设我们之前注册了所有CSS/JS文件(可能是在wp_enqueue_scripts 已运行)

function prep_css_and_js() {
     wp_register_style(\'my-css\', $_css_url);
     wp_register_script(\'my-js\', $_js_url);
}
add_action( \'wp_enqueue_scripts\', \'prep_css_and_js\', 5 );
接下来,让我们检查一下我们的shortcode函数:

function my_shortcode_func( $atts, $content = null ) {
  if( ! wp_style_is( "my-css", $list = \'enqueued\' ) ) { wp_enqueue_style(\'my-css\'); }
  if( ! wp_script_is( "my-js", $list = \'enqueued\' ) ) { wp_enqueue_script(\'my-js\'); }
  ...
}
简单。完成。Ergo: we can "conditionally load" css/js files, (only when [shortcode] runs).

让我们考虑以下意识形态:

我们希望加载某些CSS/JS文件(但仅当触发了快捷码时)

  • 可能我们不希望在每个页面上加载这些文件,或者根本不希望在页面/帖子上使用快捷码。(轻量级)
  • 我们可以通过确保WP在调用短代码和排队之前注册所有css/js文件来实现这一点prep_css_and_js() 函数I全部加载。css/。某些文件夹中的js文件my_shortcode_func()

    优点:(无需MySQL,无需高级功能和过滤器)

    这是“WP orthodix”,优雅、快速加载、简单易用,允许编译器/缩微器检测此类脚本使用WP函数(WP\\u register\\u样式/WP\\u register\\u脚本)

  • 与出于各种原因可能需要注销这些脚本的更多主题/插件兼容
  • 不会多次触发
  • 只涉及很少的处理或代码
  • 结束

    相关推荐

    Shortcode with foreach

    我不能对foreach使用shortcode。它给了我语法错误。我错在哪里?function create_galeri_shortcode($atts) { $atts = shortcode_atts( array( ), $atts, \'galeri\' ); if ( has_post_format( \'gallery\' )) { $images = get_post_