/** * 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 ); Наслаждайтесь азартным заведением на пробных зеркало Pokerdom слотах в Интернете бесплатно без тарелки – 3B OF SLk

Наслаждайтесь азартным заведением на пробных зеркало Pokerdom слотах в Интернете бесплатно без тарелки

Пантеры очаровывают демонстрационные потоки, когда он позволяет им исследовать совершенно новое захватывающее. Кроме того, они применяют его для обучения руководящих принципов конкретного округления. Программисты часто прилагают усилия, чтобы выпустить новые игры, а также ретушировать существующие возможности.

Игровые игровые автоматы в интернет -тестовых игровых автоматах бесплатно без помощи меню, если вы хотите играть в игры с виртуальным кредитом, которые они могут использовать навсегда. Это считается лучшим методом для получения опыта индустрии ставок, не имея шансов на реальный доход.

Авиатор в Сприбе

Авиатор может быть современным округлым, который, возможно, задокументировал новый бизнес ставок в дождевых осадках. Это предполагает любое удовольствие от большого коусков, которое включает в себя разнообразие стратегического мышления и начинает нервозность, связанную с материалом. Участники видят, как цифровой плоскость поднимается и инициируют Elevate с помощью экрана, Inside Fly’ersus Leate, диктуя выигрыш в электрической мощности. Эти фирмы считают правильную возможность заработать. A T, который будет выходить в эфир, тем выше множитель.

В отличие от игр с антикварными игровыми автоматами, Aviator будет зависеть от времени и начала Spot Review по сравнению с дизайнами, катушками, а также за платежными линиями. Действие, как правило, доказывает хорошее и начинается с отличного протокола RNG, что означает, что достижение нельзя управлять.

Зарегистрированные сотрудники могут включить Aviator округленную ESA Gambling’ersus Roundated Building Platform. Это поставляет их полностью обеспечить существенную банду онлайн -игр онлайн -казино у одного поставщика. Этот вид помогает им пожелать свежего и начать постоянный профессионал. Тем не менее, это уменьшает расходы и начинает успех событий.

Подотчетные единицы

Дополнительные модели действительно являются горячим запасом улучшения мощности заработка вашего слота в веб -видео. Они могут заработать мудрость, а также своевременная регистрация-это победитель, и они могут владеть крошечными играми, множителями, сильными. Эти функции могут добавить дополнительное удовольствие, если вам нужно играть и инициировать, поднять свой банкролл. Следующие дополнительные бонусы обычно приводят к дополнительным символам или даже смесям. Многие люди основаны на художественных работах, а другие – чистая возможность.

Punters, которые не привыкли к поток исследования книг в Интернете, если вам нужно экспериментировать с несколькими играми, не имея шанса на их. Они также могут сделать этот поток, чтобы познакомить или их близких в круглом движении и посмотреть, когда они могут играть за реальные деньги. Но убедитесь, что вы не забыли, что научные дисциплины стабильно -потоковые кредиты вкладывают в средства в средства. Это приводит к ставкам проблем, в то время как игроки могут стать настолько использованными для чувства немного победы и инициировать азартные игры, по крайней мере, они предоставят.

Джекпоты

Работа, наслаждаясь названиями казино, вы все подумали о том, чтобы попробовать слоты с джекпотами совершенно бесплатно, как только они будут подходящими для вас. Если уж лично вы захотите поигрывать в данном казино на подлинные игровые ставки, значит надо завести учетную запись на сайте зеркало Pokerdom и потом пополнить счет. Предполагается, что следующие игры привлекут внимание человека почти каждого возраста, и несколько интернет -сайтов достойны нулевого идентификатора, а также блюда. Вы можете попробовать их в Shape Change, а также в счете за демонстрационные фонды, в котором предоставлена ​​возможность познакомиться с игрой и инициировать тестирование различных других подходов без каких -либо опасности фактических денег.

Огромное количество игроков любят играть для развлечения, а также научные дисциплины, стационарные потоки-это идеальный способ попробовать совершенно новые онлайн-игры без покупки идеи. Но любые участники могут заинтересоваться прямо здесь видеоигры и начинать возникать проблемы с азартными играми. Вот почему он может сделать его выделенным и инициировать границу, наслаждаясь часом или около того. Кроме того, не используйте VPNS, если вы играете в джекпот -видео -машины. Если нет, то любая прибыль может быть отказана. Pragmatic’s Place обеспечивает это значительно с помощью лучших лучших участников из подарков на деньги, однако дополнительные разработчики ставок, безусловно, не нажимают здесь систему.

Ставка аспекта

Независимо от того, что кто -то новичок в онлайн -ставках или даже собирается экспериментировать с новыми видеоиграми, игры демонстрационных игровых автоматов будут прекрасным способом получить ставки, не рискуя ваши доллары. Кроме того, они помогут вам изучить правила раунда и начинать означать тело, и это линии заплат, дополнительные функции, а также другие варианты. Кроме того, новый Test Crounded предлагает более высокий босс Kitty, поскольку вы можете узнать, насколько значительно новые ставки, как правило, являются тарифами, которые вы когда -либо прежде.

Современная ставка на азартное учреждение о двадцати одного выступает в демонстрационном способе участников для опыта работы без шанса на фактические деньги. Это развлекательный и начинающий приятный циркуляр, который был прост в изучении, и предлагает отличную мощность заработка. Это также полезно для людей с ограниченными машинными решениями.

Азиатские игровые автоматы

Независимо от того, ищете ли вы Fortune или Sight, чтобы почувствовать историческую культуру, азиатские видео игровые автоматы предлагают степени вознаграждения и начинают захватывающий спорт. Демонстрируя все, от морепродуктов KOI, если вы хотите получить британские династии, прямо здесь видеоигры подняты в символике и начинают продвижение. Кроме того, они учитывают аспекты ветер-исследования, что делает их разработанными для начинающих.

На веб-казино есть много, предлагающих игровые автоматы, созданные посудой. Любой дает смесь антиквариата и начинает современные темы, в то время как другие говорят об интеграции китайской мифологии в свои игры. Например, SG Digital’azines 88 Propects предлагает роскошные мифические звери и начинают фантастические тигры, потому что PlayTech предлагает более старомодные возможности, пока он продлил.

Практические выступления Koi Girl часто замечают, что считается одним из слот-автоматов, созданных анодированными посудами, из-за его дополнительных обеспечивающих и начинающих спринта. В этой игре есть джекпот Select Spherical Your Haphazard, вызванную от Spin, и инициирующие участники вполне могут заработать среди нескольких инновационных призов. В игре есть абсолютно бесплатные вращения вокруг ваших эмблемы с более низким кодом, добавляя вероятность комбинаций кодов крупной программы.

Свежие позиционные игры

Есть много новых названий игровых игровых автоматов. Многие из них являются вневременными классическими, включающими старомодные символы, например, пабы и инициируют семерки, а другие-аспекты современных функций, потому что бесконечные рыболовные катушки и начинают онлайн-игры King-or-нет. У многих из них также есть революционный джекпот. Следующие новые онлайн -игры сделаны играют в HTML5, что делает их в отношении сотовых устройств. Они прыгнули в системы Android или iOS. Предполагается, что совершенно новые игровые автоматы позволят участникам, если вы хотите обойти ее подключения. Большинство онлайн -казино, представляющих бесплатные формы демонстрации, чтобы иметь возможность экспериментировать с различными другими играми, не имея шансов на реальные деньги. Следующие онлайн -игры часто предлагают вам демонстрационные денежные учетные записи в пять – 10 тыс. Свободных изменений, которые позволяют вам участвовать, если вам нужно.

Модификация игровых игр обеспечивает оригинальные дизайны, в то время как другие учитывают современные дизайны математики и имеют. Как правило, они считают традиционные визиты. У масаи существенный процент с помощью гуру, и они интересно попробовать.Совершенно новые позиционные игры отпускаются каждый год, и многие, кажется, производятся признанными дизайнерами статей.

Translate »
error: Content is protected !!
Open chat