使用GET_SHORTROAD_REGEX将脚本入队

时间:2019-11-01 作者:LovinQuaQua

我尝试进行一些优化,我只想在global$post中找到一些短代码时加载它们

不幸的是,它不起作用,当我打开一个包含短代码的页面时,脚本没有加载。

    function enqueue_script_if_shortcode_is_detected() {
        global $post;

        wp_register_script( \'leweb-widgets\', get_stylesheet_directory_uri() . \'/includes/leweb-widgets.php\', \'1.0\', true );

        $pattern = get_shortcode_regex();

        if (   preg_match_all( \'/\'. $pattern .\'/s\', $post->post_content, $matches )
            && array_key_exists( 2, $matches )
            && in_array( \'leweb_suggested_events\', $matches[2] )
        ) {
            wp_enqueue_script(\'leweb-widgets\');
        }
    }
    add_action( \'wp_enqueue_scripts\', \'enqueue_script_if_shortcode_is_detected\' );

1 个回复
SO网友:Jacob Peattie

已经有一个函数可以检查帖子是否有短代码:has_shortcode():

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( \'leweb-widgets\', get_stylesheet_directory_uri() . \'/includes/leweb-widgets.php\', \'1.0\', true );

    if ( has_shortcode( $post->post_content, \'leweb_suggested_events\' ) ) {
        wp_enqueue_script(\'leweb-widgets\');
    }
}
add_action( \'wp_enqueue_scripts\', \'enqueue_script_if_shortcode_is_detected\' );
请记住,以这种方式检查帖子:

将不知道是否在小部件或自定义字段中使用了短代码

  • 无法在存档页上正常工作
  • 正在使用全局$post 变量,应尽可能避免使用。尤其是在圈外is_singular() 和使用get_queried_object() 获取当前帖子。

    function enqueue_script_if_shortcode_is_detected() {
        wp_register_script( \'leweb-widgets\', get_stylesheet_directory_uri() . \'/includes/leweb-widgets.php\', \'1.0\', true );
    
        if ( is_singular() ) {
            $post = get_queried_object();
    
            if ( has_shortcode( $post->post_content, \'leweb_suggested_events\' ) ) {
                wp_enqueue_script(\'leweb-widgets\');
            }
        }
    }
    add_action( \'wp_enqueue_scripts\', \'enqueue_script_if_shortcode_is_detected\' );
    
    但是如果您的脚本加载到页脚中(您的是页脚),如果您添加wp_enqueue_script(\'leweb-widgets\'); 到快捷码回调。通过这种方式,您可以确保无论在何处使用短代码,都会加载脚本。

    相关推荐

    Shortcode to pull posts

    我需要一些帮助。我创建了一个短代码来引入帖子,然后使用ajax加载更多帖子。我的一切都正常,但它复制了第一组帖子。下面是我的代码。这是shortcode函数:add_shortcode( \'articles-grid\', \'articles_grid\' ); function articles_grid( $atts ) { $showdate = $showauthor = $post_meta = $post_author = $post_seperator