FAQ

Frequently Asked Questions

A compilation of some Super Useful WooCommerce code snippets

Since over 5 years, WooCommerce is recognized as the most powerful and easy to use e-commerce plugin for WordPress. In this article, I have compiled my all time favorite hacks and code snippets to extend WooCommerce possibilities.


Create a direct “Add to cart” link

Sometimes you just need to let the user add a product in the cart by clicking on a link. It’s really easy to do, just add ?add-to-cart=974 at the end of any link.

In this example, 974 is the product id, and should be replaced by the id of the product you want to add to cart.

http://yoursite.com/checkout/?add-to-cart=974

 

Remove address fields in checkout

If you’re selling digital goods, you don’t necessarily need to ask the buyer for his address. In order to remove the address fields from the checkout, insert the following code into your theme functions.php file:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
 
function custom_override_checkout_fields( $fields ) {
    unset($fields['billing']['billing_first_name']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_city']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_phone']);
    unset($fields['order']['order_comments']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_last_name']);
    unset($fields['billing']['billing_city']);
    return $fields;
}

Define the number of products displayed per page

A simple but effective way to define how many products should be displayed per page. On this example, return 25 means that 25 products will be shown, update this value with the desired number of products and append this line you your theme’s functions.php file.

add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 25;' ), 20 );

 

Add a message above the login / register form

Here’s a simple way to automatically add a custom message above the login/registration form. This code should be inserted into your functions.php file.

add_action( 'woocommerce_before_customer_login_form', 'jk_login_message' );
function jk_login_message() {
    if ( get_option( 'woocommerce_enable_myaccount_registration' ) == 'yes' ) {
	?>
		<div class="woocommerce-info">
			<p><?php _e( 'Returning customers login. New users register for next time so you can:' ); ?></p>
			<ul>
				<li><?php _e( 'View your order history' ); ?></li>
				<li><?php _e( 'Check on your orders' ); ?></li>
				<li><?php _e( 'Edit your addresses' ); ?></li>
				<li><?php _e( 'Change your password' ); ?></li>
			</ul>
		</div>
	<?php
	}
}

Remove the breadcrumbs

If you don’t think the breadcrumbs are useful, you can remove them easily by adding the code below into your theme’s functions.php file.

add_action( 'init', 'jk_remove_wc_breadcrumbs' );

function jk_remove_wc_breadcrumbs() {
    remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 );
}

Redirect add to cart button to the checkout page

A very interesting hack which allows you to automatically redirect users to the checkout page once a product has been added to the cart. As many other hacks from this article, this code should go to your functions.php file.

function add_to_cart_checkout_redirect() {
    wp_safe_redirect( get_permalink( get_option( 'woocommerce_checkout_page_id' ) ) );
    die();
}

add_action( 'woocommerce_add_to_cart', 'add_to_cart_checkout_redirect', 16 );

 

Replace “out of stock” by “sold”

If you’re selling unique objects, it makes much more sense to display “sold” instead of the default “out of stock” label. To do so, you simply have to paste this code in your functions.php file.

add_filter('woocommerce_get_availability', 'availability_filter_func');

function availability_filter_func($availability) {
	$availability['availability'] = str_ireplace('Out of stock', 'Sold', $availability['availability']);
	return $availability;
}

 

Restrict shipping to selected countries

If you’re only willing to ship goods to specific countries, you can use the code below to do it. Countries can be added on the array on line 6. Code has to be in your functions.php file to work.

function woo_override_checkout_fields( $fields ) { 

	$fields['shipping']['shipping_country'] = array(
		'type'      => 'select',
		'label'     => __('My New Country List', 'woocommerce'),
		'options' 	=> array('AU' => 'Australia')
	);

	return $fields; 
} 
add_filter( 'woocommerce_checkout_fields' , 'woo_override_checkout_fields' );


Display “product already in cart” instead of “add to cart” button

If a visitor has already added a specific product to his cart, it can be a great thing to notify them if an attempt to add the same product occurs.

Here’s a simple code snippet to do that. Just add it to your functions.php file.

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );
function woo_custom_cart_button_text() {
	global $woocommerce;
	foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
		$_product = $values['data'];
 
		if( get_the_ID() == $_product->id ) {
			return __('Already in cart - Add Again?', 'woocommerce');
		}
	}
	return __('Add to cart', 'woocommerce');
}
 
add_filter( 'add_to_cart_text', 'woo_archive_custom_cart_button_text' );
function woo_archive_custom_cart_button_text() {
	global $woocommerce;
	foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
		$_product = $values['data'];
		if( get_the_ID() == $_product->id ) {
			return __('Already in cart', 'woocommerce');
		}
	}
	return __('Add to cart', 'woocommerce');
}

Add custom page navigation to WooCommerce

WooCommerce, like WordPress, doesn’t use page navigation by default. This can be changed easily on WordPress with the WP PageNavi plugin. When using WooCommerce, it requires a little hack to work.

The first thing to do is to install the WP PageNavi plugin. Once done, simply open your functions.php file and paste the following code in it.

remove_action('woocommerce_pagination', 'woocommerce_pagination', 10);
function woocommerce_pagination() {
		wp_pagenavi(); 		
	}
add_action( 'woocommerce_pagination', 'woocommerce_pagination', 10);
CodeRevolution Knowledge Base

Video tutorials