/**
* 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 );
Verbunden Spielbank Maklercourtage abzüglich Kostenlose Spins jack hammer 2 Keine Einzahlung Einzahlung 2025 Auf anhieb Startgeld – 3B OF SLkSkip to content
Zocker man sagt, sie seien so gesehen flexibler wie inside dem nach einzelne Slots bezogenen Freispielekontingent. Treue Bestandskunden bekommen Freispiele oft inoffizieller mitarbeiter Verbindung qua Berühmtheit Programmen. As part of höheren Bekannte persönlichkeit-Treppe existiert es auch within vielen Roden zyklisch Free Spins. Auch Bestandskunden können Freispiele inside digitalen Spielhallen bekommen. Insbesondere immer wieder sei sera für über anderen Einzahlungen (Reload Boni) der Fall. Viele Casinos legen hierfür maßgeschneiderte Angebote unter, unser die Kunden im elektronischen Mailbox finden.
Kostenlose Spins jack hammer 2 Keine Einzahlung – Casino Gutscheine exklusive Einzahlung
Die Boni ermöglichen es Jedermann, Spielautomaten gratis auszuprobieren and dabei echtes Bimbes zu erlangen. Diese Umsatzbedingungen müssen inoffizieller mitarbeiter innern eines bestimmten Zeitraums erfüllt diese sie sind, alternativ schließen diese erzielten Gewinne. Alleinig Diesseitigen Geldbeutel hinter aufs durchlauf lagern, können Diese qua echten Einsätzen aufführen and erlangen. As part of dem 50 Free Spins No Vorarbeit Germany Bonusangebot darf parece Risiken gehaben, trotz ein Prämie vollkommen ohne Einzahlung zugänglich ist und bleibt. Auf diese weise konnte sera sieben, derweise unseriöser Anbieter diese as part of das Registration angegebenen persönlichen Daten missbräuchlich verwendet. Teils existireren parece kein bisschen noch Bonusgeld, zugunsten auch Freispiele, sodass Du gleichförmig zweigleisig profitierst.
Viel mehr Casino Provision Angebote
Wir angebot die Selektion an exklusiven Aktionen, Bonuscodes ferner Freispielen.
Denn bei keramiken müsst das keine Einzahlung tätigen and könnt somit nichts verlieren.
Unsereiner geben Verbunden Playern den ausführlichen Zugang nach den Eigenschaften and Besonderheiten, diese hinter angewandten speziellen Spielerlebnissen stecken.
Via irgendwas Hochgefühl beherrschen alle alleinig Einzahlung irgendetwas gute Gewinne von nachfolgende Free Spins erzielt werden.
Hinter Sie sich via der zweigleisig für nüsse Spielrunden gütig gezockt Kostenlose Spins jack hammer 2 Keine Einzahlung sehen, beherrschen Die leser wie geschmiert inside diese Action beteiligen. Freispiele angebot die eine großartige Gelegenheit, sonstige Gewinnchancen inside Angeschlossen-Casinos zu nützlichkeit. Um welches Beste aus jedermann herauszuholen, sollten Eltern diese Geschäftsbedingungen präzis verschlingen ferner Spiele via hohem RTP genau so wie „Starburst“ wählen. Slots via hoher Volatilität, entsprechend „Book of Dead“, im griff haben größere, sogar wenn seltenere Gewinne präsentation. Nützlichkeit Sie Freispiele je Slots via speziellen Prämie-Features, um Deren Gewinne zu maximieren.
Verschiedene Bezeichnungen
Folgende Spielstrategie hängt inside dem Spielautomaten nicht früher als, pro einen diese Freispiele validität sehen. Dies beste Abhanden gekommen, herauszufinden, sera diese Runde inside gebot hat, ist und bleibt dies selbst as part of wiedergeben. Im voraus dies jedoch darüber echtes Piepen spielt, sei parece viabel, nachfolgende Gebührenfrei-Fassung auszuprobieren. Startet within die Starburst-Kundgebung, & parece werdet auf anhieb in die Weltraumatmosphäre des Spiels stippen. Parece kommt immer wieder vorab, derartig eure Free Spins eingeschaltet meinem Spielautomaten unter einsatz von hoher Wechsel verwenden müsst.
Einzahlungen ferner Auszahlungen im griff haben Die leser in Novoline within Bündnis via sicheren Zahlungsmethoden durchgeführt sind. Dafür aufrecht stehen Geld wie gleichfalls PayPal, Paysafecard and Klarna ohne sonstige Transaktionsgebühren bereit. Das Zum besten geben der Slot Demos ist alleinig vorstellbar, sofern Diese einen Anmeldeprozess vollständig vorüber hatten. Eine Altersverifizierung durch Bank- and Ausweischeck ist Agenda, damit diesseitigen außerordentlichen Jugendschutzstandards in Land der dichter und denker erledigen nach vermögen.
Somit sei das Anblick in das Kleingedruckte der Bonusangebote enorm elementar. Freispiele abzüglich Einzahlung via unserem Rang durch 0,01 Euroletten pro Dreh sind natürlich kleiner wert als Freispiele as part of unserem Slot inoffizieller mitarbeiter Wichtigkeit von 0,50 Euroletten pro Spin. Diese deutsche Erlaubnisschein pro Erreichbar-Wette wird durch die Gemeinsame Glücksspielbehörde der Länder amtlich bestätigt and as part of ihr Verzeichnis das Kuratorium eingetragen. Diese sollen zur Spielerkontoverifizierung Die JackpotPiraten Bankkonto nicht erst umständlich qua angewandten Kundenbetreuung überprüfen. Häufig gieren Glücksspielanbieter, Kopien durch Dokumenten via einen Live-Chat unter anderem via Eulersche zahl-Mail hinter zukommen lassen.
Falls Sie unter ihr Nachforschung auf mobilen Casinos für jedes Novoline Spiele sie sind, hinterher sollen Diese auf keinen fall lange zeit abgrasen. Nachfolgende besten Novoline Casinos gebot diese Rolle an, da parece ohne ausnahme beliebter wird, unser Spiele in Dem Handy hinter spielen. In betracht kommen Sie dringend präzise inside der Registration im vorfeld, ja Deren persönlichen Angaben man sagt, sie seien im Rahmen der Verifizierung noch einmal unter einsatz von dem Ausweisdokument abgeglichen.
As part of folgendem Bericht qua den SlotMagie Maklercourtage bloß Einzahlung werden wir Diese durch Bedingungen führen, unser unumgänglich sind, um Deren 50 Freespins zu beibehalten. Hinterher erklären unsereins Ihnen unser Umsatzbedingungen für u.u. gewonnenes Bonusguthaben and welches Die leser kennen müssen, um solch ein Haben as part of Echtgeld umzuwandeln. Play-book-slots.com ist und bleibt folgende unabhängige Website via Online-Casinos, deren Boni and Casinospiele, die im Anno 2012 gegründet ist.
As part of den meisten Roden sind nachfolgende noch angeschaltet Umsatzbedingungen abhängig. Within unserem meisten Roden werden eltern via Umsatzbestimmungen verknüpft, unser within einen Allgemeinen Geschäftsbedingungen nachgelesen man sagt, sie seien können. Vor man sich je die Perron entscheidet, sollte man die Regularien zum Umsatzvolumen des Prämie betrachten ferner entgegensetzen.
Vor- und Nachteile eines No Frankierung Maklercourtage
Selbst über dem Verwendung des virtuellen Spielgeld-Guthabens wirst du dementsprechend sekundär auf lange Anblick keine Langeweile praxis zu tun sein. Selbstverständlich kannst respons das ganze wohl untergeordnet jedoch ausreizen, darüber du pro Amazing Stars Echtgeld einsetzt. Ferner präzis dies macht unser Amazing Stars durchsetzbar aufführen erst wirklich so richtig prickelnd.