如何检查模板中是否存在短码?

时间:2020-12-19 作者:dev

在一个插件中,我声明了一个短代码,但我只想将脚本排队到那些有短代码的页面上。我试过这个:

global $post;
if ( is_a( $post, \'WP_Post\' ) && has_shortcode( $post->post_content, \'MyShortCode\') ) {
    wp_enqueue_style(\'style_ui\');
    wp_enqueue_script(\'script_ui\');
}
在我直接在模板中添加短代码之前,它工作得很好。

echo do_shortcode( \'[MyShortCode]\' );
我还将脚本放入shortcode函数中:

public function shortcodeui($atts) {
    wp_enqueue_style(\'style_ui\');
    wp_enqueue_script(\'script_ui\');
    require_once MYPL_PATH. \'templates/public/public.php\';
}
但它对模板不起作用。

1 个回复
SO网友:cjbj

假设插件启动时执行第一块代码,则has_shortcode 函数正在预扫描帖子内容,以检查是否存在短代码。然后将脚本排队。这将起作用,因为插件是在脚本排队之前启动的(init hook comes before wp_enqueue_scripts hook).

如果将脚本排入短代码内,则在组装post内容时将执行该函数。此时WP已经超过wp_enqueue_scripts 钩脚本将最终出现在页脚中,这可能会影响其行为。

如果您使用do_shortcode 直接在模板中使用has_shortcode 不会做任何事情,因为它只对帖子内容中的内容做出反应。你必须复制do_shortcode 将在插件初始化期间在模板中执行,以将脚本排队。

相关推荐

Shortcode not being executed

我将以下代码放在WP“init”回调中(或加载插件时)。add_shortcode(\'my_shortcode\', function($atts, $content =\'\') { die(); } ); if (!shortcode_exists(\'my_shortcode\')) die(); 在我的页面中,我放入“[my_shortcode]“”当我查看页面时,我得到“****”知道我的代码怎么了吗?更