仅获取当前主题的入队样式和脚本

时间:2017-08-04 作者:samjco

我试图只获取当前活动主题的加载样式和脚本。我使用preg\\u match来挑选主题的脚本文件名。如果找到匹配项,那么只需回显这些文件名的句柄,这样我就可以将它们出列/注销。

但preg\\u比赛不起作用。我正在尝试将当前主题url($currthemeurl)与脚本的文件名url($filenames)部分匹配。请注意我的评论。

function remove_theme_scripts() {

    global $wp_scripts;

    $currthemeurl = get_stylesheet_directory_uri(); 
    //Shows http://mydomain/wp-content/themes/mytheme

    foreach( $wp_scripts->queue as $handle ){

             $obj = $wp_scripts->registered [$handle];
             $handles = $obj->handle;  //something.js
             $filenames = $obj->src; //SHOWS http://mydomain/wp-content/themes/mytheme/js/something.js

            if (preg_match($currthemeurl, $filenames)):
             //MATCH FOUND

             echo $handles;
            else:
             echo "NOTHING Match";
            endif;
     }

}

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

的第一个参数preg_match 应该是一个模式,而不是一个字符串,所以它可能没有按照您期望的方式进行比较。使用strpos 而是:

function wpse_275760_theme_scripts() {
    global $wp_scripts;

    $stylesheet_uri = get_stylesheet_directory_uri();

    foreach( $wp_scripts->queue as $handle ) {
        $obj = $wp_scripts->registered[$handle];
        $obj_handle = $obj->handle;
        $obj_uri = $obj->src;

        if ( strpos( $obj_uri, $stylesheet_uri ) === 0 )  {
            echo $obj_handle;
        } else {
            echo \'NOTHING Match\';
        }
    }
}
strpos() 返回匹配的起始位置(如果有)。与比较===0 确保脚本URL和主题URL从一开始就匹配,这是您想要的,因为它们都以http://mydomain/wp-content/themes/mytheme.

结束