Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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 );
share|improve this question
    
tumbleweeds No one? :) –  Nate M. Apr 3 '14 at 2:52

2 Answers 2

I am using this code, i Hope it helps you.

function defer_parsing_of_js ( $url ) {
    if ( FALSE === strpos( $url, '.js' ) ) return $url;
    if ( strpos( $url, 'jquery.min.js' ) ) return $url;
    return "$url' defer='defer";
  }
add_filter( 'clean_url', 'defer_parsing_of_js', 11, 1 );
share|improve this answer

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!

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.