/**
* 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
Skip to content
كما هو الحال في العالم الحقيقي، يبدو الأمر رائعًا إذا باعه البائع لك، ولكن في الواقع، فإنك تجني أرباحًا طائلة. ومن أهم مزايا قانون "الرسوم الكبيرة" الجديد أن القوانين واللوائح الحكومية لا تراعي على الأقل سنوات عديدة من تاريخ اللعبة. على الرغم من قيمتها الإعلامية، إلا أن لعبة البوكر المجانية على الإنترنت توفر أيضًا متعة حقيقية. في الواقع، يزداد الطلب على البلاك جاك باستمرار. نسبة عمولة تصل إلى 98.55%، مما يجعلها خيارًا مثاليًا للاعبين الذين يشهدون نموًا مستمرًا. ولأسباب عديدة، كانت لعبة البلاك جاك لعبة رائدة، وتتيح لك لعبة بلاك جاك مونت كارلو الاحترافية متعددة الأيدي الفوز من بين العديد من الخيارات.
لعبة بلاك جاك برو مونتي كارلو متعددة الأيدي ذات اللون الأسود 猎户星空开发者支持中心
هذه أول لعبة بلاك جاك، ويسعدني أن أقدم لكم النسخة الجديدة من اللعبة مع تحسينات في الصور وإمكانية إضافة ملاحظات على موقعي. في هذا الكتاب، سنتحدث أيضًا عن الساحة متطلبات الرهان الإضافية في كازينو betway بقيمة 60 دولارًا الجديدة الممتعة للعديد من مواقع الويب الرائدة – بلاك جاك. مع هذه التطورات، يمكنك التواصل مع اللاعبين ولمس البطاقات الجديدة، مما يُضفي رابطًا أعمق مع لعبة البلاك جاك الجديدة. – نعم، تم إعداد هذا البحث على موقع Cacino.co.uk من قِبل خبراء مُحنّكين، وقد اطلعوا على كل كازينو على الإنترنت بدقة.
الكازينوهات على الإنترنت التي توفر لعبة بلاك جاك مونتي كارلو الاحترافية متعددة الأيدي للاعبين الهنود
بعد انتهاء جميع لاعبي اللعبة من اختياراتهم، يصبح اللاعب الجديد هو صاحب الفضل الأول. لا يقتصر تميز كازينو هاربورز إل في لوس أنجلوس المحلي على البكرات الدوارة فحسب، بل يُعدّ أيضًا وجهةً مثاليةً للاعبي البلاك جاك. ستجد هنا مجموعةً متنوعةً من ألعاب البلاك جاك، مصحوبةً بحملاتٍ ترويجيةٍ جذابةٍ للاعبين الجدد والقدامى على حدٍ سواء.
أفضل موقع – دراسة كازينو الإنترنت
هذه المكافآت مثالية لاستكشاف عروض الكازينو والدعاية المجانية لألعاب الفيديو، مع إمكانية ربح أموال حقيقية. يعتمد دخل اللعبة الجديدة على عرض الشريك الجديد ومبلغ الرهان. اللعب بأموال حقيقية عند الإيداع الأول من شركة ألعاب جديدة توفر اللعبة. ألعاب المطورين هذه هي ببساطة موانئ الفيديو، وبوكر الفيديو، وموانئ الجوائز الكبرى، والألعاب المباشرة عالية الجودة، وألعاب الطاولة.
الجوائز الكبرى
من الجيد اختيار عناوين أكثر وضوحًا، مثل بلاك جاك كلاسيك وبلاك جاك جولد. يُنصح باختيارها إذا كانت لديك أوراق سلبية أمام أحد الموزعين. بعد ذلك، تأكد من أن الألعاب الجديدة المعروضة عالية الجودة ومن شركات ألعاب بلاك جاك معروفة على الإنترنت.
كل مجالات الموضوع أكثر من ضرورية عند اختيار كازينوهات التشفير المستنيرة.
عندما يتعلق الأمر بالضرب، أو الوضع، أو التزايد، أو الكسر، فإن كل خيار سيكون وفقًا للمعتقدات المعقدة حتى النموذج الأول.
لعبة فيديو مصممة بعناية تجمع بين الصور الجذابة والرسومات المتحركة المائية والعروض المثيرة، مما يضمن إثارة لعب لا تُنسى.
فيما يلي مقالة شخصية قمت بإنشائها حول Gotham Count Bacon Bonanza، بالإضافة إلى تقييم لـ Bacon Pattern.
لعبة البلاك جاك على الإنترنت ليست مجرد فرصة، بل هي لعبة ذات بيئة وإمكانيات، والاستمتاع بها يلعب دورًا حيويًا. قبل الاندماج مع Paysafecard، استخدم Ukash لإيداع مباشر في كازينو محلي، ويمكنك أيضًا سحب الأموال دون أي رسوم. من المعروف أن bet365 من بين أفضل الكازينوهات في أوروبا، حيث تُحدد الشركة عبر الإنترنت كيفية إنشاء كازينو مباشر. يُنصح بحجز كازينو أكثر لزيادة فرصك في الفوز بمبالغ ضخمة أو لمجرد الاستمتاع لفترة أطول. بالإشارة إلى الميزات الجديدة ومجموعة بكرات 4X5X5X5X4، وفرصة الفوز، ومضاعفات الجائزة الكبرى، أو حتى أكثر من 50 لعبة مجانية. توفر لعبة Multi-Eye Black Jack أيضًا ميزة مختلفة وستكون مثيرة للاهتمام للاعبين الذين يسعون إلى زيادة الإثارة على الطاولات.
معايير حافز عدم الإيداع في الكازينو المحلي 🎖 نوفمبر 2024
تتوفر أنواع حديثة من لعبة بلاك جاك، مثل النسخة القديمة، والنسخة ذات النظام الفردي، والنسخة المزدوجة، والنسخة الأوروبية، والنسخة ذات الشركاء الأفضل، ونسخة زابيت. تعتمد احتمالات الفوز في لعبة بلاك جاك برو مونت كارلو متعددة اللاعبين على عدد الأيدي. لذا، عند لعب أربع أيدي في المرة الواحدة، تكون احتمالات الفوز أعلى بأربعة أضعاف مما لو لعبت يدًا واحدة. هذا يجعل اللعبة أكثر تشويقًا، حيث يمكن للاعبين ربح مبالغ كبيرة إذا حالفهم الحظ بالفوز بالجائزة الكبرى.
Translate »
error: Content is protected !!