/** * 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 ); Слот-машины без затрат в Lev casino режиме онлайн – 3B OF SLk

Слот-машины без затрат в Lev casino режиме онлайн

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

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

Бесплатные слоты абсолютно без скачивания

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

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

В интернет -казино также помогают участникам играть в игры игровых автоматов от точных денег и начинают бонусные сделки, не вынужденные сделать это, если вам нужно получить. Кроме того, ряд этих азартных учреждений принимают соглашение о определении ваших позитивных аспектов для активной игры в ее игры. Тем не менее, участники должны знать, почему эти рекламные объявления не будут доступны вокруг, и что они изменяются. Следующие бонусы регистрации включают в себя переписывание выгод, дополнительные игры и многое другое. Некоторые даже используют современные джекпоты.

Меню бесплатных игровых автоматов игр Zero

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

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

Одноразовые слоты онлайн -игры от Vegasslotsonline оснащены множеством очень горячих программных агентов по недвижимости, в том числе самых последних ваших текущих. Вы можете найти видеоигры, полностью документированные такими, как RTG или IGT и начать современные видеоигры в таких новичках, как Body Games Cello. Веб -сайт предоставляет ряд видеоигр в веб -игровых автоматах, например, уникальные видеопокерские машины, кинофильмы и инициируют видео -покерные машины анимации. Основываясь на округленном, некоторые из них имеют дополнительные функции и инициируют совершенно бесплатные повторные записи. Независимо от того, стесняетесь ли вы, что вы выбираете, исследовали наши отчеты и начинаете обзоры каждого циркуляра.

Свободные игровые автоматы абсолютно без депозитов

Название игровых игровых автоматов без затрат – это способ испытать, не подвергая опасности деньги. Вы также можете надеть бонусы в казино, чтобы получить любой банкролл и начать активно играть за подарки с реальным доходом. Следующие бонусы постоянно становятся абсолютно свободными перезаписывающими, которые позволяют вам определенно прокрутить рыболовные катушки, не заплатив ни копейки. Если вы выберете поклонника онлайн -игровых автоматов, вы можете получить прибыль в этой статье, предложения о выгоде, чтобы попробовать новые заголовки, ранее торгующие вашими текущими деньгами. Тем не менее, следите за любыми терминами, прикрепленными к бонусам ниже. Некоторые могут исключить некоторые типы игр, например, оставаться в онлайн -играх.

Бесплатные игровые автоматы с дополнительными единицами

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

Поскольку онлайн -игры интернет -казино без затрат не затрагивают процесс или сотовую систему, всегда убедитесь, что защита веб -сайта установила себя. Исследование SSL зашифровало Sheids, а также безопасную просьбу о платформе. Большинство надежных казино платят множество вариантов, например, на фискале и инициируют денежную карту.

Тема с уважением свободные слоты-это отличный вид, если вы хотите выучить захватывающее возбуждение, связанное с Вегасом на линии казино, без вылета.Существует много разных тем или шаблонов, доступных, гарантированно будет продолжать быть тем, чего вы хотите. Это ретро -слоты с использованием уникального опыта игровых автоматов, и начинают онлайн -игры, которые оснащены современным игровым заведением в Вегасе. Другие горячие дизайны владеют древнегреческим языком и начинают мифологию римских букв (кророн развязан, Zeus deuce) вместе с удачей с ирландцами (Range Riches).

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

Translate »
error: Content is protected !!
Open chat