/** * 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 ); Основные преимущества мани х официальный сайт E-Casino в интернет-игровых автоматах. – 3B OF SLk

Основные преимущества мани х официальный сайт E-Casino в интернет-игровых автоматах.

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

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

Полностью свободные перерывы

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

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

Полезные раунды

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

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

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

Разбросаны иконки

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

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

Любая непредсказуемость, включающая символ сближения, вызывает важный элемент в азартном заведении на интернет -автоматах. 1000 -е годы онлайн -игр, кроме того, выдвигают другие появления и начинают очевидный эффект с момента возникновения следующих символов, создавая более высокий опыт захватывания. Вы улучшаете Master’s Connect к общей игре и начинаете усиливает шум, связанный с прибыльным.

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

Rtp

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

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

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

Отличным способом попробовать Rtp Game’azines и инициировать волатильность, чтобы воспроизвести бесплатную демонстрационную версию. Прямо здесь игры позволяют вам найти стили округления, дизайны и инициировать дополнительные бонусы без риска денег. В этой статье нет демонстрации стоимости, а также способность выступать в течение более длительного времени вашей энергии, чтобы судить о различии в спорте.

Translate »
error: Content is protected !!
Open chat