Hello
I like your BuddyCommerce plugin. But the “automatically renew” toggle on the subscription details (view-subscription) appears to break.
My guess is that some scripts are not being loaded on the page.
Is there any way you can help?
Thanks for all your work
Owen
Hi Owen,
Welcome to BuddyDev support forums.Thank you for using the plugin.
Is it about WooCommerce subscription? we added support when one of our members provided access to it around one year ago. We don’t have a license for it and can’t test.
If you are able to troubelshoot, Please do share the solution or if you can provide us access to the subscription plugin, Please do and we will take care of it.
Regards
BrajeshThanks Brajesh.
Yes, it is the WooCommerce subscription plugin. This includes an ajax-enabled toggle to automatically renew (or not) a subscription.
On the front end, the plugin adds a subscription tab, which shows a table of subscriptions. If you click to see the details, you get taken to a page (‘view-subscription’) which includes this toggle.
If this page is loaded without the relevant scripts, then the toggle doesn’t work.
I believe the relevant scripts are here:
https://github.com/wp-premium/woocommerce-subscriptions/blob/master/woocommerce-subscriptions.php#L369-L400As you can see from the extract below, this loads some front-end scripts that I think are not loaded by the BuddyCommerce plugin.
Is there an easy way to add these scripts to the plugin? If you point me in the right direction I can see if I can work it out. Alternatively I’m happy to give you full access to our development site if you want to take a look or experiment.
Here is the code fromm Woocommerce subscriptions that I think is relevant:
public static function enqueue_frontend_scripts() { $dependencies = array( 'jquery' ); if ( is_cart() || is_checkout() ) { wp_enqueue_script( 'wcs-cart', plugin_dir_url( WC_Subscriptions::$plugin_file ) . 'assets/js/frontend/wcs-cart.js', $dependencies, WC_Subscriptions::$version, true ); } elseif ( is_product() ) { wp_enqueue_script( 'wcs-single-product', plugin_dir_url( WC_Subscriptions::$plugin_file ) . 'assets/js/frontend/single-product.js', $dependencies, WC_Subscriptions::$version, true ); } elseif ( wcs_is_view_subscription_page() ) { global $wp; $subscription = wcs_get_subscription( $wp->query_vars['view-subscription'] ); if ( $subscription && current_user_can( 'view_order', $subscription->get_id() ) ) { $dependencies[] = 'jquery-blockui'; $script_params = array( 'ajax_url' => esc_url( WC()->ajax_url() ), 'subscription_id' => $subscription->get_id(), 'add_payment_method_msg' => __( 'To enable automatic renewals for this subscription, you will first need to add a payment method.', 'woocommerce-subscriptions' ) . "\n\n" . __( 'Would you like to add a payment method now?', 'woocommerce-subscriptions' ), 'auto_renew_nonce' => WCS_My_Account_Auto_Renew_Toggle::can_user_toggle_auto_renewal( $subscription ) ? wp_create_nonce( "toggle-auto-renew-{$subscription->get_id()}" ) : false, 'add_payment_method_url' => esc_url( $subscription->get_change_payment_method_url() ), 'has_payment_gateway' => $subscription->has_payment_gateway() && wc_get_payment_gateway_by_order( $subscription )->supports( 'subscriptions' ), ); wp_enqueue_script( 'wcs-view-subscription', plugin_dir_url( WC_Subscriptions::$plugin_file ) . 'assets/js/frontend/view-subscription.js', $dependencies, WC_Subscriptions::$version, true ); wp_localize_script( 'wcs-view-subscription', 'WCSViewSubscription', apply_filters( 'woocommerce_subscriptions_frontend_view_subscription_script_parameters', $script_params ) ); } } }
In case anyone is looking for the answer, I solved this problem with the following code (add it to your theme functions.php file). This code loads the relevant JS and CSS scripts on the view-subscriptions page:
add_action( 'wp_enqueue_scripts', 'sb_enqueue_scripts' ); function sb_enqueue_scripts( $hook ) { if (strpos($_SERVER['REQUEST_URI'], "/view-subscription/") !== false) { enqueue_wc_subscriptions_frontend_scripts(); } } function enqueue_wc_subscriptions_frontend_scripts() { $dependencies = array( 'jquery' ); global $wp; $subscription = wcs_get_subscription( $wp->query_vars['view-subscription'] ); if ( $subscription && current_user_can( 'view_order', $subscription->get_id() ) ) { $dependencies[] = 'jquery-blockui'; $script_params = array( 'ajax_url' => esc_url( WC()->ajax_url() ), 'subscription_id' => $subscription->get_id(), 'add_payment_method_msg' => __( 'To enable automatic renewals for this subscription, you will first need to add a payment method.', 'woocommerce-subscriptions' ) . "\n\n" . __( 'Would you like to add a payment method now?', 'woocommerce-subscriptions' ), 'auto_renew_nonce' => WCS_My_Account_Auto_Renew_Toggle::can_user_toggle_auto_renewal( $subscription ) ? wp_create_nonce( "toggle-auto-renew-{$subscription->get_id()}" ) : false, 'add_payment_method_url' => esc_url( $subscription->get_change_payment_method_url() ), 'has_payment_gateway' => $subscription->has_payment_gateway() && wc_get_payment_gateway_by_order( $subscription )->supports( 'subscriptions' ), ); wp_enqueue_script( 'wcs-view-subscription', plugin_dir_url( WC_Subscriptions::$plugin_file ) . 'vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js', $dependencies, WC_Subscriptions::$version, true ); wp_localize_script( 'wcs-view-subscription', 'WCSViewSubscription', apply_filters( 'woocommerce_subscriptions_frontend_view_subscription_script_parameters', $script_params ) ); } } // end function
Hi Ownen,
Thank you for sharing.
I hope it will be useful for others.Regards
Brajesh
You must be logged in to reply to this topic.