本文整理汇总了PHP中WC_Subscriptions_Manager::get_subscription方法的典型用法代码示例。如果您正苦于以下问题:PHP WC_Subscriptions_Manager::get_subscription方法的具体用法?PHP WC_Subscriptions_Manager::get_subscription怎么用?PHP WC_Subscriptions_Manager::get_subscription使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WC_Subscriptions_Manager
的用法示例。
在下文中一共展示了WC_Subscriptions_Manager::get_subscription方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: trigger
/**
* trigger function.
*
* @access public
* @return void
*/
function trigger($subscription_key)
{
global $woocommerce;
$this->subscription_key = $subscription_key;
$this->object = WC_Subscriptions_Manager::get_subscription($subscription_key);
if (!$this->is_enabled() || !$this->get_recipient()) {
return;
}
$this->send($this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments());
}
示例2: filter_woocommerce_my_account_my_orders_actions
/**
* Customise which actions are shown against a subscriptions order on the My Account page.
*
* @since 1.3
*/
public static function filter_woocommerce_my_account_my_orders_actions($actions, $order)
{
if (WC_Subscriptions_Order::order_contains_subscription($order) || WC_Subscriptions_Renewal_Order::is_renewal($order)) {
unset($actions['cancel']);
if (is_numeric(get_post_meta($order->id, '_failed_order_replaced_by', true))) {
unset($actions['pay']);
}
$original_order = WC_Subscriptions_Renewal_Order::get_parent_order($order);
$order_items = WC_Subscriptions_Order::get_recurring_items($original_order);
$first_order_item = reset($order_items);
$product_id = WC_Subscriptions_Order::get_items_product_id($first_order_item);
$subscription_key = WC_Subscriptions_Manager::get_subscription_key($original_order->id, $product_id);
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
if (empty($subscription) || !in_array($subscription['status'], array('on-hold', 'pending'))) {
unset($actions['pay']);
}
}
return $actions;
}
示例3: wc_subs_exporter_get_filtered_subscriptions
function wc_subs_exporter_get_filtered_subscriptions($export)
{
global $wpdb;
$subscriptions = $filtered_subscriptions = array();
$sql = "SELECT DISTINCT i.order_id, m.product_id, p.meta_value\n\t\t\t\tFROM\n\t\t\t\t(\n\t\t\t\tSELECT order_item_id,\n\t\t\t\tMAX(CASE WHEN meta_key = '_product_id' THEN meta_value END) product_id\n\t\t\t\tFROM {$wpdb->prefix}woocommerce_order_itemmeta\n\t\t\t\tWHERE meta_key LIKE '_subscription%' \n\t\t\t\t\tOR meta_key LIKE '_recurring%'\n\t\t\t\t\tOR meta_key = '_product_id'\n\t\t\t\tGROUP BY order_item_id\n\t\t\t\tHAVING MAX(meta_key LIKE '_subscription%')\n\t\t\t\t\t+ MAX(meta_key LIKE '_recurring%') > 0\n\t\t\t\t) m JOIN {$wpdb->prefix}woocommerce_order_items i \n\t\t\t\tON m.order_item_id = i.order_item_id \n\t\t\t\tLEFT JOIN {$wpdb->prefix}postmeta p \n\t\t\t\tON i.order_id = p.post_id \n\t\t\t\tAND p.meta_key = '_customer_user'\n\t\t\t\tLEFT JOIN {$wpdb->prefix}posts po \n\t\t\t\tON p.post_id = po.ID\n\t\t\t\tWHERE po.post_type = 'shop_order' AND po.post_parent = 0";
$order_ids_and_product_ids = $wpdb->get_results($sql);
foreach ($order_ids_and_product_ids as $order_id_and_product_id) {
if (empty($order_id_and_product_id->product_id)) {
continue;
}
$subscription_key = $order_id_and_product_id->order_id . '_' . $order_id_and_product_id->product_id;
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
if (empty($subscription)) {
continue;
}
// filter status
if (!array_key_exists($subscription['status'], $export->status)) {
continue;
}
// filter dates
if ($export->dates_from && strtotime($subscription['start_date']) < strtotime($export->dates_from)) {
continue;
} elseif ($export->dates_to && strtotime($subscription['start_date']) > strtotime($export->dates_to)) {
continue;
}
$subscriptions[$order_id_and_product_id->meta_value][$subscription_key] = $subscription;
}
$processed_rows = 0;
foreach ($subscriptions as $user => $user_subscriptions) {
if (++$processed_rows <= $export->offset) {
continue;
}
foreach ($user_subscriptions as $key => $subscription) {
$filtered_subscriptions[$user][$key] = $subscription;
}
if ($processed_rows == $export->limit_volume) {
break;
}
}
return $filtered_subscriptions;
}
示例4: maybe_replace_pay_shortcode
/**
* If requesting a payment method change, replace the woocommerce_pay_shortcode() with a change payment form.
*
* @since 1.4
*/
public static function maybe_replace_pay_shortcode()
{
global $woocommerce;
if (!self::$is_request_to_change_payment) {
return;
}
ob_clean();
do_action('before_woocommerce_pay');
echo '<div class="woocommerce">';
if (!empty(self::$woocommerce_errors)) {
foreach (self::$woocommerce_errors as $error) {
WC_Subscriptions::add_notice($error, 'error');
}
}
if (!empty(self::$woocommerce_messages)) {
foreach (self::$woocommerce_messages as $message) {
WC_Subscriptions::add_notice($message, 'success');
}
}
$subscription_key = $_GET['change_payment_method'];
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
if (wp_verify_nonce($_GET['_wpnonce'], __FILE__) === false) {
WC_Subscriptions::add_notice(__('There was an error with your request. Please try again.', 'woocommerce-subscriptions'), 'error');
WC_Subscriptions::print_notices();
} elseif (!WC_Subscriptions_Manager::user_owns_subscription($subscription_key)) {
WC_Subscriptions::add_notice(__('That doesn\'t appear to be one of your subscriptions.', 'woocommerce-subscriptions'), 'error');
WC_Subscriptions::print_notices();
} elseif (empty($subscription)) {
WC_Subscriptions::add_notice(__('Invalid subscription.', 'woocommerce-subscriptions'), 'error');
WC_Subscriptions::print_notices();
} elseif (!WC_Subscriptions_Manager::can_subscription_be_changed_to('new-payment-method', $subscription_key, get_current_user_id())) {
WC_Subscriptions::add_notice(__('The payment method can not be changed for that subscription.', 'woocommerce-subscriptions'), 'error');
WC_Subscriptions::print_notices();
} else {
$order = new WC_Order($subscription['order_id']);
$order_id = absint($_GET['order_id']);
$order_key = isset($_GET['key']) ? $_GET['key'] : $_GET['order'];
$product_id = $subscription['product_id'];
$next_payment_timestamp = WC_Subscriptions_Order::get_next_payment_timestamp($order, $product_id);
if (!empty($next_payment_timestamp)) {
$next_payment_string = sprintf(__(' Next payment is due %s.', 'woocommerce-subscriptions'), date_i18n(woocommerce_date_format(), $next_payment_timestamp));
} else {
$next_payment_string = '';
}
WC_Subscriptions::add_notice(sprintf(__('Choose a new payment method.%s', 'woocommerce-subscriptions'), $next_payment_string), 'notice');
WC_Subscriptions::print_notices();
if ($order->order_key == $order_key) {
// Set customer location to order location
if ($order->billing_country) {
$woocommerce->customer->set_country($order->billing_country);
}
if ($order->billing_state) {
$woocommerce->customer->set_state($order->billing_state);
}
if ($order->billing_postcode) {
$woocommerce->customer->set_postcode($order->billing_postcode);
}
// Show form
WC_Subscriptions_Order::$recurring_only_price_strings = true;
woocommerce_get_template('checkout/form-change-payment-method.php', array('order' => $order, 'subscription_key' => $subscription_key), '', plugin_dir_path(WC_Subscriptions::$plugin_file) . 'templates/');
WC_Subscriptions_Order::$recurring_only_price_strings = false;
} else {
WC_Subscriptions::add_notice(__('Invalid order.', 'woocommerce-subscriptions'), 'error');
WC_Subscriptions::print_notices();
}
}
}
开发者ID:jgabrielfreitas,项目名称:MultipagosTestesAPP,代码行数:72,代码来源:class-wc-subscriptions-change-payment-gateway.php
示例5: get_first_payment_date
/**
* Make sure anything requesting the first payment date for a synced subscription on the front-end receives
* a date which takes into account the day on which payments should be processed.
*
* This is necessary as the self::calculate_first_payment_date() is not called when the subscription is active
* (which it isn't until the first payment is completed and the subscription is activated).
*
* @since 1.5
*/
public static function get_first_payment_date($first_payment_date, $order, $product_id, $type)
{
$subscription_key = WC_Subscriptions_Manager::get_subscription_key($order->id, $product_id);
if (self::order_contains_synced_subscription($order->id) && 1 >= WC_Subscriptions_Manager::get_subscriptions_completed_payment_count($subscription_key)) {
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
// Don't prematurely set the first payment date when manually adding a subscription from the admin
if (defined('WOOCOMMERCE_CHECKOUT') && true === WOOCOMMERCE_CHECKOUT || !is_admin() || 'active' == $subscription['status']) {
$id_for_calculation = !empty($subscription['variation_id']) ? $subscription['variation_id'] : $subscription['product_id'];
$first_payment_timestamp = self::calculate_first_payment_date($id_for_calculation, 'timestamp', $order->order_date);
if (0 != $first_payment_timestamp) {
$first_payment_date = 'mysql' == $type ? date('Y-m-d H:i:s', $first_payment_timestamp) : $first_payment_timestamp;
}
}
}
return $first_payment_date;
}
示例6: get_all_users_subscriptions
/**
* Gets all the active and inactive subscriptions for all users.
*
* @return array An associative array containing all users with subscriptions and the details of their subscriptions: 'user_id' => $subscriptions
* @since 1.0
*/
public static function get_all_users_subscriptions()
{
global $wpdb;
$subscriptions = array();
$sql = "SELECT DISTINCT i.order_id, m.product_id, p.meta_value\n\t\t\t\tFROM\n\t\t\t\t(\n\t\t\t\tSELECT order_item_id,\n\t\t\t\tMAX(CASE WHEN meta_key = '_product_id' THEN meta_value END) product_id\n\t\t\t\tFROM {$wpdb->prefix}woocommerce_order_itemmeta\n\t\t\t\tWHERE meta_key LIKE '_subscription%' \n\t\t\t\t\tOR meta_key LIKE '_recurring%'\n\t\t\t\t\tOR meta_key = '_product_id'\n\t\t\t\tGROUP BY order_item_id\n\t\t\t\tHAVING MAX(meta_key LIKE '_subscription%')\n\t\t\t\t\t+ MAX(meta_key LIKE '_recurring%') > 0\n\t\t\t\t) m JOIN {$wpdb->prefix}woocommerce_order_items i \n\t\t\t\tON m.order_item_id = i.order_item_id \n\t\t\t\tLEFT JOIN {$wpdb->prefix}postmeta p \n\t\t\t\tON i.order_id = p.post_id \n\t\t\t\tAND p.meta_key = '_customer_user'\n\t\t\t\tLEFT JOIN {$wpdb->prefix}posts po \n\t\t\t\tON p.post_id = po.ID\n\t\t\t\tWHERE po.post_type = 'shop_order' AND po.post_parent = 0";
$order_ids_and_product_ids = $wpdb->get_results($sql);
foreach ($order_ids_and_product_ids as $order_id_and_product_id) {
if (empty($order_id_and_product_id->product_id)) {
continue;
}
$subscription_key = $order_id_and_product_id->order_id . '_' . $order_id_and_product_id->product_id;
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key);
$subscriptions[$order_id_and_product_id->meta_value][$subscription_key] = $subscription;
}
return apply_filters('woocommerce_all_users_subscriptions', $subscriptions);
}
示例7: get_user_membership_subscription
/**
* Get the subscription for a membership
*
* @since 1.0.0
* @param int $user_membership_id User Membership ID
* @return array|null Subscription or null, if not found
*/
public function get_user_membership_subscription($user_membership_id)
{
// 2.0 onwards
if ($this->is_subscriptions_gte_2_0()) {
$subscription_id = $this->get_user_membership_subscription_id($user_membership_id);
if (!$subscription_id) {
return null;
}
return wcs_get_subscription($subscription_id);
} else {
$subscription_key = $this->get_user_membership_subscription_key($user_membership_id);
if (!$subscription_key) {
return null;
}
$user_membership = wc_memberships_get_user_membership($user_membership_id);
// It seems that the order has been deleted
if (false === get_post_status($user_membership->get_order_id())) {
return null;
}
// It seems the subscription product has been removed from the order
if (!WC_Subscriptions_Order::get_item_id_by_subscription_key($subscription_key)) {
return null;
}
return WC_Subscriptions_Manager::get_subscription($subscription_key);
}
}
开发者ID:eugene-gromky-co,项目名称:mindfulnesssummit,代码行数:33,代码来源:class-wc-memberships-integration-subscriptions.php
示例8: can_subscription_be_renewed
/**
* Check if a given subscription can be renewed.
*
* For a subscription to be renewable, it must be inactive (expired or cancelled) and its parent order
* must not have already been superseded by a renewal order. This last part is mainly just to prevent
* displaying "Renew" links on subscriptions that have already been renewed.
*
* @param $subscription_key string A subscription key of the form created by @see self::get_subscription_key()
* @param $user_id int The ID of the user who owns the subscriptions. Although this parameter is optional, if you have the User ID you should pass it to improve performance.
* @since 1.2
*/
public static function can_subscription_be_renewed($subscription_key, $user_id = '')
{
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key, $user_id);
if (empty($subscription)) {
$subscription_can_be_renewed = false;
} else {
$renewal_orders = get_posts(array('meta_key' => '_original_order', 'meta_value' => $subscription['order_id'], 'post_type' => 'shop_order', 'post_parent' => 0));
if (empty($renewal_orders) && in_array($subscription['status'], array('cancelled', 'expired', 'trash', 'failed'))) {
$subscription_can_be_renewed = true;
} else {
$subscription_can_be_renewed = false;
}
}
return apply_filters('woocommerce_can_subscription_be_renewed', $subscription_can_be_renewed, $subscription, $subscription_key, $user_id);
}
示例9: maybe_update_subscription_order_addresses
public function maybe_update_subscription_order_addresses($user_id, $load_address)
{
global $woocommerce, $wp;
if (!WC_Subscriptions_Manager::user_has_subscription($user_id)) {
return;
}
if ($load_address != 'shipping') {
return;
}
$subscription_ids = array();
if (isset($_POST['update_all_subscriptions_addresses'])) {
$users_subscriptions = WC_Subscriptions_Manager::get_users_subscriptions($user_id);
foreach ($users_subscriptions as $subscription) {
array_push($subscription_ids, $subscription['order_id']);
}
} elseif (isset($_POST['update_subscription_address'])) {
$subscription = WC_Subscriptions_Manager::get_subscription($_POST['update_subscription_address']);
// Update the address only if the user actually owns the subscription
if (!empty($subscription)) {
array_push($subscription_ids, $subscription['order_id']);
}
}
if (count($subscription_ids) > 0) {
$base_order = $order = wc_get_order($subscription_ids[0]);
$args = array('numberposts' => -1, 'post_type' => 'shop_order', 'post_status' => 'publish', 'tax_query' => array(array('taxonomy' => 'shop_order_status', 'field' => 'slug', 'terms' => array('processing'))), 'meta_query' => array(array('key' => '_customer_user', 'value' => $user_id), array('key' => '_original_order', 'value' => $subscription_ids)));
$posts = get_posts($args);
$address = array('first_name' => $base_order->shipping_first_name, 'last_name' => $base_order->shipping_last_name, 'address_1' => $base_order->shipping_address_1, 'address_2' => $base_order->shipping_address_2, 'city' => $base_order->shipping_city, 'state' => $base_order->shipping_state, 'postcode' => $base_order->shipping_postcode, 'country' => $base_order->shipping_country);
foreach ($posts as $post) {
$order = wc_get_order($post->ID);
$order->set_address($address, 'shipping');
}
}
}
开发者ID:whatthefork,项目名称:woocommerce-fedex-shipping-labels,代码行数:33,代码来源:woocommerce-fedex-shipping-labels.php
示例10: sensei_customer_bought_product
/**
* Checks if a user (by email) has bought an item.
* @access public
* @since 1.0.0
* @param string $customer_email
* @param int $user_id
* @param int $product_id
* @return bool
*/
public static function sensei_customer_bought_product($customer_email, $user_id, $product_id)
{
global $wpdb;
$emails = array();
if ($user_id) {
$user = get_user_by('id', intval($user_id));
$emails[] = $user->user_email;
}
if (is_email($customer_email)) {
$emails[] = $customer_email;
}
if (sizeof($emails) == 0) {
return false;
}
$orders = get_posts(array('posts_per_page' => -1, 'meta_key' => '_customer_user', 'meta_value' => intval($user_id), 'post_type' => 'shop_order', 'post_status' => array('wc-processing', 'wc-completed')));
foreach ($orders as $order_id) {
$order = new WC_Order($order_id->ID);
if ($order->post_status == 'wc-completed') {
if (0 < sizeof($order->get_items())) {
foreach ($order->get_items() as $item) {
// Allow product ID to be filtered
$product_id = apply_filters('sensei_bought_product_id', $product_id, $order);
// Check if user has bought product
if ($item['product_id'] == $product_id || $item['variation_id'] == $product_id) {
// Check if user has an active subscription for product
if (class_exists('WC_Subscriptions_Manager')) {
$sub_key = WC_Subscriptions_Manager::get_subscription_key($order_id->ID, $product_id);
if ($sub_key) {
$sub = WC_Subscriptions_Manager::get_subscription($sub_key);
if ($sub && isset($sub['status'])) {
if ('active' == $sub['status']) {
return true;
} else {
return false;
}
}
}
}
// Customer has bought product
return true;
}
// End If Statement
}
// End For Loop
}
// End If Statement
}
// End If Statement
}
// End For Loop
}
示例11: maybe_record_order_payment
/**
* Records the initial payment against a subscription.
*
* This function is called when a gateway calls @see WC_Order::payment_complete() and payment
* is completed on an order. It is also called when an orders status is changed to completed or
* processing for those gateways which never call @see WC_Order::payment_complete(), like the
* core WooCommerce Cheque and Bank Transfer gateways.
*
* @param $order WC_Order | int A WC_Order object or ID of a WC_Order order.
* @since 1.1.2
*/
public static function maybe_record_order_payment($order)
{
if (!is_object($order)) {
$order = new WC_Order($order);
}
$subscriptions_in_order = self::get_recurring_items($order);
foreach ($subscriptions_in_order as $subscription_item) {
$subscription_key = WC_Subscriptions_Manager::get_subscription_key($order->id, $subscription_item['id']);
$subscription = WC_Subscriptions_Manager::get_subscription($subscription_key, $order->customer_user);
// No payments have been recorded yet
if (empty($subscription['completed_payments'])) {
// Don't duplicate orders
remove_action('processed_subscription_payment', 'WC_Subscriptions_Renewal_Order::generate_paid_renewal_order', 10, 2);
WC_Subscriptions_Manager::process_subscription_payments_on_order($order->id);
WC_Subscriptions_Manager::safeguard_scheduled_payments($order->customer_user, $subscription_key);
// Make sure orders are still generated for other payments in the same request
add_action('processed_subscription_payment', 'WC_Subscriptions_Renewal_Order::generate_paid_renewal_order', 10, 2);
}
}
}
示例12: maybe_update_subscription_addresses
/**
* When a subscriber's billing or shipping address is successfully updated, check if the subscriber
* has also requested to update the addresses on existing subscriptions and if so, go ahead and update
* the addresses on the initial order for each subscription.
*
* @param int $user_id The ID of a user who own's the subscription (and address)
* @since 1.3
*/
public static function maybe_update_subscription_addresses($user_id)
{
global $woocommerce;
if (!WC_Subscriptions_Manager::user_has_subscription($user_id) || !isset($_GET['address'])) {
return;
}
$load_address = isset($_GET['address']) ? esc_attr($_GET['address']) : '';
$load_address = $load_address == 'billing' || $load_address == 'shipping' ? $load_address : '';
$address_fields = $woocommerce->countries->get_address_fields(esc_attr($_POST[$load_address . '_country']), $load_address . '_');
if (isset($_POST['update_all_subscriptions_addresses'])) {
$users_subscriptions = WC_Subscriptions_Manager::get_users_subscriptions($user_id);
foreach ($users_subscriptions as $subscription) {
self::maybe_update_order_address($subscription, $address_fields);
}
} elseif (isset($_POST['update_subscription_address'])) {
$subscription = WC_Subscriptions_Manager::get_subscription($_POST['update_subscription_address']);
// Update the address only if the user actually owns the subscription
if (!empty($subscription)) {
self::maybe_update_order_address($subscription, $address_fields);
}
}
}
示例13: ps_do_this_daily
/**
* On the scheduled action hook, run the function.
*/
function ps_do_this_daily()
{
global $wpdb;
// if(date('l') == "Saturday") { // Cron run daily but execute only in sunday
$allUser = $wpdb->get_results('SELECT * FROM wp_users WHERE 1;');
// if(date('l') != "Tuesday" || date('l') != "Wednesday")
$nxtTues = date_i18n('Ymd', strtotime('next tuesday'));
// Get the Next Tuesday to run cron
/* else
$nxtTues = date('Ymd', strtotime('next tuesday')); // Get the Next Tuesday to run cron*/
//$nxtTues = $nxtTues + 7;
$wsm = new WC_Subscriptions_Manager();
foreach ($allUser as $auK => $auV) {
$userID = $auV->ID;
$parmanent_cancel_delivery = get_user_meta($userID, 'permanent_pause', true);
if (empty($parmanent_cancel_delivery)) {
$susPendedData = get_user_meta($userID, 'suspended', false);
$cur_user_subscription = get_user_meta($userID, 'wp_woocommerce_subscriptions', true);
foreach ($cur_user_subscription as $suk => $suv) {
//$subscriptionID = $suv['order_id'] . '_' . $suv['product_id'];
$subscriptionID = $suk;
break;
/* use because one time subscription */
}
if (in_array($nxtTues, $susPendedData)) {
$wsm->put_subscription_on_hold($userID, $subscriptionID);
} else {
$s = WC_Subscriptions_Manager::get_subscription($subscriptionID, $userID);
if (!empty($s['status']) && $s['status'] == 'on-hold') {
$wsm->reactivate_subscription($userID, $subscriptionID);
}
}
wp_mail('biswajitghosh.mail@gmail.com', 'The subject', 'nxtTues=>' . $nxtTues . "susPendedData=>" . json_encode($cur_user_subscription) . "u=>" . $userID);
}
}
// }
}
示例14: get_builder_display
//.........这里部分代码省略.........
}
}
$variations_builder_element_start_args = array();
$tm_validation = $this->get_tm_validation_rules($element);
$args = array('tm_element_settings' => $element, 'column' => $size, 'class' => !empty($element['class']) ? $element['class'] : "", 'title_size' => $label_size, 'title' => !empty($element['label']) ? $element['label'] : "", 'title_position' => !empty($element['label_position']) ? $element['label_position'] : "", 'title_color' => !empty($element['label_color']) ? $element['label_color'] : "", 'description' => !empty($element['description']) ? $element['description'] : "", 'description_color' => !empty($element['description_color']) ? $element['description_color'] : "", 'description_position' => !empty($element['description_position']) ? $element['description_position'] : "", 'divider' => $divider, 'required' => $element['required'], 'type' => $element['type'], 'use_images' => $element['use_images'], 'use_url' => $element['use_url'], 'rules' => $empty_rules, 'rules_type' => $empty_rules_type, 'element' => $element['type'], 'class_id' => "tm-element-ul-" . $element['type'] . " element_" . $element_counter . $form_prefix, 'uniqid' => $element['uniqid'], 'logic' => esc_html(json_encode((array) json_decode($element['clogic']))), 'haslogic' => $element['logic'], 'clear_options' => empty($element['clear_options']) ? "" : $element['clear_options'], 'exactlimit' => empty($element['exactlimit']) ? "" : 'tm-exactlimit', 'minimumlimit' => empty($element['minimumlimit']) ? "" : 'tm-minimumlimit', 'tm_validation' => esc_html(json_encode($tm_validation)));
if ($element['type'] != "variations") {
wc_get_template('tm-builder-element-start.php', $args, $this->_namespace, $this->template_path);
} else {
$variations_builder_element_start_args = $args;
}
$field_counter = 0;
$init_class = "TM_EPO_FIELDS_" . $element['type'];
if (!class_exists($init_class) && !empty($this->tm_builder_elements[$element['type']]["_is_addon"])) {
$init_class = "TM_EPO_FIELDS";
}
if (isset($this->tm_builder_elements[$element['type']]) && ($this->tm_builder_elements[$element['type']]["is_post"] == "post" || $this->tm_builder_elements[$element['type']]["is_post"] == "display") && class_exists($init_class)) {
$field_obj = new $init_class();
if ($this->tm_builder_elements[$element['type']]["is_post"] == "post") {
if ($this->tm_builder_elements[$element['type']]["type"] == "single" || $this->tm_builder_elements[$element['type']]["type"] == "multiplesingle") {
$tabindex++;
$name_inc = $this->tm_builder_elements[$element['type']]["post_name_prefix"] . "_" . $element_counter . $form_prefix;
if ($this->tm_builder_elements[$element['type']]["type"] == "single") {
$is_fee = !empty($element['rules_type']) && $element['rules_type'][0][0] == "subscriptionfee";
$is_cart_fee = !empty($element['rules_type']) && isset($element['rules_type'][0]) && isset($element['rules_type'][0][0]) && $element['rules_type'][0][0] == "fee";
} elseif ($this->tm_builder_elements[$element['type']]["type"] == "multiplesingle") {
$is_fee = !empty($element['selectbox_fee']) && $element['selectbox_fee'][0][0] == "subscriptionfee";
$is_cart_fee = !empty($element['selectbox_cart_fee']) && $element['selectbox_cart_fee'][0][0] == "fee";
}
if ($is_fee) {
$name_inc = $fee_name . $name_inc;
} elseif ($is_cart_fee) {
$name_inc = $cart_fee_name . $name_inc;
}
if (isset($_GET['switch-subscription']) && (function_exists('wcs_get_subscription') || class_exists('WC_Subscriptions_Manager') && class_exists('WC_Subscriptions_Order'))) {
$item = false;
if (function_exists('wcs_get_subscription')) {
$subscription = wcs_get_subscription($_GET['switch-subscription']);
if ($subscription instanceof WC_Subscription) {
$original_order = new WC_Order($subscription->order->id);
$item = WC_Subscriptions_Order::get_item_by_product_id($original_order, $subscription->id);
}
} else {
$subscription = WC_Subscriptions_Manager::get_subscription($_GET['switch-subscription']);
$original_order = new WC_Order($subscription['order_id']);
$item = WC_Subscriptions_Order::get_item_by_product_id($original_order, $subscription['product_id']);
}
if ($item) {
$saved_data = maybe_unserialize($item["item_meta"]["_tmcartepo_data"][0]);
foreach ($saved_data as $key => $val) {
if (isset($val["key"])) {
if ($element['uniqid'] == $val["section"]) {
$_GET['tmcp_' . $name_inc] = $val["key"];
if (isset($val['quantity'])) {
$_GET['tmcp_' . $name_inc . '_quantity'] = $val['quantity'];
}
}
} else {
if ($element['uniqid'] == $val["section"]) {
$_GET['tmcp_' . $name_inc] = $val["value"];
if (isset($val['quantity'])) {
$_GET['tmcp_' . $name_inc . '_quantity'] = $val['quantity'];
}
}
}
}
}
示例15: get_valid_order_ids_granting_group_membership_from_order_items
/**
* Returns an array of order IDs for valid orders that grant group
* membership for the given group to the user related to the order.
*
* @param int $user_id
* @param int $group_id
* @return array of int, order IDs
*/
public static function get_valid_order_ids_granting_group_membership_from_order_items($user_id, $group_id)
{
$order_ids = array();
if (!empty($user_id)) {
$base_statuses = array('processing', 'completed');
$statuses = array('completed');
$options = get_option('groups-woocommerce', array());
$order_status = isset($options[GROUPS_WS_MEMBERSHIP_ORDER_STATUS]) ? $options[GROUPS_WS_MEMBERSHIP_ORDER_STATUS] : GROUPS_WS_DEFAULT_MEMBERSHIP_ORDER_STATUS;
if ($order_status == 'processing') {
$statuses[] = 'processing';
}
// DO NOT use groups_ws_order_status( $statuses ) for $statuses or $base_statuses here,
// $order->status doesn't provide the wc- prefix.
$groups_product_groups = get_user_meta($user_id, '_groups_product_groups', true);
if (empty($groups_product_groups)) {
$groups_product_groups = array();
}
foreach ($groups_product_groups as $order_id => $product_ids) {
if ($order = Groups_WS_Helper::get_order($order_id)) {
// If this is a completed/processing order, consider group assignments.
// We check the order status for non-subscription products below,
// for subscriptions the subscription status is checked.
if (in_array($order->status, $base_statuses)) {
// Note that for orders placed with versions up to 1.4.1, the following won't give the results we might expect if the product group-related information has changed since the order was placed.
// As we don't store that information (WC doesn't store the whole lot of the product when purchased, nor does GW) checking the duration based on the product is the best effort at
// finding out about the group membership duration we can make.
// Use the order items (only existing order items are taken into account).
if ($items = $order->get_items()) {
foreach ($items as $item) {
if ($product = $order->get_product_from_item($item)) {
// Use the groups that were stored for the product when it was ordered,
// this avoids hickups when the product's groups were changed since.
if (isset($product_ids[$product->id]) && isset($product_ids[$product->id]['groups'])) {
$product_groups = $product_ids[$product->id]['groups'];
if (in_array($group_id, $product_groups)) {
// non-subscriptions
if (!class_exists('WC_Subscriptions_Product') || !WC_Subscriptions_Product::is_subscription($product->id)) {
if (in_array($order->status, $statuses)) {
if (isset($product_ids[$product->id]) && isset($product_ids[$product->id]['version'])) {
$has_duration = isset($product_ids[$product->id]['duration']) && $product_ids[$product->id]['duration'] && isset($product_ids[$product->id]['duration_uom']);
} else {
$has_duration = Groups_WS_Product::has_duration($product);
}
// unlimited membership
if (!$has_duration) {
if (!in_array($order_id, $order_ids)) {
$order_ids[] = $order_id;
}
} else {
if (isset($product_ids[$product->id]) && isset($product_ids[$product->id]['version'])) {
$duration = Groups_WS_Product::calculate_duration($product_ids[$product->id]['duration'], $product_ids[$product->id]['duration_uom']);
} else {
// <= 1.4.1
$duration = Groups_WS_Product::get_duration($product);
}
// time-limited membership
if ($duration) {
$start_date = $order->order_date;
if ($paid_date = get_post_meta($order_id, '_paid_date', true)) {
$start_date = $paid_date;
}
$end = strtotime($start_date) + $duration;
if (time() < $end) {
if (!in_array($order_id, $order_ids)) {
$order_ids[] = $order_id;
}
}
}
}
}
} else {
// include active subscriptions ( subscriptions >= 2.x )
if (function_exists('wcs_get_subscriptions_for_order')) {
if ($subscriptions = wcs_get_subscriptions_for_order($order_id)) {
if (is_array($subscriptions)) {
foreach ($subscriptions as $subscription) {
if ($subscription->has_product($product->id)) {
$valid = false;
if ($subscription->get_status() == 'active') {
$valid = true;
} else {
if ($subscription->get_status() == 'cancelled') {
$hook_args = array('subscription_id' => $subscription->id);
$end_timestamp = wp_next_scheduled('scheduled_subscription_end_of_prepaid_term', $hook_args);
if ($end_timestamp !== false && $end_timestamp > time()) {
$valid = true;
}
}
}
if ($valid) {
if (!in_array($order_id, $order_ids)) {
$order_ids[] = $order_id;
//.........这里部分代码省略.........