/** * 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 ); Бесплатные игровые автоматы онлайн казино Вулкан официальный сайт -игровые автоматы – 3B OF SLk

Бесплатные игровые автоматы онлайн казино Вулкан официальный сайт -игровые автоматы

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

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

Видеоигры шин

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

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

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

Слоты

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

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

Выполните бесплатно видео -покерные машины в области приятных в Интернете, чтобы использовать стратегии без использования денег. Проверьте аутентичные видео-покерные машины на трех барабанах и одну серию Shetk Out за SPIN или получите больше информации о технических играх из десятирель-видеоигр, например, у нескольких есть, в то время как заполненные дикие и начинаются очень устойчивые потоки. Используйте очень горячие заголовки, в то время как легендарная Болгария, Тройной Турдакен и начните собрание золота. Или зайдите в мифический бизнес, который помогает Золушке выиграть королевского принца женщины или даже улучшить розничную продавцу лягушки своей империей в играх с момента исследования в слоте Illusion, нового видео -слота Wolf, и инициируйте красные видео -слот ЛГБТ.

Игра

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

В сети онлайн казино поступают из мобильных телефонов и других устройств, что привело их к удобному способу участия в любое время. Но они порабощают и начинают приносить денежные знаки. А также, их может быть трудно в Мексиканском заливе. Они также могут вызвать нежелательные действия, которые наносят ущерб новым умственным способностям игрока и начинают реальное здоровье. Чтобы сохранить фактическое, вы должны попытаться участвовать в других предметах и ​​получить типичные пространства в игре. Вы можете даже предотвратить игру, если вы употребляете алкоголь, а также лекарства.

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

Блэкджек

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

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

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

Translate »
error: Content is protected !!
Open chat