本文整理汇总了PHP中woocommerce_format_decimal函数的典型用法代码示例。如果您正苦于以下问题:PHP woocommerce_format_decimal函数的具体用法?PHP woocommerce_format_decimal怎么用?PHP woocommerce_format_decimal使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了woocommerce_format_decimal函数的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: isset
}
$order_item['line_tax'] = isset($order_item['line_tax']) ? $order_item['line_tax'] : 0;
$order_item['line_total'] = isset($order_item['line_total']) ? $order_item['line_total'] : 0;
$order_item['line_subtotal_tax'] = isset($order_item['line_subtotal_tax']) ? $order_item['line_subtotal_tax'] : 0;
$order_item['line_subtotal'] = isset($order_item['line_subtotal']) ? $order_item['line_subtotal'] : 0;
$item_id = woocommerce_add_order_item($order_item_row->post_id, array('order_item_name' => $order_item['name'], 'order_item_type' => 'line_item'));
// Add line item meta
if ($item_id) {
woocommerce_add_order_item_meta($item_id, '_qty', absint($order_item['qty']));
woocommerce_add_order_item_meta($item_id, '_tax_class', $order_item['tax_class']);
woocommerce_add_order_item_meta($item_id, '_product_id', $order_item['id']);
woocommerce_add_order_item_meta($item_id, '_variation_id', $order_item['variation_id']);
woocommerce_add_order_item_meta($item_id, '_line_subtotal', woocommerce_format_decimal($order_item['line_subtotal']));
woocommerce_add_order_item_meta($item_id, '_line_subtotal_tax', woocommerce_format_decimal($order_item['line_subtotal_tax']));
woocommerce_add_order_item_meta($item_id, '_line_total', woocommerce_format_decimal($order_item['line_total']));
woocommerce_add_order_item_meta($item_id, '_line_tax', woocommerce_format_decimal($order_item['line_tax']));
$meta_rows = array();
// Insert meta
if (!empty($order_item['item_meta'])) {
foreach ($order_item['item_meta'] as $key => $meta) {
// Backwards compatibility
if (is_array($meta) && isset($meta['meta_name'])) {
$meta_rows[] = '(' . $item_id . ',"' . esc_sql($meta['meta_name']) . '","' . esc_sql($meta['meta_value']) . '")';
} else {
$meta_rows[] = '(' . $item_id . ',"' . esc_sql($key) . '","' . esc_sql($meta) . '")';
}
}
}
// Insert meta rows at once
if (sizeof($meta_rows) > 0) {
$wpdb->query($wpdb->prepare("\r\n\t\t\t\t\tINSERT INTO {$wpdb->prefix}woocommerce_order_itemmeta ( order_item_id, meta_key, meta_value )\r\n\t\t\t\t\tVALUES " . implode(',', $meta_rows) . ";\r\n\t\t\t\t", $order_item_row->post_id));
示例2: wc_setup_shipping_taxes_save
/**
* Save shipping and tax options
*/
public function wc_setup_shipping_taxes_save()
{
check_admin_referer('wc-setup');
$woocommerce_calc_shipping = isset($_POST['woocommerce_calc_shipping']) ? 'yes' : 'no';
$woocommerce_calc_taxes = isset($_POST['woocommerce_calc_taxes']) ? 'yes' : 'no';
update_option('woocommerce_calc_shipping', $woocommerce_calc_shipping);
update_option('woocommerce_calc_taxes', $woocommerce_calc_taxes);
update_option('woocommerce_prices_include_tax', sanitize_text_field($_POST['woocommerce_prices_include_tax']));
if ('yes' === $woocommerce_calc_shipping && !empty($_POST['shipping_cost_domestic'])) {
// Delete existing settings if they exist
delete_option('woocommerce_flat_rate_settings');
// Init rate and settings
$shipping_method = new WC_Shipping_Flat_Rate();
$costs = array();
$costs[] = woocommerce_format_decimal(sanitize_text_field($_POST['shipping_cost_domestic']));
if ($item_cost = sanitize_text_field($_POST['shipping_cost_domestic_item'])) {
$costs[] = $item_cost . ' * [qty]';
}
$shipping_method->settings['cost'] = implode(' + ', array_filter($costs));
$shipping_method->settings['enabled'] = 'yes';
$shipping_method->settings['type'] = 'order';
update_option($shipping_method->plugin_id . $shipping_method->id . '_settings', $shipping_method->settings);
}
if ('yes' === $woocommerce_calc_shipping && !empty($_POST['shipping_cost_international'])) {
// Delete existing settings if they exist
delete_option('woocommerce_international_delivery_settings');
// Init rate and settings
$shipping_method = new WC_Shipping_International_Delivery();
$costs = array();
$costs[] = woocommerce_format_decimal(sanitize_text_field($_POST['shipping_cost_international']));
if ($item_cost = sanitize_text_field($_POST['shipping_cost_international_item'])) {
$costs[] = $item_cost . ' * [qty]';
}
$shipping_method->settings['cost'] = implode(' + ', array_filter($costs));
$shipping_method->settings['enabled'] = 'yes';
$shipping_method->settings['type'] = 'order';
update_option($shipping_method->plugin_id . $shipping_method->id . '_settings', $shipping_method->settings);
}
if ('yes' === $woocommerce_calc_taxes && !empty($_POST['woocommerce_import_tax_rates'])) {
$locale_info = (include WC()->plugin_path() . '/i18n/locale-info.php');
$tax_rates = array();
$country = WC()->countries->get_base_country();
$state = WC()->countries->get_base_state();
if (isset($locale_info[$country])) {
if (isset($locale_info[$country]['tax_rates'][$state])) {
$tax_rates = $locale_info[$country]['tax_rates'][$state];
} elseif (isset($locale_info[$country]['tax_rates'][''])) {
$tax_rates = $locale_info[$country]['tax_rates'][''];
}
if (isset($locale_info[$country]['tax_rates']['*'])) {
$tax_rates = array_merge($locale_info[$country]['tax_rates']['*'], $tax_rates);
}
}
if ($tax_rates) {
$loop = 0;
foreach ($tax_rates as $rate) {
$tax_rate = array('tax_rate_country' => $rate['country'], 'tax_rate_state' => $rate['state'], 'tax_rate' => $rate['rate'], 'tax_rate_name' => $rate['name'], 'tax_rate_priority' => isset($rate['priority']) ? absint($rate['priority']) : 1, 'tax_rate_compound' => 0, 'tax_rate_shipping' => $rate['shipping'] ? 1 : 0, 'tax_rate_order' => $loop++, 'tax_rate_class' => '');
WC_Tax::_insert_tax_rate($tax_rate);
}
}
}
wp_redirect($this->get_next_step_link());
exit;
}
示例3: dokan_create_seller_order
/**
* Creates a sub order
*
* @param int $parent_order
* @param int $seller_id
* @param array $seller_products
*/
function dokan_create_seller_order($parent_order, $seller_id, $seller_products)
{
$order_data = apply_filters('woocommerce_new_order_data', array('post_type' => 'shop_order', 'post_title' => sprintf(__('Order – %s', 'woocommerce'), strftime(_x('%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce'))), 'post_status' => 'wc-pending', 'ping_status' => 'closed', 'post_excerpt' => isset($posted['order_comments']) ? $posted['order_comments'] : '', 'post_author' => $seller_id, 'post_parent' => $parent_order->id, 'post_password' => uniqid('order_')));
$order_id = wp_insert_post($order_data);
if ($order_id && !is_wp_error($order_id)) {
$order_total = $order_tax = 0;
$product_ids = array();
do_action('woocommerce_new_order', $order_id);
// now insert line items
foreach ($seller_products as $item) {
$order_total += (double) $item['line_total'];
$order_tax += (double) $item['line_tax'];
$product_ids[] = $item['product_id'];
$item_id = wc_add_order_item($order_id, array('order_item_name' => $item['name'], 'order_item_type' => 'line_item'));
if ($item_id) {
wc_add_order_item_meta($item_id, '_qty', $item['qty']);
wc_add_order_item_meta($item_id, '_tax_class', $item['tax_class']);
wc_add_order_item_meta($item_id, '_product_id', $item['product_id']);
wc_add_order_item_meta($item_id, '_line_subtotal', $item['line_subtotal']);
wc_add_order_item_meta($item_id, '_line_total', $item['line_total']);
wc_add_order_item_meta($item_id, '_line_tax', $item['line_tax']);
wc_add_order_item_meta($item_id, '_line_subtotal_tax', $item['line_subtotal_tax']);
}
}
// foreach
$bill_ship = array('_billing_country', '_billing_first_name', '_billing_last_name', '_billing_company', '_billing_address_1', '_billing_address_2', '_billing_city', '_billing_state', '_billing_postcode', '_billing_email', '_billing_phone', '_shipping_country', '_shipping_first_name', '_shipping_last_name', '_shipping_company', '_shipping_address_1', '_shipping_address_2', '_shipping_city', '_shipping_state', '_shipping_postcode');
// save billing and shipping address
foreach ($bill_ship as $val) {
$order_key = ltrim($val, '_');
update_post_meta($order_id, $val, $parent_order->{$order_key});
}
// calculate the total
$order_in_total = $order_total + $shipping_cost + $order_tax;
// set order meta
update_post_meta($order_id, '_payment_method', $parent_order->payment_method);
update_post_meta($order_id, '_payment_method_title', $parent_order->payment_method_title);
update_post_meta($order_id, '_order_shipping', woocommerce_format_decimal($shipping_cost));
update_post_meta($order_id, '_cart_discount', '0');
update_post_meta($order_id, '_order_tax', woocommerce_format_decimal($order_tax));
update_post_meta($order_id, '_order_shipping_tax', '0');
update_post_meta($order_id, '_order_total', woocommerce_format_decimal($order_in_total));
update_post_meta($order_id, '_order_key', apply_filters('woocommerce_generate_order_key', uniqid('order_')));
update_post_meta($order_id, '_customer_user', $parent_order->customer_user);
update_post_meta($order_id, '_order_currency', get_post_meta($parent_order->id, '_order_currency', true));
update_post_meta($order_id, '_prices_include_tax', $parent_order->prices_include_tax);
update_post_meta($order_id, '_customer_ip_address', get_post_meta($parent_order->id, '_customer_ip_address', true));
update_post_meta($order_id, '_customer_user_agent', get_post_meta($parent_order->id, '_customer_user_agent', true));
do_action('dokan_checkout_update_order_meta', $order_id, $seller_id);
}
// if order
}
示例4: create_order
//.........这里部分代码省略.........
if ($this->checkout_fields['shipping'] && ($woocommerce->cart->needs_shipping() || get_option('woocommerce_require_shipping_address') == 'yes')) {
foreach ($this->checkout_fields['shipping'] as $key => $field) {
$postvalue = false;
if ($this->posted['shiptobilling']) {
if (isset($this->posted[str_replace('shipping_', 'billing_', $key)])) {
$postvalue = $this->posted[str_replace('shipping_', 'billing_', $key)];
update_post_meta($order_id, '_' . $key, $postvalue);
}
} else {
$postvalue = $this->posted[$key];
update_post_meta($order_id, '_' . $key, $postvalue);
}
// User
if ($postvalue && $this->customer_id) {
update_user_meta($this->customer_id, $key, $postvalue);
}
}
}
// Save any other user meta
if ($this->customer_id) {
do_action('woocommerce_checkout_update_user_meta', $this->customer_id, $this->posted);
}
// Store the line items to the new/resumed order
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
// Add line item
$item_id = woocommerce_add_order_item($order_id, array('order_item_name' => $_product->get_title(), 'order_item_type' => 'line_item'));
// Add line item meta
if ($item_id) {
woocommerce_add_order_item_meta($item_id, '_qty', apply_filters('woocommerce_stock_amount', $values['quantity']));
woocommerce_add_order_item_meta($item_id, '_tax_class', $_product->get_tax_class());
woocommerce_add_order_item_meta($item_id, '_product_id', $values['product_id']);
woocommerce_add_order_item_meta($item_id, '_variation_id', $values['variation_id']);
woocommerce_add_order_item_meta($item_id, '_line_subtotal', woocommerce_format_decimal($values['line_subtotal'], 4));
woocommerce_add_order_item_meta($item_id, '_line_total', woocommerce_format_decimal($values['line_total'], 4));
woocommerce_add_order_item_meta($item_id, '_line_tax', woocommerce_format_decimal($values['line_tax'], 4));
woocommerce_add_order_item_meta($item_id, '_line_subtotal_tax', woocommerce_format_decimal($values['line_subtotal_tax'], 4));
// Store variation data in meta so admin can view it
if ($values['variation'] && is_array($values['variation'])) {
foreach ($values['variation'] as $key => $value) {
woocommerce_add_order_item_meta($item_id, esc_attr(str_replace('attribute_', '', $key)), $value);
}
}
// Add line item meta for backorder status
if ($_product->backorders_require_notification() && $_product->is_on_backorder($values['quantity'])) {
woocommerce_add_order_item_meta($item_id, apply_filters('woocommerce_backordered_item_meta_name', __('Backordered', 'woocommerce'), $cart_item_key, $order_id), $values['quantity'] - max(0, $_product->get_total_stock()));
}
// Allow plugins to add order item meta
do_action('woocommerce_add_order_item_meta', $item_id, $values);
}
}
// Store fees
foreach ($woocommerce->cart->get_fees() as $fee) {
$item_id = woocommerce_add_order_item($order_id, array('order_item_name' => $fee->name, 'order_item_type' => 'fee'));
if ($fee->taxable) {
woocommerce_add_order_item_meta($item_id, '_tax_class', $fee->tax_class);
} else {
woocommerce_add_order_item_meta($item_id, '_tax_class', '0');
}
woocommerce_add_order_item_meta($item_id, '_line_total', woocommerce_format_decimal($fee->amount));
woocommerce_add_order_item_meta($item_id, '_line_tax', woocommerce_format_decimal($fee->tax));
}
// Store tax rows
foreach (array_keys($woocommerce->cart->taxes + $woocommerce->cart->shipping_taxes) as $key) {
$item_id = woocommerce_add_order_item($order_id, array('order_item_name' => $woocommerce->cart->tax->get_rate_code($key), 'order_item_type' => 'tax'));
// Add line item meta
示例5: filter_woocommerce_create_order
/**
* When creating an order at checkout, if the order is for renewing a subscription from a failed
* payment, hijack the order creation to make a renewal order - not a vanilla WooCommerce order.
*
* @since 1.3
*/
public static function filter_woocommerce_create_order($order_id, $checkout_object)
{
global $woocommerce;
$cart_item = WC_Subscriptions_Cart::cart_contains_subscription_renewal();
if ($cart_item && 'child' == $cart_item['subscription_renewal']['role']) {
$product_id = $cart_item['product_id'];
$failed_order_id = $cart_item['subscription_renewal']['failed_order'];
$original_order_id = $cart_item['subscription_renewal']['original_order'];
$role = $cart_item['subscription_renewal']['role'];
$renewal_order_args = array('new_order_role' => $role, 'checkout_renewal' => true, 'failed_order_id' => $failed_order_id);
$renewal_order_id = WC_Subscriptions_Renewal_Order::generate_renewal_order($original_order_id, $product_id, $renewal_order_args);
$original_order = new WC_Order($original_order_id);
$customer_id = $original_order->customer_user;
// Save posted billing address fields to both renewal and original order
if ($checkout_object->checkout_fields['billing']) {
foreach ($checkout_object->checkout_fields['billing'] as $key => $field) {
update_post_meta($renewal_order_id, '_' . $key, $checkout_object->posted[$key]);
update_post_meta($original_order->id, '_' . $key, $checkout_object->posted[$key]);
// User
if ($customer_id && !empty($checkout_object->posted[$key])) {
update_user_meta($customer_id, $key, $checkout_object->posted[$key]);
// Special fields
switch ($key) {
case "billing_email":
if (!email_exists($checkout_object->posted[$key])) {
wp_update_user(array('ID' => $customer_id, 'user_email' => $checkout_object->posted[$key]));
}
break;
case "billing_first_name":
wp_update_user(array('ID' => $customer_id, 'first_name' => $checkout_object->posted[$key]));
break;
case "billing_last_name":
wp_update_user(array('ID' => $customer_id, 'last_name' => $checkout_object->posted[$key]));
break;
}
}
}
}
// Save posted shipping address fields to both renewal and original order
if ($checkout_object->checkout_fields['shipping'] && ($woocommerce->cart->needs_shipping() || get_option('woocommerce_require_shipping_address') == 'yes')) {
foreach ($checkout_object->checkout_fields['shipping'] as $key => $field) {
$postvalue = false;
if (isset($checkout_object->posted['shiptobilling']) && $checkout_object->posted['shiptobilling'] || isset($checkout_object->posted['ship_to_different_address']) && $checkout_object->posted['ship_to_different_address']) {
if (isset($checkout_object->posted[str_replace('shipping_', 'billing_', $key)])) {
$postvalue = $checkout_object->posted[str_replace('shipping_', 'billing_', $key)];
update_post_meta($renewal_order_id, '_' . $key, $postvalue);
update_post_meta($original_order->id, '_' . $key, $postvalue);
}
} elseif (isset($checkout_object->posted[$key])) {
$postvalue = $checkout_object->posted[$key];
update_post_meta($renewal_order_id, '_' . $key, $postvalue);
update_post_meta($original_order->id, '_' . $key, $postvalue);
}
// User
if ($postvalue && $customer_id) {
update_user_meta($customer_id, $key, $postvalue);
}
}
}
if ($checkout_object->posted['payment_method']) {
$available_gateways = $woocommerce->payment_gateways->get_available_payment_gateways();
if (isset($available_gateways[$checkout_object->posted['payment_method']])) {
$payment_method = $available_gateways[$checkout_object->posted['payment_method']];
$payment_method->validate_fields();
update_post_meta($renewal_order_id, '_payment_method', $payment_method->id);
update_post_meta($renewal_order_id, '_payment_method_title', $payment_method->get_title());
}
}
// Set the shipping method for WC < 2.1
if ($checkout_object->posted['shipping_method'] && method_exists($woocommerce->shipping, 'get_available_shipping_methods')) {
$available_shipping_methods = $woocommerce->shipping->get_available_shipping_methods();
if (isset($available_shipping_methods[$checkout_object->posted['shipping_method']])) {
$shipping_method = $available_shipping_methods[$checkout_object->posted['shipping_method']];
update_post_meta($renewal_order_id, '_shipping_method', $shipping_method->id);
update_post_meta($renewal_order_id, '_shipping_method_title', $shipping_method->label);
}
}
if (isset($failed_order_id)) {
$failed_order = new WC_Order($failed_order_id);
if ($failed_order->status == 'failed') {
update_post_meta($failed_order_id, '_failed_order_replaced_by', $renewal_order_id);
}
}
// Store fees, any new fees on this order should be applied now
foreach ($woocommerce->cart->get_fees() as $fee) {
$item_id = woocommerce_add_order_item($renewal_order_id, array('order_item_name' => $fee->name, 'order_item_type' => 'fee'));
if ($fee->taxable) {
woocommerce_add_order_item_meta($item_id, '_tax_class', $fee->tax_class);
} else {
woocommerce_add_order_item_meta($item_id, '_tax_class', '0');
}
woocommerce_add_order_item_meta($item_id, '_line_total', woocommerce_format_decimal($fee->amount));
woocommerce_add_order_item_meta($item_id, '_line_tax', woocommerce_format_decimal($fee->tax));
}
//.........这里部分代码省略.........
示例6: generate_renewal_order
//.........这里部分代码省略.........
}
if (isset($recurring_order_tax['shipping_tax']) && $recurring_order_tax['shipping_tax'] > 0) {
$recurring_order_taxes[$index]['shipping_tax'] = $failed_payment_multiplier * $recurring_order_tax['shipping_tax'];
} else {
$recurring_order_taxes[$index]['shipping_tax'] = 0;
}
// Inefficient but keeps WC 1.x code grouped together
update_post_meta($renewal_order_id, '_order_taxes', $recurring_order_taxes);
}
}
// Set line totals to be recurring line totals and remove the subscription/recurring related item meta from each order item
$order_items = WC_Subscriptions_Order::get_recurring_items($original_order);
// Allow extensions to add/remove items or item meta
$order_items = apply_filters('woocommerce_subscriptions_renewal_order_items', $order_items, $original_order->id, $renewal_order_id, $product_id, $args['new_order_role']);
foreach ($order_items as $item_index => $order_item) {
$item_meta = new WC_Order_Item_Meta($order_item['item_meta']);
// WC 2.0+ order item structure - as of WC 2.0 item_meta is stored as $key => meta pairs, not 'meta_name'/'meta_value'
if (function_exists('woocommerce_add_order_item_meta')) {
if ('child' == $args['new_order_role']) {
$renewal_order_item_name = sprintf(__('Renewal of "%s" purchased in Order %s', WC_Subscriptions::$text_domain), $order_item['name'], $original_order->get_order_number());
} else {
$renewal_order_item_name = $order_item['name'];
}
// Create order line item on the renewal order
$recurring_item_id = woocommerce_add_order_item($renewal_order_id, array('order_item_name' => $renewal_order_item_name, 'order_item_type' => 'line_item'));
// Remove recurring line items and set item totals based on recurring line totals
foreach ($item_meta->meta as $meta_key => $meta) {
// $meta is an array, so the item needs to be extracted from $meta[0] (just like order meta on a WC Order)
$meta_value = $meta[0];
// Map line item totals based on recurring line totals
switch ($meta_key) {
case '_recurring_line_total':
woocommerce_delete_order_item_meta($recurring_item_id, '_line_total');
woocommerce_add_order_item_meta($recurring_item_id, '_line_total', woocommerce_format_decimal($failed_payment_multiplier * $meta_value));
break;
case '_recurring_line_tax':
woocommerce_delete_order_item_meta($recurring_item_id, '_line_tax');
woocommerce_add_order_item_meta($recurring_item_id, '_line_tax', woocommerce_format_decimal($failed_payment_multiplier * $meta_value));
break;
case '_recurring_line_subtotal':
woocommerce_delete_order_item_meta($recurring_item_id, '_line_subtotal');
woocommerce_add_order_item_meta($recurring_item_id, '_line_subtotal', woocommerce_format_decimal($failed_payment_multiplier * $meta_value));
break;
case '_recurring_line_subtotal_tax':
woocommerce_delete_order_item_meta($recurring_item_id, '_line_subtotal_tax');
woocommerce_add_order_item_meta($recurring_item_id, '_line_subtotal_tax', woocommerce_format_decimal($failed_payment_multiplier * $meta_value));
break;
default:
break;
}
// Copy over line item meta data, with some parent/child role based exceptions for recurring amounts
$copy_to_renewal_item = true;
switch ($meta_key) {
case '_recurring_line_total':
case '_recurring_line_tax':
case '_recurring_line_subtotal':
case '_recurring_line_subtotal_tax':
case '_subscription_recurring_amount':
case '_subscription_sign_up_fee':
case '_subscription_period':
case '_subscription_interval':
case '_subscription_length':
case '_subscription_trial_period':
case '_subscription_end_date':
case '_subscription_expiry_date':
case '_subscription_start_date':
示例7: upgrade_database_to_1_2
//.........这里部分代码省略.........
// Doing it wrong: updated Subs *after* updating WooCommerce, need to store in WC2.0 tax structure
$index = 0;
$new_order_taxes = $order->get_taxes();
foreach ($new_order_taxes as $item_id => $order_tax) {
$index = $index + 1;
if (!isset($order_taxes[$index]['label']) || !isset($order_taxes[$index]['cart_tax']) || !isset($order_taxes[$index]['shipping_tax'])) {
continue;
}
// Add line item meta
if ($item_id) {
woocommerce_update_order_item_meta($item_id, 'compound', absint(isset($order_taxes[$index]['compound']) ? $order_taxes[$index]['compound'] : 0));
woocommerce_update_order_item_meta($item_id, 'tax_amount', woocommerce_clean($order_taxes[$index]['cart_tax']));
woocommerce_update_order_item_meta($item_id, 'shipping_tax_amount', woocommerce_clean($order_taxes[$index]['shipping_tax']));
}
}
}
/* Upgrade each order item to use new Item Meta schema */
$order_subscription_periods = WC_Subscriptions_Order::get_meta($order_id, '_order_subscription_periods', array());
$order_subscription_intervals = WC_Subscriptions_Order::get_meta($order_id, '_order_subscription_intervals', array());
$order_subscription_lengths = WC_Subscriptions_Order::get_meta($order_id, '_order_subscription_lengths', array());
$order_subscription_trial_lengths = WC_Subscriptions_Order::get_meta($order_id, '_order_subscription_trial_lengths', array());
$order_items = $order->get_items();
foreach ($order_items as $index => $order_item) {
$product_id = WC_Subscriptions_Order::get_items_product_id($order_item);
$item_meta = new WC_Order_Item_Meta($order_item['item_meta']);
$subscription_interval = isset($order_subscription_intervals[$product_id]) ? $order_subscription_intervals[$product_id] : 1;
$subscription_length = isset($order_subscription_lengths[$product_id]) ? $order_subscription_lengths[$product_id] : 0;
$subscription_trial_length = isset($order_subscription_trial_lengths[$product_id]) ? $order_subscription_trial_lengths[$product_id] : 0;
$subscription_sign_up_fee = WC_Subscriptions_Order::get_meta($order, '_cart_contents_sign_up_fee_total', 0);
if ($sign_up_fee_total > 0) {
// Discounted price * Quantity
$sign_up_fee_line_total = WC_Subscriptions_Order::get_meta($order, '_cart_contents_sign_up_fee_total', 0);
$sign_up_fee_line_tax = WC_Subscriptions_Order::get_meta($order, '_sign_up_fee_tax_total', 0);
// Base price * Quantity
$sign_up_fee_line_subtotal = WC_Subscriptions_Order::get_meta($order, '_cart_contents_sign_up_fee_total', 0) + WC_Subscriptions_Order::get_meta($order, '_sign_up_fee_discount_cart', 0);
$sign_up_fee_propotion = $sign_up_fee_line_total > 0 ? $sign_up_fee_line_subtotal / $sign_up_fee_line_total : 0;
$sign_up_fee_line_subtotal_tax = WC_Subscriptions_Manager::get_amount_from_proportion(WC_Subscriptions_Order::get_meta($order, '_sign_up_fee_tax_total', 0), $sign_up_fee_propotion);
if ($has_trial) {
// Set line item totals equal to sign up fee totals
$order_item['line_subtotal'] = $sign_up_fee_line_subtotal;
$order_item['line_subtotal_tax'] = $sign_up_fee_line_subtotal_tax;
$order_item['line_total'] = $sign_up_fee_line_total;
$order_item['line_tax'] = $sign_up_fee_line_tax;
} else {
// No trial period, sign up fees need to be added to order totals
$order_item['line_subtotal'] += $sign_up_fee_line_subtotal;
$order_item['line_subtotal_tax'] += $sign_up_fee_line_subtotal_tax;
$order_item['line_total'] += $sign_up_fee_line_total;
$order_item['line_tax'] += $sign_up_fee_line_tax;
}
}
// Upgrading with WC 1.x
if (method_exists($item_meta, 'add')) {
$item_meta->add('_subscription_period', $order_subscription_periods[$product_id]);
$item_meta->add('_subscription_interval', $subscription_interval);
$item_meta->add('_subscription_length', $subscription_length);
$item_meta->add('_subscription_trial_length', $subscription_trial_length);
$item_meta->add('_subscription_recurring_amount', $order_item['line_subtotal']);
// WC_Subscriptions_Product::get_price() would return a price without filters applied
$item_meta->add('_subscription_sign_up_fee', $subscription_sign_up_fee);
// Set recurring amounts for the item
$item_meta->add('_recurring_line_total', $order_item['line_total']);
$item_meta->add('_recurring_line_tax', $order_item['line_tax']);
$item_meta->add('_recurring_line_subtotal', $order_item['line_subtotal']);
$item_meta->add('_recurring_line_subtotal_tax', $order_item['line_subtotal_tax']);
$order_item['item_meta'] = $item_meta->meta;
$order_items[$index] = $order_item;
} else {
// Ignoring all advice, upgrading 4 months after version 1.2 was released, and doing it with WC 2.0 installed
woocommerce_add_order_item_meta($index, '_subscription_period', $order_subscription_periods[$product_id]);
woocommerce_add_order_item_meta($index, '_subscription_interval', $subscription_interval);
woocommerce_add_order_item_meta($index, '_subscription_length', $subscription_length);
woocommerce_add_order_item_meta($index, '_subscription_trial_length', $subscription_trial_length);
woocommerce_add_order_item_meta($index, '_subscription_trial_period', $order_subscription_periods[$product_id]);
woocommerce_add_order_item_meta($index, '_subscription_recurring_amount', $order_item['line_subtotal']);
woocommerce_add_order_item_meta($index, '_subscription_sign_up_fee', $subscription_sign_up_fee);
// Calculated recurring amounts for the item
woocommerce_add_order_item_meta($index, '_recurring_line_total', $order_item['line_total']);
woocommerce_add_order_item_meta($index, '_recurring_line_tax', $order_item['line_tax']);
woocommerce_add_order_item_meta($index, '_recurring_line_subtotal', $order_item['line_subtotal']);
woocommerce_add_order_item_meta($index, '_recurring_line_subtotal_tax', $order_item['line_subtotal_tax']);
if ($sign_up_fee_total > 0) {
// Order totals have changed
woocommerce_update_order_item_meta($index, '_line_subtotal', woocommerce_format_decimal($order_item['line_subtotal']));
woocommerce_update_order_item_meta($index, '_line_subtotal_tax', woocommerce_format_decimal($order_item['line_subtotal_tax']));
woocommerce_update_order_item_meta($index, '_line_total', woocommerce_format_decimal($order_item['line_total']));
woocommerce_update_order_item_meta($index, '_line_tax', woocommerce_format_decimal($order_item['line_tax']));
}
}
}
// Save the new meta on the order items for WC 1.x (the API functions already saved the data for WC2.x)
if (false == self::$is_wc_version_2) {
update_post_meta($order_id, '_order_items', $order_items);
}
$upgraded_orders[] = $order_id;
update_option('wcs_1_2_upgraded_order_ids', $upgraded_orders);
}
// Remove the lock on upgrading
delete_transient('wc_subscriptions_is_upgrading');
}
示例8: get_transaction_rate
/**
* Get transaction rate.
*
* @return float
*/
public function get_transaction_rate()
{
$rate = isset($this->gateway->transaction_rate) ? $this->gateway->transaction_rate : 7;
return woocommerce_format_decimal($rate);
}
示例9: process_checkout
//.........这里部分代码省略.........
// Action
do_action('woocommerce_created_customer', $user_id);
// send the user a confirmation and their login details
$mailer = $woocommerce->mailer();
$mailer->customer_new_account($user_id, $user_pass);
// set the WP login cookie
$secure_cookie = is_ssl() ? true : false;
wp_set_auth_cookie($user_id, true, $secure_cookie);
} else {
$woocommerce->add_error($reg_errors->get_error_message());
break;
}
}
// Create Order (send cart variable so we can record items and reduce inventory). Only create if this is a new order, not if the payment was rejected last time.
$_tax = new WC_Tax();
$order_data = array('post_type' => 'shop_order', 'post_title' => sprintf(__('Order – %s', 'woocommerce'), strftime(_x('%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce'))), 'post_status' => 'publish', 'ping_status' => 'closed', 'post_excerpt' => $this->posted['order_comments'], 'post_author' => 1, 'post_password' => uniqid('order_'));
// Cart items
$order_items = array();
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
// Store any item meta data - item meta class lets plugins add item meta in a standardized way
$item_meta = new WC_Order_Item_Meta();
$item_meta->new_order_item($values);
// Store variation data in meta so admin can view it
if ($values['variation'] && is_array($values['variation'])) {
foreach ($values['variation'] as $key => $value) {
$item_meta->add(esc_attr(str_replace('attribute_', '', $key)), $value);
}
}
// Store backorder status
if ($_product->backorders_require_notification() && $_product->is_on_backorder($values['quantity'])) {
$item_meta->add(__('Backordered', 'woocommerce'), $values['quantity'] - max(0, $_product->get_total_stock()));
}
$order_items[] = apply_filters('new_order_item', array('id' => $values['product_id'], 'variation_id' => $values['variation_id'], 'name' => $_product->get_title(), 'qty' => (int) $values['quantity'], 'item_meta' => $item_meta->meta, 'line_subtotal' => woocommerce_format_decimal($values['line_subtotal']), 'line_subtotal_tax' => woocommerce_format_decimal($values['line_subtotal_tax']), 'line_total' => woocommerce_format_decimal($values['line_total']), 'line_tax' => woocommerce_format_decimal($values['line_tax']), 'tax_class' => $_product->get_tax_class()), $values);
}
// Check order items for errors
do_action('woocommerce_check_new_order_items', $order_items);
if ($woocommerce->error_count() > 0) {
break;
}
// Insert or update the post data
$create_new_order = true;
if (isset($_SESSION['order_awaiting_payment']) && $_SESSION['order_awaiting_payment'] > 0) {
$order_id = (int) $_SESSION['order_awaiting_payment'];
/* Check order is unpaid by getting its status */
$terms = wp_get_object_terms($order_id, 'shop_order_status', array('fields' => 'slugs'));
$order_status = isset($terms[0]) ? $terms[0] : 'pending';
if ($order_status == 'pending') {
// Resume the unpaid order
$order_data['ID'] = $order_id;
wp_update_post($order_data);
do_action('woocommerce_resume_order', $order_id);
$create_new_order = false;
}
}
if ($create_new_order) {
$order_id = wp_insert_post($order_data);
if (is_wp_error($order_id)) {
$woocommerce->add_error('Error: Unable to create order. Please try again.');
break;
} else {
// Inserted successfully
do_action('woocommerce_new_order', $order_id);
}
}
// Get better formatted shipping method (title)
示例10: generate_renewal_order
//.........这里部分代码省略.........
$recurring_ratio = $recurring_shipping_item['cost'] / $original_shipping_item['cost'];
foreach ($original_shipping_item['taxes'] as $tax_id => $tax_amount) {
$original_shipping_item['taxes'][$tax_id] = $recurring_ratio * $tax_amount;
}
}
foreach ($original_shipping_item['taxes'] as $tax_id => $tax_amount) {
$taxes[$tax_id] = WC_Subscriptions::format_total($failed_payment_multiplier * $tax_amount);
}
}
}
woocommerce_add_order_item_meta($item_id, 'taxes', $taxes);
}
}
}
// Set line totals to be recurring line totals and remove the subscription/recurring related item meta from each order item
$order_items = WC_Subscriptions_Order::get_recurring_items($original_order);
// Allow extensions to add/remove items or item meta
$order_items = apply_filters('woocommerce_subscriptions_renewal_order_items', $order_items, $original_order->id, $renewal_order_id, $product_id, $args['new_order_role']);
if (true === $args['checkout_renewal']) {
$cart_items = $woocommerce->cart->get_cart();
}
foreach ($order_items as $item_index => $order_item) {
$renewal_order_item_name = apply_filters('woocommerce_subscriptions_renewal_order_item_name', $order_item['name'], $order_item, $original_order);
// Create order line item on the renewal order
$recurring_item_id = woocommerce_add_order_item($renewal_order_id, array('order_item_name' => $renewal_order_item_name, 'order_item_type' => 'line_item'));
if (true === $args['checkout_renewal']) {
$cart_item = array();
foreach ($cart_items as $item) {
if ($item['product_id'] == $order_item['product_id'] && (empty($order_item['variation_id']) || $item['variation_id'] == $order_item['variation_id'])) {
$cart_item = $item;
}
}
if (!empty($cart_item)) {
woocommerce_update_order_item_meta($recurring_item_id, '_line_total', woocommerce_format_decimal($cart_item['line_total']));
woocommerce_update_order_item_meta($recurring_item_id, '_line_tax', woocommerce_format_decimal($cart_item['line_tax']));
woocommerce_update_order_item_meta($recurring_item_id, '_line_subtotal', woocommerce_format_decimal($cart_item['line_subtotal']));
woocommerce_update_order_item_meta($recurring_item_id, '_line_subtotal_tax', woocommerce_format_decimal($cart_item['line_subtotal_tax']));
if (is_object($cart_item['data'])) {
woocommerce_update_order_item_meta($recurring_item_id, '_tax_class', $cart_item['data']->get_tax_class());
}
}
$cart_items = $woocommerce->cart->get_cart();
}
$item_meta = new WC_Order_Item_Meta($order_item['item_meta']);
// Remove recurring line items and set item totals based on recurring line totals
foreach ($item_meta->meta as $meta_key => $meta) {
// $meta is an array, so the item needs to be extracted from $meta[0] (just like order meta on a WC Order)
$meta_value = maybe_unserialize($meta[0]);
if (false === $args['checkout_renewal']) {
// Already set earlier
// Map line item totals based on recurring line totals
switch ($meta_key) {
case '_recurring_line_total':
woocommerce_update_order_item_meta($recurring_item_id, '_line_total', $failed_payment_multiplier * woocommerce_format_decimal($meta_value));
break;
case '_recurring_line_tax':
woocommerce_update_order_item_meta($recurring_item_id, '_line_tax', $failed_payment_multiplier * woocommerce_format_decimal($meta_value));
break;
case '_recurring_line_subtotal':
woocommerce_update_order_item_meta($recurring_item_id, '_line_subtotal', $failed_payment_multiplier * woocommerce_format_decimal($meta_value));
break;
case '_recurring_line_subtotal_tax':
woocommerce_update_order_item_meta($recurring_item_id, '_line_subtotal_tax', $failed_payment_multiplier * woocommerce_format_decimal($meta_value));
break;
case '_line_tax_data':
// Copy line tax data if the order doesn't have a _recurring_line_tax_data (for backward compatibility)
示例11: wc_format_decimal
/**
* Format decimal numbers ready for DB storage
*
* @param type $number
* @param type $dp
* @param type $trim_zeros
* @return type
*/
public static function wc_format_decimal($number, $dp = false, $trim_zeros = false)
{
if (self::is_wc_2_1()) {
return wc_format_decimal($number, $dp, $trim_zeros);
} else {
return woocommerce_format_decimal($number, $dp, $trim_zeros);
}
}