我已经创建了一些短代码,对于其中的一些,我需要根据需要加载特定的脚本。
默认情况下,我已将其包含在函数中。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
参与其中,我不知道还能尝试什么。
有什么建议吗?谢谢
最合适的回答,由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网友: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文件现在WP将它们视为注册脚本,我们确实可以根据各种情况有条件地调用它们,包括但不限于my_shortcode_func()
优点:(无需MySQL,无需高级功能和过滤器)
这是“WP orthodix”,优雅、快速加载、简单易用,允许编译器/缩微器检测此类脚本使用WP函数(WP\\u register\\u样式/WP\\u register\\u脚本)
与出于各种原因可能需要注销这些脚本的更多主题/插件兼容不会多次触发只涉及很少的处理或代码