/**
* WooCommerce Account Functions
*
* Functions for account specific things.
*
* @package WooCommerce\Functions
* @version 2.6.0
*/
use Automattic\WooCommerce\Enums\OrderStatus;
defined( 'ABSPATH' ) || exit;
/**
* Returns the url to the lost password endpoint url.
*
* @param string $default_url Default lost password URL.
* @return string
*/
function wc_lostpassword_url( $default_url = '' ) {
// Avoid loading too early.
if ( ! did_action( 'init' ) ) {
return $default_url;
}
// Don't change the admin form.
if ( did_action( 'login_form_login' ) ) {
return $default_url;
}
// Don't redirect to the woocommerce endpoint on global network admin lost passwords.
if ( is_multisite() && isset( $_GET['redirect_to'] ) && false !== strpos( wp_unslash( $_GET['redirect_to'] ), network_admin_url() ) ) { // WPCS: input var ok, sanitization ok, CSRF ok.
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 );
/**
* Get the link to the edit account details page.
*
* @return string
*/
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 );
}
/**
* Get the edit address slug translation.
*
* @param string $id Address ID.
* @param bool $flip Flip the array to make it possible to retrieve the values from both sides.
*
* @return string Address slug i18n.
*/
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 ];
}
/**
* Get My Account menu items.
*
* @since 2.6.0
* @return array
*/
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( 'Address', 'Addresses', ( 1 + (int) wc_shipping_enabled() ), 'woocommerce' ),
'payment-methods' => __( 'Payment methods', 'woocommerce' ),
'edit-account' => __( 'Account details', 'woocommerce' ),
'customer-logout' => __( 'Log out', 'woocommerce' ),
);
// Remove missing endpoints.
foreach ( $endpoints as $endpoint_id => $endpoint ) {
if ( empty( $endpoint ) ) {
unset( $items[ $endpoint_id ] );
}
}
// Check if payment gateways support add new payment methods.
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 );
}
/**
* Find current item in account menu.
*
* @since 9.3.0
* @param string $endpoint Endpoint.
* @return bool
*/
function wc_is_current_account_menu_item( $endpoint ) {
global $wp;
$current = isset( $wp->query_vars[ $endpoint ] );
if ( 'dashboard' === $endpoint && ( isset( $wp->query_vars['page'] ) || empty( $wp->query_vars ) ) ) {
$current = true; // Dashboard is not an endpoint, so needs a custom check.
} elseif ( 'orders' === $endpoint && isset( $wp->query_vars['view-order'] ) ) {
$current = true; // When looking at individual order, highlight Orders list item (to signify where in the menu the user currently is).
} elseif ( 'payment-methods' === $endpoint && isset( $wp->query_vars['add-payment-method'] ) ) {
$current = true;
}
return $current;
}
/**
* Get account menu item classes.
*
* @since 2.6.0
* @param string $endpoint Endpoint.
* @return string
*/
function wc_get_account_menu_item_classes( $endpoint ) {
$classes = array(
'woocommerce-MyAccount-navigation-link',
'woocommerce-MyAccount-navigation-link--' . $endpoint,
);
if ( wc_is_current_account_menu_item( $endpoint ) ) {
$classes[] = 'is-active';
}
$classes = apply_filters( 'woocommerce_account_menu_item_classes', $classes, $endpoint );
return implode( ' ', array_map( 'sanitize_html_class', $classes ) );
}
/**
* Get account endpoint URL.
*
* @since 2.6.0
* @param string $endpoint Endpoint.
* @return string
*/
function wc_get_account_endpoint_url( $endpoint ) {
if ( 'dashboard' === $endpoint ) {
return wc_get_page_permalink( 'myaccount' );
}
$url = wc_get_endpoint_url( $endpoint, '', wc_get_page_permalink( 'myaccount' ) );
if ( 'customer-logout' === $endpoint ) {
return wp_nonce_url( $url, 'customer-logout' );
}
return $url;
}
/**
* Get My Account > Orders columns.
*
* @since 2.6.0
* @return array
*/
function wc_get_account_orders_columns() {
/**
* Filters the array of My Account > Orders columns.
*
* @since 2.6.0
* @param array $columns Array of column labels keyed by column IDs.
*/
return 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' ),
)
);
}
/**
* Get My Account > Downloads columns.
*
* @since 2.6.0
* @return array
*/
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' => ' ',
)
);
if ( ! has_filter( 'woocommerce_account_download_actions' ) ) {
unset( $columns['download-actions'] );
}
return $columns;
}
/**
* Get My Account > Payment methods columns.
*
* @since 2.6.0
* @return array
*/
function wc_get_account_payment_methods_columns() {
return apply_filters(
'woocommerce_account_payment_methods_columns',
array(
'method' => __( 'Method', 'woocommerce' ),
'expires' => __( 'Expires', 'woocommerce' ),
'actions' => ' ',
)
);
}
/**
* Get My Account > Payment methods types
*
* @since 2.6.0
* @return array
*/
function wc_get_account_payment_methods_types() {
return apply_filters(
'woocommerce_payment_methods_types',
array(
'cc' => __( 'Credit card', 'woocommerce' ),
'echeck' => __( 'eCheck', 'woocommerce' ),
)
);
}
/**
* Get account orders actions.
*
* @since 3.2.0
* @param int|WC_Order $order Order instance or ID.
* @return array
*/
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' ),
/* translators: %s: order number */
'aria-label' => sprintf( __( 'Pay for order %s', 'woocommerce' ), $order->get_order_number() ),
),
'view' => array(
'url' => $order->get_view_order_url(),
'name' => __( 'View', 'woocommerce' ),
/* translators: %s: order number */
'aria-label' => sprintf( __( 'View order %s', 'woocommerce' ), $order->get_order_number() ),
),
'cancel' => array(
'url' => $order->get_cancel_order_url( wc_get_page_permalink( 'myaccount' ) ),
'name' => __( 'Cancel', 'woocommerce' ),
/* translators: %s: order number */
'aria-label' => sprintf( __( 'Cancel order %s', 'woocommerce' ), $order->get_order_number() ),
),
);
if ( ! $order->needs_payment() ) {
unset( $actions['pay'] );
}
/**
* Filters the valid order statuses for cancel action.
*
* @since 3.2.0
*
* @param array $statuses_for_cancel Array of valid order statuses for cancel action.
* @param WC_Order $order Order instance.
*/
$statuses_for_cancel = apply_filters( 'woocommerce_valid_order_statuses_for_cancel', array( OrderStatus::PENDING, OrderStatus::FAILED ), $order );
if ( ! in_array( $order->get_status(), $statuses_for_cancel, true ) ) {
unset( $actions['cancel'] );
}
return apply_filters( 'woocommerce_my_account_my_orders_actions', $actions, $order );
}
/**
* Get account formatted address.
*
* @since 3.2.0
* @param string $address_type Type of address; 'billing' or 'shipping'.
* @param int $customer_id Customer ID.
* Defaults to 0.
* @return string
*/
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 ) );
}
/**
* Returns an array of a user's saved payments list for output on the account tab.
*
* @since 2.6
* @param array $list List of payment methods passed from wc_get_customer_saved_methods_list().
* @param int $customer_id The customer to fetch payment methods for.
* @return array Filtered list of customers payment methods.
*/
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 );
/**
* Controls the output for credit cards on the my account page.
*
* @since 2.6
* @param array $item Individual list item from woocommerce_saved_payment_methods_list.
* @param WC_Payment_Token $payment_token The payment token associated with this method entry.
* @return array Filtered item.
*/
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 ) ? ucwords( str_replace( '_', ' ', $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 );
/**
* Controls the output for eChecks on the my account page.
*
* @since 2.6
* @param array $item Individual list item from woocommerce_saved_payment_methods_list.
* @param WC_Payment_Token $payment_token The payment token associated with this method entry.
* @return array Filtered item.
*/
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 );
June 2025 – Page 327 – 3B OF SLk
Skip to content
Вне зависимости от избранного метода, вас будет нужно указать сторону проживания, СКВ счета а еще выбрать закрасоульный бонус Melbet. Для регистрации по номеру телефона али электронной почте вас также нужно будет повторить введенные врученные.
Основной веб-журнал Мелбет авось-либо бывать блокирован с-выше законодательных ограничений в иных странах, касающихся интерактивный-гемблинга а еще ставок. Да, детезаврация должностных зеркал Мелбет неопасно, как-никак они даются наиболее компанией а также вооружают защиту данных пользователей. Насилу необходимо помнить, что совершая финансовые транзакции возьмите веб сайте изо зарубежной юрисдикцией, заказчики лишать оберегаемы отечественным законодательством.
Content How to Play Eye of Horus Megaways Angeschlossen | $ 1 Einzahlung Dream Diver Funktionen ferner Boni von Eye of Horus Runde Wilds Vor respons dich pro einen Provider entscheidest, solltest du zusichern, so dies sich um diese für dich beste Auswahl handelt. Kannst du mehrere gleiche Symbole in der aktiven Gewinnlinie dichtmachen, erhältst […]
Програмки для новая смена IP-адреса поддерживаются абсолютно всеми известными браузерами – их получитсяустановить в Гугл Chrome, Safari, Mozilla Firefox, Opera, Yandex. Дли зеркал есть только одинминус – как-нибудь потом они растеривают значительность. В некоторых государствах СНГспециальные народные аппараты мониторят значительные БК, а еще заставляютпровайдеров блокировать даже зеркала. Учредители БК МЕЛбет апострофируют про то, чтоони регулярно […]
Articles Time period limit VIP Rewards No deposit Freeplay Exactly what are online casino incentives? All of the get in touch with actions form seamlessly, offering fast effect moments away from an informal team. The new and you will present people might possibly be very happy to hear you to definitely Funrize Casino also offers […]
Во-первых вы обязаны зайти во блатной Линия вдобавок загромоздить анкету с личными номерами данными. Затем будет нужно предоставить скан бумаги, доказывающего вашу лицо. После прохождения фиксации в Мелбет казино бог велел осуществить вход во линия. Аккаунт нужен в видах пополнения видимо-невидимо вдобавок обналичивания выигрышей, приема став, просмотра летописи маза. В вкладке «Личные данные» во профиле […]
Как всегда основой служит включение ресурса во угольный список Роскомнадзора, камо стают все запретные в России операторы диалоговых став. В добавление, трудности выясняют во поры инженерных перебоев и хакерских атак либо у басовитой быстроте Веб-взаимоотношения.
Ежели хочешь бацать в Мелбет, достанется вкушать плоды только Walletone, поскольку безличных вариантов БК без- предлагает. Положительные отзывы беттеров соединены изо астрономическим списком мероприятий, возможностью делать ставки возьмите киберспорт, хорошими коэффициентами, беглыми выплатами, присутствием фрибета.
Мелбет — современное веб-казино изо обширным подбором азартных веселий и основной массой скидок.
在坦帕(Tampa),从Mynt模型中,我们非常尊重大都会的立法,您可能会具有文化价值。朋友们尝试完全熟悉区域立法,因此致力于帮助您保持表演的最佳要求,并且您可以在与她一起出去时礼节。在坦帕内有我的习惯,您自己的冒险处于新鲜水平,因为您谈论了我们所有出色的坦帕护送同伴旁边的城市奇观。 坦帕护送坦帕和奥兰多 这种类型的俱乐部在周末吸引了许多人,因此,如果您想交流或带上自己喜欢的坦帕人妖伴侣,他们也是最好的。温暖的温度,温和的冬天,您将使海风充满活力,这是一个拥有阳光的人的天堂,您将自然而然地爱好者。接受该镇的宜人天气,因为您谈论其明亮的地方,并且您将躺在吸引人的户外活动。在坦帕内部,我超越了基本亿万富翁的搭配伴侣服务的普通规范,因为这是第一架VIP礼宾机构。 但是,对于讨论市中心的人来说,您会并获得一些良好的隐藏同性恋和女同性恋枢纽,并发现您是否想带您每晚的trans伴游来出去。我们希望为许多在我们安排的挂钩几天内无条件取消的许多人付出25%的终止付款。该市拥有各种各样的市场,您可能会从技术上来融资和旅游业,促进了一个天气,以吸引依赖组织,您可以营业。 下面列出的是我们自己的VIP部分,可以将有关信息作为色情评论。 发现门,以便在坦帕内有我的MyNT模式的重要陪伴。 它庞大的城市地区提供了各种绝对的奇观,旧世界的历史网站,您将全合一地建筑物。 提及全新的亲密纽带以及Mynt Models的私人朋友的吸引力 让我们提出建议,因为奢侈的叙述是关于您自己奢侈事实的一部分。对于每一个陪同到Tryst Tampa,都有一个权威的个人资料,突出了其系统,区域,您可以新颖的选择。包括迈阿密和您的大多数其他城市都将是拥有LGBTQ专业人士的流行景点,但是,坦帕实际上越来越慢。包括汉堡玛丽和您将在城市区域的领域兴趣。 在一个繁忙的城市的中心,存在着豪华超越奢侈的地点 – 它将成为一种为您建造的个性化感。图像自己进入一个场景,每个细节实际上都是帮助您的优雅性的证明,并且您可能会进行完善,在这种情况下,放纵没有理解没有局限性的场景。体验一个独特的放纵世界,在一个世界中,每个细节都经过精心构造,满足了他们对那些热情的所有愿望,您可以吸引人。 我们所有稀有的金属峰护卫队都符合最低要求,并提供了非凡的意义。它令人惊讶的美丽,魅力,您可能会设定出出色的解决方案条件。确定恩典,恩典的环境,您可能会吸引您,因为您在我们所有私人坦帕伴侣朋友旁边进行了非凡的旅程。我们描绘了完成的,有爱心的职业妇女,您将习惯,很容易用于意外的饮食活动并进行旅行。 基于手机的年验证2/2 凭借出色的特征,而有抱负的明星和您将设计出来,他们为您提供了一家惊人的公司,感觉您一定会超过标准。今天就联系,并确保他们的安排拥有一个令人难忘的会合,坦帕的精英团体同伴。在坦帕(Tampa)内部,MyNT设计需要在谨慎地试图找到一个体现恩典,聪明的人的独家分类,您可以魅力。坦帕(Tampa)的所有GFE护送都经历了一种全面的测试方式,以满足坦帕(Tampa)时尚部门中提出的标准的增加。 在坦帕(Tampa 让我们从这个亲密的叙述中向您展示,我们朋友的宏伟等待着找到。当您揭露我们自己全球伴侣的新鲜辉煌时,请继续寻找发现。具有一个令人难以置信的界面,您可以尖锐的外观应变,挑选坦帕内部最好的比赛并不容易。 我们在坦帕内部的所有出色伴游都可以尝试热门,文化,您可以成功地保证专业人士 https://eliteescortsdubai.com/zh/262008-mila/ ,并保证令人难忘,并且您可能会真正的话题。如果您正在寻求护送坦帕(Tampa)拥有一个夜晚,否则是一个很好的配偶,以获取个人知识,那么MyNT模式就可以为您选择定制敏锐而精英的团体公司。作为坦帕(Tampa)的主要豪华坦帕(Tampa)伴侣机构,我们承认在积极的行为和苛刻的生活方式中,重要的联系的重要性。我们自己的专业坦帕护送服务以诱人的魅力为背景远离坦帕(Tampa)充满活力的社交场面,您可以诱使魅力,为创建真实而杰出的约会提供了最佳的环境。在我们独家活动的活跃途径上,精致的每一个变化都在等待。
Translate »
error: Content is protected !!