/** * When a formidable form submitted, add form's connected product to cart. */ add_action('frm_after_create_entry', 'ff_take_user_to_wc_checkout_for_payment', 20, 2); function ff_take_user_to_wc_checkout_for_payment($entry_id, $form_id) { $linked_products = get_posts([ 'post_type' => 'product', 'post_status' => 'publish', 'numberposts' => 1, 'meta_key' => '_attached_formidable_form', 'meta_value' => $form_id, 'cache_results' => false, ]); if (empty($linked_products)) { return; } $product_id = $linked_products[0]->ID; if (!function_exists('WC') || !WC()->session) { return; } if (method_exists(WC()->session, 'set_customer_session_cookie')) { WC()->session->set_customer_session_cookie(true); } WC()->cart->empty_cart(); $entry = FrmEntry::getOne($entry_id, true); $form_data = $entry->metas; $addon_total = 0; foreach ($form_data as $value) { if (is_string($value) && strpos(trim($value), '$') === 0) { $price = floatval(str_replace(['$', ','], '', $value)); $addon_total += $price; } } WC()->session->set('addon_total', $addon_total); WC()->cart->add_to_cart($product_id, 1, 0, [], ['addon_total' => $addon_total]); if (empty($_POST['frm_ajax'])) { wp_safe_redirect(wc_get_checkout_url()); exit; } } /** * When an item is added to the cart, remove other products. */ add_filter( 'woocommerce_add_to_cart_validation', 'ff_keep_only_one_product_in_the_cart', 10, 3 ); function ff_keep_only_one_product_in_the_cart( $valid, $product_id, $quantity ) { if( ! empty ( WC()->cart->get_cart() ) && $valid ) { WC()->cart->empty_cart(); } return $valid; } /** * Disable add to cart confirmation message. */ add_filter( 'wc_add_to_cart_message_html', '__return_false' ); /** * Redirect user to checkout page after adding a product to cart. */ add_filter ('add_to_cart_redirect', 'ff_redirect_to_checkout'); function ff_redirect_to_checkout() { global $woocommerce; $checkout_url = $woocommerce->cart->get_checkout_url(); return $checkout_url; } /** * Calculate formidable add-on prices and add them to the total price in WC checkout. */ add_action('woocommerce_before_calculate_totals', 'ff_apply_addon_total_to_cart_price', 10, 1); function ff_apply_addon_total_to_cart_price($cart) { if (is_admin() && !defined('DOING_AJAX')) { return; } foreach ($cart->get_cart() as $cart_item) { if (!empty($cart_item['addon_total'])) { $base_price = $cart_item['data']->get_price(); $addon_price = floatval($cart_item['addon_total']); $cart_item['data']->set_price($base_price + $addon_price); } } } /** * Use different Authorize.net accounts in checkout. */ add_filter( 'option_woocommerce_authorizeaim_settings', function( $woocommerce_authorizeaim_settings ) { global $woocommerce; if ( function_exists( 'is_checkout' ) && function_exists( 'get_field' ) && is_checkout() ) { foreach ( $woocommerce->cart->get_cart() as $cart_item ) { $product_id = $cart_item['product_id']; $api_login_id = get_post_meta( $product_id, 'api_login_id', true ); $transaction_key = get_post_meta( $product_id, 'transaction_key', true ); if ( !empty( $api_login_id ) && !empty( $transaction_key ) ) { $woocommerce_authorizeaim_settings['login_id'] = $api_login_id; $woocommerce_authorizeaim_settings['transaction_key'] = $transaction_key; break; } } } return $woocommerce_authorizeaim_settings; } ); /** * When placing a new WC order by submitting formidable, * set order's customer detail according to the submitted information. */ add_action( 'woocommerce_new_order', 'ff_update_customer_data', 10, 2 ); function ff_update_customer_data($order_id,$order){ $postdata = $_POST; $email = $postdata['la_email']; $username = $postdata['la_email']; $args = array( 'user_email' => $email, 'display_name' => $postdata['la_first_name'], 'first_name' => $postdata['la_first_name'], 'last_name' => $postdata['la_last_name'] ); $userdata = wc_create_new_customer($email,$username,'',$args); $userdata = json_decode(json_encode($userdata), true); if(isset($userdata['errors'])){ $customer = get_user_by('email',$email); if($customer){ $user_id = $customer->ID; } }else{ $user_id = $userdata; update_user_meta($user_id, "first_name",$postdata['la_first_name']); update_user_meta($user_id, "last_name",$postdata['la_last_name']); } $address = array( 'first_name' => $postdata['la_first_name'], 'last_name' => $postdata['la_last_name'], 'email' => $email, 'phone' => $postdata['la_ower_phone'], 'address_1' => $postdata['la_buisiness_adddress_1'], 'address_2' => $postdata['la_buisiness_adddress_2'], 'city' => $postdata['la_buisiness_adddress_city'], 'state' => $postdata['la_buisiness_adddress_state'], 'postcode' => $postdata['la_buisiness_adddress_zipcode'], 'country' => 'US' ); $order = new WC_Order($order_id); $order->set_customer_id($user_id); $order->set_address($address, 'billing'); $order->set_address($address, 'shipping'); $order->save(); } /** * Link formidable entry with woocommerce order. -- ⇩⇩⇩ -- */ // 1. Store formidable entry ID in the customer session. add_action( 'frm_after_create_entry', function( $entry_id, $form_id ) { WC()->session->set( 'frm_entry_id', $entry_id ); }, 20, 2 ); // 2. Set formidable entry id from session to the order as an order meta. add_action( 'woocommerce_checkout_create_order', function( $order, $data ) { if ( $entry_id = WC()->session->get( 'frm_entry_id' ) ) { $order->update_meta_data( '_frm_entry_id', $entry_id ); } }, 10, 2 ); // 3. Display the link to the formidable entry on the order details page. add_filter( 'woocommerce_order_item_display_meta_key', function( $display_value, $meta ) { if ( $meta->key == '_formidable_form_data' ) { $display_value = __( 'Formidable Entry', 'formidable-woocommerce' ); } return $display_value; }, 10, 2 ); Uncategorized Archives - Page 3 of 4 -

