Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hirejordansmith/71142d7e7e6b568bada1805d81115bf3 to your computer and use it in GitHub Desktop.
Save hirejordansmith/71142d7e7e6b568bada1805d81115bf3 to your computer and use it in GitHub Desktop.
Replace WooCommerce Product Tabs with Angular JS Tabs
<?php
// Removes WooCommerce Product Tabs
add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );
function woo_remove_product_tabs( $tabs ) {
unset( $tabs['description'] );
unset( $tabs['additional_information'] );
unset( $tabs['reviews'] );
return $tabs;
}
// Enqueue our styles and scripts
add_action('wp_enqueue_scripts', 'hjs_enqueue_custom_scripts_styles', 999);
function hjs_enqueue_custom_scripts_styles() {
if (is_product()) {
wp_enqueue_script('angularjs', '//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js');
wp_enqueue_script('angularjs-animate', '//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-animate.min.js');
wp_enqueue_script('angularjs-route', '//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-route.min.js');
wp_enqueue_script('angularjs-aria', '//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-aria.min.js');
wp_enqueue_script('angularjs-messages', '//ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular-messages.min.js');
wp_enqueue_script('angularjs-assets', '//s3-us-west-2.amazonaws.com/s.cdpn.io/t-114/svg-assets-cache.js');
wp_enqueue_script('angularjs-material', '//cdn.gitcdn.link/cdn/angular/bower-material/v1.1.1/angular-material.js');
}
if (is_product()) {
wp_enqueue_style('angular-material-css');
wp_enqueue_style('angular-material-docs-css');
}
}
// Add JS to power the new Product Tabs
add_filter('wp_footer', function() { ?>
<script>
angular.module('TechTabs', [
'ngMaterial',
'ngMessages',
'material.svgAssetsCache'
]).controller('AppCtrl', AppCtrl);
function AppCtrl($scope, $log) {
if ('' !== document.location.hash &&
(document.location.hash.toLowerCase().indexOf('comment') > -1 ||
document.location.hash.toLowerCase().indexOf('reviews') > -1)) {
$scope.data = {
selectedIndex: 2
};
}
$scope.showReviews = function () {
$scope.data = {
selectedIndex: 2
};
};
}
angular.module('FeaturesTabs', [
'ngMaterial',
'ngMessages',
'material.svgAssetsCache'
]);
</script>
<?php
}, 99);
?>
<!-- Default Angular JS Data Tabs Markup -->
<div ng-cloak="" class="tabsdemoDynamicHeight" ng-app="MyApp">
<md-content>
<md-tabs md-dynamic-height="" md-border-bottom="">
<md-tab label="one">
<md-content class="md-padding">
<h1 class="md-display-2">Tab One</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue. Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec, feugiat ultricies mi.</p>
</md-content>
</md-tab>
<md-tab label="two">
<md-content class="md-padding">
<h1 class="md-display-2">Tab Two</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla venenatis ante augue. Phasellus volutpat neque ac dui mattis vulputate. Etiam consequat aliquam cursus. In sodales pretium ultrices. Maecenas lectus est, sollicitudin consectetur felis nec, feugiat ultricies mi. Aliquam erat volutpat. Nam placerat, tortor in ultrices porttitor, orci enim rutrum enim, vel tempor sapien arcu a tellus. Vivamus convallis sodales ante varius gravida. Curabitur a purus vel augue ultrices ultricies id a nisl. Nullam malesuada consequat diam, a facilisis tortor volutpat et. Sed urna dolor, aliquet vitae posuere vulputate, euismod ac lorem. Sed felis risus, pulvinar at interdum quis, vehicula sed odio. Phasellus in enim venenatis, iaculis tortor eu, bibendum ante. Donec ac tellus dictum neque volutpat blandit. Praesent efficitur faucibus risus, ac auctor purus porttitor vitae. Phasellus ornare dui nec orci posuere, nec luctus mauris semper.</p>
<p>Morbi viverra, ante vel aliquet tincidunt, leo dolor pharetra quam, at semper massa orci nec magna. Donec posuere nec sapien sed laoreet. Etiam cursus nunc in condimentum facilisis. Etiam in tempor tortor. Vivamus faucibus egestas enim, at convallis diam pulvinar vel. Cras ac orci eget nisi maximus cursus. Nunc urna libero, viverra sit amet nisl at, hendrerit tempor turpis. Maecenas facilisis convallis mi vel tempor. Nullam vitae nunc leo. Cras sed nisl consectetur, rhoncus sapien sit amet, tempus sapien.</p>
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo lectus.</p>
</md-content>
</md-tab>
<md-tab label="three">
<md-content class="md-padding">
<h1 class="md-display-2">Tab Three</h1>
<p>Integer turpis erat, porttitor vitae mi faucibus, laoreet interdum tellus. Curabitur posuere molestie dictum. Morbi eget congue risus, quis rhoncus quam. Suspendisse vitae hendrerit erat, at posuere mi. Cras eu fermentum nunc. Sed id ante eu orci commodo volutpat non ac est. Praesent ligula diam, congue eu enim scelerisque, finibus commodo lectus.</p>
</md-content>
</md-tab>
</md-tabs>
</md-content>
</div>
<!-- The New Product Tabs Markup (ACF PRO) -->
<div class="product-tabs-wrap">
<div class="wrap">
<div ng-cloak="" class="hjs-woo-tabs" ng-app="TechTabs" ng-controller="AppCtrl">
<md-content>
<md-tabs md-dynamic-height="" md-border-bottom="" md-selected="data.selectedIndex">
<?php if ( get_the_content() == TRUE ): ?>
<md-tab label="Description">
<md-content class="md-padding">
<h1 class="md-display-2">Description</h1>
<?php the_content(); ?>
</md-content>
</md-tab>
<?php endif; ?>
<md-tab id="reviews-tab" ng-click="showReviews()" label="Reviews (<?php comments_number( '0', '1', '%' ); ?>)">
<md-content class="md-padding">
<h1 class="md-display-2">Reviews</h1>
<?php comments_template(); ?>
</md-content>
</md-tab>
</md-tabs>
</md-content>
</div>
</div>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment