/** * 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

В демонстрационных играх букмекерская контора Пин-Ап веб -слота

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

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

Это фантастический способ протестировать новые игровые автоматы

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

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

Принимая участие в Demo Video Poker Machines, он вынужден начать с небольшой ставки, чтобы понять, как игры выплачивают рутину дизайна.Это хорошая идея, чтобы исследовать поток RTP и начать максимальную мощность, получившую мощность нового игрового автомата, когда вы позиционируете реальные деньги. Вы найдете эти факты, используя разработку «выполнить тест» на домашней странице азартных игр. Вы также можете использовать торт преследования, если вы хотите отобразить экраны из макета, поддержки, а также время, связанное с вариациями. Это поможет найти соответствующие свежие игры, которые можно попробовать, кроме того.

Это простой способ исследовать свежие стили

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

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

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

Это отличный способ экспериментировать с новыми функциями

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

В дополнение к измерению альтернативного экрана, демонстрационные автоматы с проточным протоком одинаковы для точного элемента. Серия Action Buy, Pay, иконки, джекпоты и Begin Reward – это то же самое. Кроме того, участники могут выбирать из некоторых других измерений ставки, которые экспериментируют с RTP и начинать волатильность игрового автомата перед выплатой истинного взноса в средства.

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

Это отличный способ экспериментировать с новыми фотографиями

Демо -слоты бесплатны и дают участникам возможность участвовать в свежих играх, ранее торгующих реальными деньгами. Кроме того, они помогают участникам сравнивать волатильность Game’ersus и качество изображений, прежде чем сделать вариант, если вам нужно участвовать в реальных деньгах.

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

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

Дополнительные демонстрационные автоматы являются подходящими для мобильных телефонов, включая iOS и инициируют Android. Масай имеет бонусное произведение искусства, поток поднимает новый экран отображения метода, чтобы улучшить беспрепятственное ощущение. В этой статье видеоигры создаются из идентифицированных азартных игр по английскому языку и представлены горячими заголовками, такими как Fishin ’Mania, Full Kong Funds и Start TED. Вопреки правильным видам, следующие игры носят «Помещающие джекпоты».Кроме того, они будут использовать условные перерывы, которые были заполнены лучшими при загрузке спорта.

Translate »
error: Content is protected !!
Open chat