I read How to add defer=”defer” tag in plugin javascripts? and the code @toscho posted works good to defer certain js files or deferring ALL js files by commenting out the contact-form-7 line, but I need to defer all js except 1 or 2 files. I for sure need to exclude jquery.min because it causes the Revolution Slider plugin to stop working when it’s deferred.

So how would I write a conditional in the following code to exclude certain js files? For example if I wanted to exclude jquery.min and jquery.ui.core.min

function add_defer_to_cf7( $url )
    {
        if ( // comment the following line out add 'defer' to all scripts
        FALSE === strpos( $url, 'contact-form-7' ) or
        FALSE === strpos( $url, '.js' )
        )
        { // not our file
            return $url;
        }
        // Must be a ', not "!
        return "$url' defer="defer";
    }
    add_filter( "clean_url', 'add_defer_to_cf7', 11, 1 );

2 Answers
2

I supposed that you are trying to set defer for every JS exclude jquery.min and jquery.ui.core.min.

Based on that I have made some changes into your code and this will set defer for all JS exclude given example files jquery.min and jquery.ui.core.min.

function add_defer_to_cf7( $url )
{
    //If  not js file OR js file with 'jquery.ui.core.min' OR 'jquery.min' name string, then no need to apply defer
    if(FALSE === strpos( $url, '.js') || ((strpos( $url, 'jquery.ui.core.min') > 0) || (strpos($url, 'jquery.min') > 0))){ 
        return $url;
    }
    else{
        //set defer for .js files
        return "$url' defer="defer";        
    }
}
add_filter( "clean_url', 'add_defer_to_cf7', 11, 1 );

Above code set defer=”defer” for all JS excluding ‘jquery.ui.core.min’ and ‘jquery.min’ and this is what you want. Good luck!

Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *