Cart / Checkout: Custom Product Default to Autoship and Frequency with Message
Defaults to a product with a custom meta flag (xx_autoship_only_flag) to Autoship on Product and Cart pages. Hide Autoship options and display a custom Autoship message based on product type.
Important: Always test customizations to your site on a staging environment before making changes to your live / production site. If you are not experienced with testing changes on a staging site, here is a good article to review.
/** * Custom Code Snippet to: * 1. Default the Autoship Options to Autoship on Product & Cart Pages * 2. Hide Autoship options on Product and Cart Pages * 3. Display Autoship & Save Message on Product & Cart Pages * 4. Only applies to products with a custom metadata field of xx_autoship_only_flag set to 'yes' */ /** * Default the Autoship option for both Simple and * Variable products by default. */ function xx_default_autoship_for_all( $product ){ return 'yes'; } add_filter('autoship_default_product_schedule_options_choice_value', 'xx_default_autoship_for_all', 10 ,1); /** * Outputs custom css to hide the Autoship Radio Options for a specific Autoship Product * NOTE Uses the 'xx_autoship_only_flag' metadata field for a product. * @param WC_Product $product The woocommerce product */ function xx_hide_non_autoship_option( $product ){ // Get the Metadata flag for the product. $autoship_only = get_post_meta( $product->get_id(), 'xx_autoship_only_flag', true ); // Exclude these two lines to hide for all autoship products. if ( 'yes' != $autoship_only ) return ob_start();?> <style> .autoship-schedule-options > div:nth-of-type(1), .autoship-schedule-options > div:nth-of-type(2) { display: none; } </style> <?php echo ob_get_clean(); } add_action('autoship_before_schedule_options', 'xx_hide_non_autoship_option', 10, 1 ); add_action('autoship_before_schedule_options_variable', 'xx_hide_non_autoship_option', 10, 1 ); /** * Outputs custom div to hide the Autoship Radio Options for a specific Autoship Product * on the cart page * NOTE Uses the 'xx_autoship_only_flag' metadata field for a product. * @param WC_Product $product The woocommerce product */ function xx_hide_non_autoship_option_on_cart( $product ){ // Get the Metadata flag for the product. $autoship_only = get_post_meta( $product->get_id(), 'xx_autoship_only_flag', true ); // Exclude these two lines to hide for all autoship products. if ( 'yes' == $autoship_only ) echo '<div style="display:none">'; } add_action('autoship_before_cart_schedule_options', 'xx_hide_non_autoship_option', 9, 1 ); /** * Outputs custom div to hide the Autoship Radio Options for a specific Autoship Product * on the cart page * NOTE Uses the 'xx_autoship_only_flag' metadata field for a product. * @param WC_Product $product The woocommerce product */ function xx_hide_non_autoship_option_on_cart_after( $product ){ // Get the Metadata flag for the product. $autoship_only = get_post_meta( $product->get_id(), 'xx_autoship_only_flag', true ); // Exclude these two lines to hide for all autoship products. if ( 'yes' == $autoship_only ) echo '</div>'; } add_action('autoship_after_cart_schedule_options', 'xx_hide_non_autoship_option', 9, 1 ); /** * Outputs custom message for always Autoship Products * NOTE Uses the 'xx_autoship_only_flag' metadata field for a product. * @param WC_Product $product The wc product */ function xx_show_always_autoship_option_notice( $product ){ // Get the Metadata flag for the product. $autoship_only = get_post_meta( $product->get_id(), 'xx_autoship_only_flag', true ); // Exclude these two lines to hide for all autoship products. if ( 'yes' == $autoship_only ) return ?> <div class="autoship-type"> <label class="autoship-label"> <?php // Output the Extended Discount String based on product type echo $product->is_type('variable') ? autoship_checkout_recurring_variable_discount_string( $product->get_id() ): autoship_checkout_recurring_discount_string( $product->get_id() ); // Output the Autoship Product Message echo autoship_product_message_string( $product->get_id() ); ?> </label> </div> <?php } add_action('autoship_after_schedule_radio_options', 'xx_show_always_autoship_option_notice', 10, 1 ); add_action('autoship_after_schedule_radio_options_variable', 'xx_show_always_autoship_option_notice', 10, 1 ); add_action('autoship_after_cart_schedule_radio_options', 'xx_show_always_autoship_option_notice', 10, 1 );