WooCommerce 3.3 – Hide uncategorized category from the shop page on the frontend

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
*/
add_filter( 'woocommerce_product_subcategories_args', 'custom_woocommerce_product_subcategories_args' );
function custom_woocommerce_product_subcategories_args( $args ) {
$args['exclude'] = get_option( 'default_product_cat' );
return $args;
}

view raw
functions.php
hosted with ❤ by GitHub

Small drop-in plugin to fix double-serialized product attributes (they are no longer double-unserialized in WC Core)

<?php
/**
* Plugin Name: Double serialized attributes fixer
* Description: Adds a tool to fix double serialized attributes in WooCommerce.
* Version: 0.0.9
* Author: Mike J
* Requires at least: 4.4
* Tested up to: 4.7
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_filter( 'woocommerce_debug_tools', 'double_serialized_attributes_fixer_tool' );
function double_serialized_attributes_fixer_tool( $tools ) {
$tools[ 'double_serialized_attributes_fixer' ] = array(
'name' => 'Double-serialized attributes',
'button' => 'Fix double-serialized attributes',
'desc' => 'This tool will attept to fix all double-serialized attributes for products.',
'callback' => 'double_serialized_attributes_fixer',
);
return $tools;
}
// Fixes double-serialised values – #14824.
function double_serialized_attributes_fixer() {
global $wpdb;
$product_ids = wp_parse_id_list( $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product';" ) );
foreach ( $product_ids as $product_id ) {
$attributes = get_post_meta( $product_id, '_product_attributes', true );
if ( is_serialized( $attributes ) ) {
$attributes = maybe_unserialize( $attributes );
update_post_meta( $product_id, '_product_attributes', $attributes );
}
}
}

WooCommerce – Notify admin when a new customer account is created

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
*/
add_action( 'woocommerce_created_customer', 'woocommerce_created_customer_admin_notification' );
function woocommerce_created_customer_admin_notification( $customer_id ) {
wp_send_new_user_notifications( $customer_id, 'admin' );
}

view raw
functions.php
hosted with ❤ by GitHub

WooCommerce – Hide price suffix when product is not taxable.

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
*/
add_filter( 'woocommerce_get_price_suffix', 'custom_woocommerce_get_price_suffix', 10, 2 );
function custom_woocommerce_get_price_suffix( $price_display_suffix, $product ) {
if ( ! $product->is_taxable() ) {
return '';
}
return $price_display_suffix;
}

view raw
functions.php
hosted with ❤ by GitHub

WooCommerce – Redirect external products offsite (disable single listings)

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
*/
add_action( 'template_redirect', 'redirect_external_products' );
function redirect_external_products() {
global $post;
if ( is_singular( 'product' ) && ! empty( $post ) && ( $product = wc_get_product( $post ) ) && $product->is_type( 'external' ) ) {
wp_redirect( $product->get_product_url() );
exit;
}
}

view raw
functions.php
hosted with ❤ by GitHub

WooCommerce – remove payment method from emails

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
*/
add_filter( 'woocommerce_get_order_item_totals', 'custom_woocommerce_get_order_item_totals' );
function custom_woocommerce_get_order_item_totals( $totals ) {
unset( $totals['payment_method'] );
return $totals;
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

WooCommerce – Hide shipping rates when free shipping is available.

<?php
/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

view raw
functions.php
hosted with ❤ by GitHub

WooCommerce – Add all upsells of a product to the cart via custom link

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php.
* Product must have upsells, and this works with simple products only.
* Example link: yoursite.com?add-upsells-to-cart=X, X being your product ID.
*/
add_action( 'wp_loaded', 'bulk_upsell_add_to_cart_action', 20 );
function bulk_upsell_add_to_cart_action() {
if ( ! empty( $_GET['add-upsells-to-cart'] ) ) {
$product_id = absint( $_GET['add-upsells-to-cart'] );
$product = wc_get_product( $product_id );
if ( $product ) {
$upsell_ids = $product->get_upsells();
if ( $upsell_ids ) {
$count = 0;
foreach ( $upsell_ids as $upsell_id ) {
if ( WC()->cart->add_to_cart( $upsell_id ) ) {
$count ++;
}
}
wc_add_notice( sprintf( _n( 'Added %d item to the cart', 'Added %d items to the cart', $count ), $count ) );
}
}
}
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

WooCommerce – enable free shipping only if product class is found in cart.

<?php // Do not include this if already open!
/**
* Code goes in theme functions.php. Free Shipping Method must be enabled.
*/
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'free_shipping_based_on_cart_shipping_class' );
function free_shipping_based_on_cart_shipping_class( $is_available ) {
/**
* This example enables free shipping only when an item is found in the cart with a class named 'free_shipping'
*/
$cart_items = WC()->cart->get_cart();
$found = false;
foreach ( $cart_items as $cart_item ) {
$product = $cart_item['data'];
$class = $product->get_shipping_class();
if ( 'free_shipping' === $class ) {
$found = true;
break;
}
}
return $is_available && $found;
}

view raw
functions.php
hosted with ❤ by GitHub

Loading...