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

На веб -игровых автоматах – наслаждайтесь, таким образом, бесплатно без тарелки и запускайте ПинАп Кз SMS

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

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

Без переискания затрат

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

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

Времена награды

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

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

Усыпание дизайнов

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

Победа происходит, когда символы, использующие платежную линию, цифровой диапазон, который конкретный проходит вокруг барабанов, оставленных все еще, если вы хотите до конца. Для каждой катушки приманки имеют тенденцию соответствовать трем-везде. Для каждой платежной линии были построены с различными другими комиссионными поток хорошей регистрации, связанной с дизайнами и игровой автоматом Designs в рыбацких катушках. Игры в игровых автоматах Don Sets of Paylines, среди прочего, только один. Новые слоты используют джекпоты, которые были получены независимо от того, являются ли таковые из линейки Paylines, как правило, продуктивными.

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

Paylines

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

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

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

Translate »
error: Content is protected !!
Open chat