Building a cross-browser compatible, multi-handle range slider

Range Inputs are HTML elements which let users select a numeric value between a specified minimum and maximum value. They support single values by default.

As part of the WooCommerce Blocks project we’ve been working on converting WooCommerce widgets to Gutenberg blocks. One of those happens to be a price slider which currently uses jQuery UI. For blocks we’re using React.

Rather than use a library, we were really keen to use native range inputs to keep our dependencies to a minimum, and so the range inputs were semantic and keyboard accessible. Our idea was to overlay 2 range sliders to form a single component.

After working on this, I’d like to share some of my findings. Spoiler alert, the final slider looks like this:

The finished slider
Continue reading “Building a cross-browser compatible, multi-handle range slider”

I made a Super Mario Themed Nursery

Last year, before the birth of my first son, I was able to get creative and decorate the nursery. Being a huge fan of video games (and retro style graphics!) logically I chose a Super Mario theme for the room and set about making plans to create a large wall mural and other themed objects (as well as doing the boring adult stuff like flooring and painting the walls).

It took approximately 2 months to get everything completed, and a lot of that was lead time on the custom things I needed to order. I do wish I took more shots during the build, but alas I didn’t think I’d be blogging about it. Maybe next time!

Continue reading “I made a Super Mario Themed Nursery”

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