/** * 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 ); 1XBet Software 2025 1XBet apk, mobil və apple ios-u aşağı yükləyin – 3B OF SLk

1XBet Software 2025 1XBet apk, mobil və apple ios-u aşağı yükləyin

Siz sadəcə yeni qeyd qutusunu işarələməlisiniz ki, tətbiqlər də daxil olmaqla – növbəti, Android əməliyyat sistemi üçün əldə edilən tamamilə 1xbet yeni 1xBet həqiqətən sizin bacardığınız qədər asan və sürətli olsun. Ən yeni bukker daha yaxşı işləyib ki, iştirakçılar da bir neçə dəqiqə ərzində tamamilə yeni 1xBet apk faylını quraşdırsınlar – təzə proqram Android əməliyyat sistemi mobil cihazınız üçün yaxşı optimallaşdırılıb. Yeni 1xbet istifadəçiləri tərəfindən diqqətlə hazırlanmış yerli mobil proqramlar, Meyvə məhsullarına sahib olmaq üçün Tətbiq Mağazası vasitəsilə pulsuz yükləmək üçün təklif olunur, əks halda Android əməliyyat sistemi ilə işləyən mobil telefonlar və həblər üçün Marketplace-dən həzz alın.

🥇1XBET Oyun Şirkəti — Nəyi kəşf etmək istərdiniz? | 1xbet

Banqladeşdə yeni 1xBet tətbiqi kod yardımına və yerli imkanlara malik olan benqal dilli profillər üçün asanlıqla mövcud tendensiya gətirir. Kriket, Banqladeş Premyer Liqası daxilində 1 nömrəli arzudur və siz qlobal liqalara idman bahisləri ilə tamamlanan bütün dünyada kostyumlar ala bilərsiniz. Yerli faiz addımları məsələn bKash, Nagad və you will Rocket əslində ümumiyyətlə dəstəklənir və sadə kredit ödənişləri və kriptovalyuta variantları.

Apple iOS-a sahib olmaq üçün mərc edin — Yeni proqramı necə yükləmək olar

İş platforması səviyyəli kriket içərisində üstün olmaqla yanaşı, beynəlxalq matçlar, yaşayış liqaları, məsələn, IPL və BBL üçün ətraflı seçimlərə malikdir və siz böyük qlobal yarışlarda iştirak edə bilərsiniz. Bundan əvvəl, 1xBet indi espor, reqbi, voleybol, MMA ilə yanaşı, demək olar ki, bütün digər idman növləri və hətta kabaddi və dart da daxil olmaqla kitab alternativləri təklif edir. Tətbiqdə, şübhəsiz ki, oyunçular üçün rahat kömək proqramı ilə yanaşı, bonuslar və kampaniyalar üçün bir hissə var. Həqiqətən qeyd etmək lazımdır ki, proqram təminatından istifadə etmək istəməyən səhifələrə sahib olmaq və siz mobil telefonunuza əlavə sənədlər yükləyəcəksiniz, bu saytın mobil formasını əldə edə bilərsiniz. Bu saytın yeni mobil növü həqiqətən optimallaşdırılmış bir proqrama malikdir.

Mərc Proqramı Banqladeş 🇧🇩

1xbet

Yeni reytinqlər addım 3.7 arasında dəyişir və siz 3.8/5, 2.2 yüzdən çox və müvafiq olaraq 620 reytinq alacaqsınız. Android cihazları üçün ən yeni 1xBet proqramı ən azı 5.0 versiyasından uzaq funksional sistem tələb edir. Bu, həqiqətən də əla proqramdır, internet brauzerinizin heç bir narahatçılığı olmadan, bəlkə də yolunuza girmədən tam ekranda daha yaxşı hiss etməyə imkan verir. Siz Android və ya Apple üçün tamamilə yeni 1xBet proqram təminatını əldə etməyə kömək etmək üçün 1xBet mobil saytında və/yaxud masaüstü veb-saytında tamamilə yeni 1xBet .apk sənədini endirə bilsəniz, saytın ümumi səviyyəsi əladır.

Qalan yuxarı menyudan Avtorizasiyaya məcbur edin və ya Daxil olun – o, sizi ekranın içindəki köhnə göstəriciyə yönləndirəcək. Cari e-poçt ünvanı, əlaqə nömrəsi və şəxsiyyət vəsiqənizdən mütləq hesabınıza daxil olmaq üçün istifadə edilə bilər. Və bir istifadəçi, bəlkə də xidmət edilən müxtəlif sosial şəbəkələr vasitəsilə daxil ola bilər (Bing hesabı bura daxildir). Hətta orta dərəcədə transformasiya baş verdikdə belə, hər bir sistem üçün əsas imkanlar oxşardır. Ancaq şəbəkə həddən artıq yüklənərsə və faiz gecikdirilə bilərsə, bir şey tapa bilərsiniz, belə məsələlər dəstək provayderi ilə əlaqə saxlamağa dəyər. Parametrlərinizdə naməlum təminatın quraşdırılmasından istifadəni söndürsəniz, əlçatanlığı aktivləşdirin.

Biz proqram təminatını yüksək qiymətləndirdik, çünki bu, oyunçulara ən yeni oyuna mərc etməyə kömək etməyə imkan verir. Əgər siz 1xBet kriptovalyuta proqramından istifadə etmək istəyirsinizsə, quraşdırmanı sınamağınız lazım olan ilk şeydir. 1xBet-in çevik köçürmə imkanlarına uyğun gələn bir çox pul çıxarma üsulları da var – burada bir çoxlarına rast gələcəksiniz. 1xBet ilə istifadə edə biləcəyiniz bir neçə put proseduru var ki, bu da sizə şəxsən sizin üçün asanlıqla vəsait yatırmağa imkan verir.

Birincisi, yeni 1xbet proqramı statistik məlumatlara daha sağlam uyğun gəlir, çevik proqram təmin edir və siz fərdi müşahidə kimi, əsasən daha sürətli xidmət göstərəcəksiniz. Bununla belə, bir çox oyunçu mobil proqramın imkanlarını bəyənir. Tətbiq gözəl və sadə interfeysə, eləcə də tam imkanlara malikdir ki, bunun sayəsində siz mərc oynayacaqsınız, qumar müəssisəsindən qumar oynayacaqsınız və hər dəfə və istənilən yerdə bonuslar alacaqsınız. 1xBet bəzi promosyonlar təqdim edir və siz bonuslar əldə edə bilərsiniz, əlavə olaraq böyük mərclərə qoşulmaq üçün yeni istifadəçilər üçün əlavə bonus.

Translate »
error: Content is protected !!
Open chat