Skip to content

Instantly share code, notes, and snippets.

View shameemreza's full-sized avatar
🇧🇩
I fix the WooCommerce problems that keep merchants stuck.

Shameem Reza shameemreza

🇧🇩
I fix the WooCommerce problems that keep merchants stuck.
View GitHub Profile
@shameemreza
shameemreza / exempt-product-variations-from-object-caching.php
Created May 25, 2025 04:19
Exempt product variations from object caching to fix variation selection buttons
/**
* Exempt product variations from object caching to fix variation selection buttons
*
* This fixes an issue where variation buttons disappear when object caching is enabled
* on Pressable or any other hosting.
*/
add_filter('advanced_post_cache_skip_for_post_type', 'oleomontreal_exempt_variations_from_cache', 10, 2);
function oleomontreal_exempt_variations_from_cache($return_me, $post_type) {
$exempted = array('product_variation');
if (in_array($post_type, $exempted)) {
@shameemreza
shameemreza / reduce-action-scheduler-retention-period.php
Created May 25, 2025 02:19
Reduce Action Scheduler Retention Period to One Week in WooCommerce
add_filter( 'action_scheduler_retention_period', 'wc_action_scheduler_purge' );
/**
* Change Action Scheduler default purge to 1 week
*/
function wc_action_scheduler_purge() {
return WEEK_IN_SECONDS;
}
@shameemreza
shameemreza / automatewoo-generate-coupon-on-purchase.php
Created May 21, 2025 04:00
Generates a unique coupon when a specific product (Bronze, Silver, or Gold Coupon) is purchased and emails it to the customer using AutomateWoo.
/**
* Generate a coupon when a specific product is purchased and email it to the customer.
* @param AutomateWoo\Workflow $workflow
*/
function my_automatewoo_generate_coupon( $workflow ) {
$order = $workflow->data_layer()->get_order();
if ( ! $order ) {
return;
}
@shameemreza
shameemreza / all-attribute-terms-shortcode.php
Created May 20, 2025 09:56
Shortcode to display all attribute terms in WooCommerce, including unused ones, with working filter links.
/**
* Shortcode: [all_attribute_terms attribute="pa_size"]
* Shows all terms for a product attribute, even if not assigned to products.
* Links use WooCommerce's layered nav filter format.
*/
function show_all_attribute_terms( $atts ) {
$atts = shortcode_atts( [
'attribute' => '',
], $atts );
@shameemreza
shameemreza / filter-distance-rate-shipping-by-lowest-cost.php
Created May 7, 2025 06:12
WooCommerce Distance Rate Shipping: Filter to only return the shipping rate with the lowest cost when multiple rates are available.
add_filter( 'woocommerce_package_rates', 'keep_only_lowest_distance_rate', 20, 2 );
function keep_only_lowest_distance_rate( $rates, $package ) {
$lowest_rate_key = '';
$lowest_cost = null;
foreach ( $rates as $rate_key => $rate ) {
if ( is_null( $lowest_cost ) || floatval( $rate->cost ) < $lowest_cost ) {
$lowest_cost = floatval( $rate->cost );
$lowest_rate_key = $rate_key;
add_action( 'woocommerce_cart_calculate_fees', function() {
if ( wcs_cart_contains_renewal() ) {
return;
}
$subscription_box_id = 54;
$cart_contents = WC()->cart->get_cart_contents();
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( empty( $cart_item[ 'wcsatt_data'][ 'active_subscription_scheme' ] ) ) {
continue;
}
@shameemreza
shameemreza / filter-products-no-vendor.php
Created April 28, 2025 02:00
Adds a "No Vendor" filter link to the WooCommerce Products admin screen for stores using WooCommerce Product Vendors.
// Add custom view for products without a vendor
add_filter( 'views_edit-product', function( $views ) {
$class = ( isset($_GET['no_vendor']) && $_GET['no_vendor'] == 1 ) ? 'current' : '';
$url = add_query_arg( 'no_vendor', '1', admin_url( 'edit.php?post_type=product' ) );
$views['no_vendor'] = "<a href='{$url}' class='{$class}'>No Vendor</a>";
return $views;
});
// Modify the query to show products without vendor when selected
add_action( 'pre_get_posts', function( $query ) {
@shameemreza
shameemreza / auto-delete-out-of-stock-products.php
Created April 22, 2025 09:15
Automatically delete products when stock hits zero, but only after the order is completed.
add_action( 'woocommerce_order_status_completed', function( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
@shameemreza
shameemreza / hide-bookable-product-templates-message.php
Created April 14, 2025 03:13
Hide bookable product templates message
add_action( 'admin_enqueue_scripts', function() {
remove_action( 'admin_notices', [ 'WC_Bookings_Admin_Install', 'bookable_product_templates_notice' ] );
});
//Hide the Bundle When a product is Out of Stock
add_filter( 'woocommerce_product_is_visible', 'hide_bundle_when_required_product_is_out_of_stock', 10, 2 );
function hide_bundle_when_required_product_is_out_of_stock( $visible, $product_id ) {
$product = wc_get_product( $product_id );
// Check if the product is a bundle
if ( $product && $product->is_type( 'bundle' ) ) {
$bundled_items = $product->get_bundled_items();