1

Is it possible to override Javascript in a plugin with a child theme?

Specifically I'm trying to override a portion of a WooCommerce product page - I would like to get rid of the tabbed content areas, and instead have all of the content visible with the "tabs" then being anchor links down the page.

I've figured out how to do that on a local install by deleting a portion of Javascript within the WooCommerce plugin files - but that's obviously not a workable solution longterm.

I would like to essentially dequeue the Javascript in the plugin, and enqueue my own file with the unneeded portion removed.

This is the bit of code I need to be rid of, if there's another way to go about overriding it?

.on( 'click', '.wc-tabs li a, ul.tabs li a', function( e ) {
            e.preventDefault();
            var $tab          = $( this );
            var $tabs_wrapper = $tab.closest( '.wc-tabs-wrapper, .woocommerce-tabs' );
            var $tabs         = $tabs_wrapper.find( '.wc-tabs, ul.tabs' );

            $tabs.find( 'li' ).removeClass( 'active' );
            $tabs_wrapper.find( '.wc-tab, .panel:not(.panel .panel)' ).hide();

            $tab.closest( 'li' ).addClass( 'active' );
            $tabs_wrapper.find( $tab.attr( 'href' ) ).show();
        })
1
  • have you tried to change the CSS classes of the tabs in order that this javaScript code doesn't find them ? Commented Sep 1, 2016 at 13:42

2 Answers 2

1

You can disable this portion of JavaScript code with this code :

$( 'body' ).off( 'click', '.wc-tabs li a, ul.tabs li a');

.off( detach the listeners : http://api.jquery.com/off/

7
  • Do I just make an enqueue a JS file with that code? Commented Sep 1, 2016 at 13:49
  • yes and make your script dependant of wc-single-product to be sure to have it called after the code of Woocommerce Commented Sep 1, 2016 at 13:54
  • I'm sorry - I'm not sure I know/understand what that means! Commented Sep 1, 2016 at 14:04
  • look in the codex : developer.wordpress.org/reference/functions/wp_enqueue_script Commented Sep 1, 2016 at 14:38
  • wp_enqueue_script( 'override-wc-tabs', 'path/to/my.js', array('wc-single-product'), '1.0', true ) Commented Sep 1, 2016 at 14:38
0

Rather than hide them with javascript (you could also do that with CSS for that matter), the better solution would be to not generate the tabs to begin with. This is from the WooCommerce docs.

add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );

function woo_remove_product_tabs( $tabs ) {

    unset( $tabs['description'] );  // Remove the description tab
    unset( $tabs['reviews'] );  // Remove the reviews tab
    unset( $tabs['additional_information'] );  // Remove the additional information tab

    return $tabs;
}

From there you can edit the template file to display the content however you want to view it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.