Uncategorized

Is a Physical Address Necessary for Your Business?

Is a Physical Address Necessary for Your Business? As business owners go about establishing their operations, there’s an important question that needs to be answered: What will be the registered address of the new entity? In cases where the business has a dedicated physical brick-and-mortar location, the answer is clear—but an increasing number of businesses […]

Is a Physical Address Necessary for Your Business? Read More »

How to Compose an Operating Agreement for an LLC

How to Compose an Operating Agreement for an LLC Starting a limited liability company (LLC) can be an exciting venture for entrepreneurs, as these types of businesses offer flexibility, protection from personal liability, and potential tax benefits. However, laying the foundation for successful operations involves more than just the legal formation of the business; it

How to Compose an Operating Agreement for an LLC Read More »

S Corp vs. C Corp

S Corp vs. C Corp: What’s the Difference?

S Corp vs. C Corp: What’s the Difference? For entrepreneurs and professionals navigating business structures, understanding what is S corp and C corp is essential. Below, we’ll highlight the difference between S corp and C corp, as both options offer unique advantages and constraints, tailored to fit diverse business needs and goals. What Is a C Corporation? A

S Corp vs. C Corp: What’s the Difference? Read More »

BBB For Restaurants

Better Business Bureau: Why You Should Apply to Become an Accredited Business

Trust is a major buying consideration for many customers, especially as more businesses move their operations online. While earning a customer’s trust can be a gradual process, joining the BBB instantly and effectively proves that your business is worth trusting. What Is the BBB? Founded in 1912, the Better Business Bureau (BBB) is a non-profit

Better Business Bureau: Why You Should Apply to Become an Accredited Business Read More »

Sole Proprietorship Explained: Pros and Cons

Sole Proprietorship Explained: Pros and Cons

What is sole proprietorship? It’s a type of business enterprise that is owned by one individual. One person is responsible for the entire business, and there is no legal difference between the owner and the business itself. If you’re going into business as a sole proprietor in California, you may need a California seller’s permit verification to

Sole Proprietorship Explained: Pros and Cons Read More »