<?php defined('ABSPATH') || exit; function wc_lostpassword_url($default_url = '') { if (!did_action('init')) { return $default_url; } if (is_multisite() && isset($_GET['redirect_to']) && false !== strpos(wp_unslash($_GET['redirect_to']), network_admin_url())) { return $default_url; } $wc_account_page_url = wc_get_page_permalink('myaccount'); $wc_account_page_exists = wc_get_page_id('myaccount') > 0; $lost_password_endpoint = get_option('woocommerce_myaccount_lost_password_endpoint'); if ($wc_account_page_exists && !empty($lost_password_endpoint)) { return wc_get_endpoint_url($lost_password_endpoint, '', $wc_account_page_url); } else { return $default_url; } } add_filter('lostpassword_url', 'wc_lostpassword_url', 10, 1); function wc_customer_edit_account_url() { $edit_account_url = wc_get_endpoint_url('edit-account', '', wc_get_page_permalink('myaccount')); return apply_filters('woocommerce_customer_edit_account_url', $edit_account_url); } function wc_edit_address_i18n($id, $flip = false) { $slugs = apply_filters('woocommerce_edit_address_slugs', array('billing' => sanitize_title(_x('billing', 'edit-address-slug', 'woocommerce')), 'shipping' => sanitize_title(_x('shipping', 'edit-address-slug', 'woocommerce')))); if ($flip) { $slugs = array_flip($slugs); } if (!isset($slugs[$id])) { return $id; } return $slugs[$id]; } function wc_get_account_menu_items() { $endpoints = array('orders' => get_option('woocommerce_myaccount_orders_endpoint', 'orders'), 'downloads' => get_option('woocommerce_myaccount_downloads_endpoint', 'downloads'), 'edit-address' => get_option('woocommerce_myaccount_edit_address_endpoint', 'edit-address'), 'payment-methods' => get_option('woocommerce_myaccount_payment_methods_endpoint', 'payment-methods'), 'edit-account' => get_option('woocommerce_myaccount_edit_account_endpoint', 'edit-account'), 'customer-logout' => get_option('woocommerce_logout_endpoint', 'customer-logout')); $items = array('dashboard' => __('Dashboard', 'woocommerce'), 'orders' => __('Orders', 'woocommerce'), 'downloads' => __('Downloads', 'woocommerce'), 'edit-address' => _n('Addresses', 'Address', (int) wc_shipping_enabled(), 'woocommerce'), 'payment-methods' => __('Payment methods', 'woocommerce'), 'edit-account' => __('Account details', 'woocommerce'), 'customer-logout' => __('Logout', 'woocommerce')); foreach ($endpoints as $endpoint_id => $endpoint) { if (empty($endpoint)) { unset($items[$endpoint_id]); } } if (isset($items['payment-methods'])) { $support_payment_methods = false; foreach (WC()->payment_gateways->get_available_payment_gateways() as $gateway) { if ($gateway->supports('add_payment_method') || $gateway->supports('tokenization')) { $support_payment_methods = true; break; } } if (!$support_payment_methods) { unset($items['payment-methods']); } } return apply_filters('woocommerce_account_menu_items', $items, $endpoints); } function wc_get_account_menu_item_classes($endpoint) { global $wp; $classes = array('woocommerce-MyAccount-navigation-link', 'woocommerce-MyAccount-navigation-link--' . $endpoint); $current = isset($wp->query_vars[$endpoint]); if ('dashboard' === $endpoint && (isset($wp->query_vars['page']) || empty($wp->query_vars))) { $current = true; } elseif ('orders' === $endpoint && isset($wp->query_vars['view-order'])) { $current = true; } elseif ('payment-methods' === $endpoint && isset($wp->query_vars['add-payment-method'])) { $current = true; } if ($current) { $classes[] = 'is-active'; } $classes = apply_filters('woocommerce_account_menu_item_classes', $classes, $endpoint); return implode(' ', array_map('sanitize_html_class', $classes)); } function wc_get_account_endpoint_url($endpoint) { if ('dashboard' === $endpoint) { return wc_get_page_permalink('myaccount'); } if ('customer-logout' === $endpoint) { return wc_logout_url(); } return wc_get_endpoint_url($endpoint, '', wc_get_page_permalink('myaccount')); } function wc_get_account_orders_columns() { $columns = apply_filters('woocommerce_account_orders_columns', array('order-number' => __('Order', 'woocommerce'), 'order-date' => __('Date', 'woocommerce'), 'order-status' => __('Status', 'woocommerce'), 'order-total' => __('Total', 'woocommerce'), 'order-actions' => __('Actions', 'woocommerce'))); return apply_filters('woocommerce_my_account_my_orders_columns', $columns); } function wc_get_account_downloads_columns() { $columns = apply_filters('woocommerce_account_downloads_columns', array('download-product' => __('Product', 'woocommerce'), 'download-remaining' => __('Downloads remaining', 'woocommerce'), 'download-expires' => __('Expires', 'woocommerce'), 'download-file' => __('Download', 'woocommerce'), 'download-actions' => '&nbsp;')); if (!has_filter('woocommerce_account_download_actions')) { unset($columns['download-actions']); } return $columns; } function wc_get_account_payment_methods_columns() { return apply_filters('woocommerce_account_payment_methods_columns', array('method' => __('Method', 'woocommerce'), 'expires' => __('Expires', 'woocommerce'), 'actions' => '&nbsp;')); } function wc_get_account_payment_methods_types() { return apply_filters('woocommerce_payment_methods_types', array('cc' => __('Credit card', 'woocommerce'), 'echeck' => __('eCheck', 'woocommerce'))); } function wc_get_account_orders_actions($order) { if (!is_object($order)) { $order_id = absint($order); $order = wc_get_order($order_id); } $actions = array('pay' => array('url' => $order->get_checkout_payment_url(), 'name' => __('Pay', 'woocommerce')), 'view' => array('url' => $order->get_view_order_url(), 'name' => __('View', 'woocommerce')), 'cancel' => array('url' => $order->get_cancel_order_url(wc_get_page_permalink('myaccount')), 'name' => __('Cancel', 'woocommerce'))); if (!$order->needs_payment()) { unset($actions['pay']); } if (!in_array($order->get_status(), apply_filters('woocommerce_valid_order_statuses_for_cancel', array('pending', 'failed'), $order), true)) { unset($actions['cancel']); } return apply_filters('woocommerce_my_account_my_orders_actions', $actions, $order); } function wc_get_account_formatted_address($address_type = 'billing', $customer_id = 0) { $getter = "get_{$address_type}"; $address = array(); if (0 === $customer_id) { $customer_id = get_current_user_id(); } $customer = new WC_Customer($customer_id); if (is_callable(array($customer, $getter))) { $address = $customer->{$getter}(); unset($address['email'], $address['tel']); } return WC()->countries->get_formatted_address(apply_filters('woocommerce_my_account_my_address_formatted_address', $address, $customer->get_id(), $address_type)); } function wc_get_account_saved_payment_methods_list($list, $customer_id) { $payment_tokens = WC_Payment_Tokens::get_customer_tokens($customer_id); foreach ($payment_tokens as $payment_token) { $delete_url = wc_get_endpoint_url('delete-payment-method', $payment_token->get_id()); $delete_url = wp_nonce_url($delete_url, 'delete-payment-method-' . $payment_token->get_id()); $set_default_url = wc_get_endpoint_url('set-default-payment-method', $payment_token->get_id()); $set_default_url = wp_nonce_url($set_default_url, 'set-default-payment-method-' . $payment_token->get_id()); $type = strtolower($payment_token->get_type()); $list[$type][] = array('method' => array('gateway' => $payment_token->get_gateway_id()), 'expires' => esc_html__('N/A', 'woocommerce'), 'is_default' => $payment_token->is_default(), 'actions' => array('delete' => array('url' => $delete_url, 'name' => esc_html__('Delete', 'woocommerce')))); $key = key(array_slice($list[$type], -1, 1, true)); if (!$payment_token->is_default()) { $list[$type][$key]['actions']['default'] = array('url' => $set_default_url, 'name' => esc_html__('Make default', 'woocommerce')); } $list[$type][$key] = apply_filters('woocommerce_payment_methods_list_item', $list[$type][$key], $payment_token); } return $list; } add_filter('woocommerce_saved_payment_methods_list', 'wc_get_account_saved_payment_methods_list', 10, 2); function wc_get_account_saved_payment_methods_list_item_cc($item, $payment_token) { if ('cc' !== strtolower($payment_token->get_type())) { return $item; } $card_type = $payment_token->get_card_type(); $item['method']['last4'] = $payment_token->get_last4(); $item['method']['brand'] = !empty($card_type) ? ucfirst($card_type) : esc_html__('Credit card', 'woocommerce'); $item['expires'] = $payment_token->get_expiry_month() . '/' . substr($payment_token->get_expiry_year(), -2); return $item; } add_filter('woocommerce_payment_methods_list_item', 'wc_get_account_saved_payment_methods_list_item_cc', 10, 2); function wc_get_account_saved_payment_methods_list_item_echeck($item, $payment_token) { if ('echeck' !== strtolower($payment_token->get_type())) { return $item; } $item['method']['last4'] = $payment_token->get_last4(); $item['method']['brand'] = esc_html__('eCheck', 'woocommerce'); return $item; } add_filter('woocommerce_payment_methods_list_item', 'wc_get_account_saved_payment_methods_list_item_echeck', 10, 2);