Tag Archives: WooCommerce

Add order complete action to WooCommerce My Orders customer table

if ( ! function_exists( 'wcj_add_my_account_order_actions' ) ) {
	/*
	 * wcj_add_my_account_order_actions.
	 */
	function wcj_add_my_account_order_actions( $actions, $order ) {
		if ( 'completed' != $order->get_status() ) {
			$actions['wcj_mark_completed_by_customer'] = array(
				'url'  => wp_nonce_url( add_query_arg( array(
					'wcj_action' => 'wcj_woocommerce_mark_order_status',
					'order_id'   => $order->get_id() ) ), 'wcj-woocommerce-mark-order-status' ),
				'name' => __( 'Complete', 'woocommerce-jetpack' ),
			);
		}
		return $actions;
	}
}
add_filter( 'woocommerce_my_account_my_orders_actions', 'wcj_add_my_account_order_actions', 10, 2 );
if ( ! function_exists( 'wcj_add_js_conformation' ) ) {
	/*
	 * wcj_add_js_conformation.
	 */
	function wcj_add_js_conformation() {
		echo '<script>
			jQuery("a.wcj_mark_completed_by_customer").each( function() { jQuery(this).attr("onclick", "return confirm(\'' . __( 'Are you sure?', 'woocommerce-jetpack' ) . '\')") } );
		</script>';
	}
}
add_action( 'wp_footer', 'wcj_add_js_conformation' );
if ( ! function_exists( 'wcj_woocommerce_mark_order_status' ) ) {
	/*
	 * wcj_woocommerce_mark_order_status.
	 */
	function wcj_woocommerce_mark_order_status() {
		if ( isset( $_GET['wcj_action'] ) && 'wcj_woocommerce_mark_order_status' === $_GET['wcj_action'] && isset( $_GET['order_id'] ) && isset( $_GET['_wpnonce'] ) ) {
			if ( wp_verify_nonce( $_GET['_wpnonce'], 'wcj-woocommerce-mark-order-status' ) ) {
				$_order = wc_get_order( $_GET['order_id'] );
				if ( $_order->get_customer_id() === get_current_user_id() ) {
					$_order->update_status( 'completed' );
					wp_safe_redirect( remove_query_arg( array( 'wcj_action', 'order_id', '_wpnonce' ) ) );
					exit;
				}
			}
		}
	}
}
add_action( 'init', 'wcj_woocommerce_mark_order_status' );

Add total customer orders counter column to admin orders list in WooCommerce

/**
 * Add "Orders" column
 */
add_filter( 'manage_edit-shop_order_columns', 'add_shop_order_column_completed_orders', PHP_INT_MAX );
function add_shop_order_column_completed_orders( $columns ) {
	$columns['completed_orders'] = 'Orders';
	return $columns;
}
/**
 * Output "Orders" column
 */
add_action( 'manage_shop_order_posts_custom_column', 'render_shop_order_column_completed_orders', PHP_INT_MAX );
function render_shop_order_column_completed_orders( $column ) {
	if ( 'completed_orders' != $column ) {
		return;
	}
	$_order = wc_get_order( get_the_ID() );
	if ( 'completed' === $_order->get_status() ) {
		if ( 0 != $_order->customer_user ) {
			$customer_orders = get_posts( array(
				'numberposts' => -1,
				'meta_key'    => '_customer_user',
				'meta_value'  => $_order->customer_user,
				'post_type'   => wc_get_order_types(),
				'post_status' => array( 'wc-completed' ), // for all orders use: array_keys( wc_get_order_statuses() )
			) );
			$info = '<a href="/wp-admin/edit.php?post_status=wc-completed&post_type=shop_order&_customer_user='
				. $_order->customer_user . '">' . count( $customer_orders ) . '</a>';
			wp_reset_postdata();
		} else {
			$info = '[guest]';
		}
		echo $info;
	}
}

Add WooCommerce product shipping class name to cart

/*
 * Add this to your (child) theme's functions.php file
 */
add_filter( 'woocommerce_cart_item_name', 'add_product_shipping_class', PHP_INT_MAX, 3 );
/*
 * add_product_shipping_class.
 */
function add_product_shipping_class( $cart_item_name, $cart_item, $cart_item_key ) {
	$product_id = ( 0 != $cart_item['variation_id'] ) ? $cart_item['variation_id'] : $cart_item['product_id'];
	$product_shipping_classes = get_the_terms( $product_id, 'product_shipping_class' );
	$product_shipping_class_name = ( $product_shipping_classes && ! is_wp_error( $product_shipping_classes ) ) ? current( $product_shipping_classes )->name : '';
	return $cart_item_name . ' ' . $product_shipping_class_name;
}

Remove WooCommerce payment gateway instructions from thank you page, but leave enabled in emails

/*
 * Remove WooCommerce payment gateway instructions from thank you page, but leave enabled in emails.
 * Add it to your (child) theme's functions.php file.
 * Snippet is for cheque payment gateway. You can also use:
 * woocommerce_thankyou_bacs, woocommerce_thankyou_cod, woocommerce_thankyou_paypal etc.
 */
add_action( 'woocommerce_thankyou_cheque', 'ob_start', 0, 0 );
add_action( 'woocommerce_thankyou_cheque', 'ob_end_clean', PHP_INT_MAX, 0 );