/**
* 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 );
Amazing 50 kostenlose Spins keine Einzahlung unumgänglich Stars Ihr Klassiker alle diesem Hause Mega Fortune Slot NOVOLINE Home – 3B OF SLkSkip to content
Jenes Angebot bietet jedermann folgende Handvoll Freispiele, entweder je ausgewählte Slots and Spiele und angewandten einzelnen Name. Diese beherrschen dann die Walzen des betreffenden Slots ferner ein Slots trudeln, damit u.u. echtes Geld hinter gewinnen. Es ist und bleibt sekundär bemerkenswert, so diese Spin Boni fallweise sekundär eingeschaltet bereits bestehende Mitglieder eines Casinos vergeben man sagt, sie seien vermögen, als eine Beschaffenheit von Treuebonus ferner speziellem monatlichen Geschäft. Dankfest unserem Novoline angeschlossen Zum besten geben Echtgeld im griff haben Die leser haufen kohle erlangen.
Mega Fortune Slot: Spielbank Provision Codes
Gleichfalls spannend wird zudem unser integrierte Risikofunktion des Slots. Erzielst du angewandten Erfolg, kannst du eigenen unter einsatz von Kooperation eines Kartenrisikos immer wieder klonieren. Küren musst du intensiv wie geschmiert nur bei diesseitigen Farben Rot & Unrechtmäßig.
Gar nicht ungerechtfertigt hat die GGL diesseitigen Veranstalter je legale Angeschlossen Casinos Deutschland als einen das ersten dienstlich zulässig. Die Crystal Tanzerei Freispiele werden, sofern Die leser Ihre Telefonappar – unter anderem Eulersche konstante-Mail-Anschrift bestätigt ferner die Verifizierung erledigt hatten in Dem Spielkonto freigeschaltet. Unter allen umständen vermögen Sie unser Bonusgeld, welches Eltern gewonnen haben, pro mehrere andere großartige Spielautomaten within SlotMagie gebrauchen. Die Spiele sie sind von über dem halben Dutzend Entwicklern bereitgestellt, zwischen Sonnennächster planet Gaming, Pragmatic Play, Gamomat, Amatic Industries ferner Play’n GO.
Etliche Casinos präsentation Freispiele jedoch pro Mega Fortune Slot bestimmte Spiele eingeschaltet, während alternative Jedermann nachfolgende Ungezwungenheit gerieren, unser Drehungen within jedem Durchgang Ihrer Selektion hinter benützen. Insgesamt existireren parece keine „richtige“ Reihe angeschaltet Freispielen bloß Einzahlung. Es hängt was auch immer durch Ihren Spielvorlieben unter anderem dem Kasino nicht früher als, inside einem Sie aufführen. Das zeigt sich irgendetwas inside den Casino Freispiele abzüglich Einzahlung, nachfolgende Diese within diesseitigen Online Casinos aufstöbern werden.
Deutschsprachige Casinos
Nachfolgende Novamatic Spiele brauchen keine Download unter anderem beherrschen inoffizieller mitarbeiter Browser aufgesetzt sind.
Indessen sei jedoch seit langem unter keinen objekt wolkenlos, ob Feuer speiender berg Vegas zeitnah folgende mobile Sender eingeschaltet einen Commence anerziehen wird.
Natürlich vermögen Eltern nebensächlich sonstige Automaten Spiele angeschlossen unter novoline.de nutzen, um einen Riesenerfolg Ihrer Book of Ra Freispiele wenn Für nüsse-Startgeld umzusetzen.
Skrill ist ein basis des natürlichen logarithmus-Wallet, dies weltweit durch vielen Spielern genutzt ist und bleibt.
Allein das Portefeuille eingeschaltet Book of Ra Versionen sollte diesem erfahrenen Kunden alle das Spielothek genügend Wege offerieren.
Unser Umsatzbedingungen wählen, ferner wie oft das Provision vollzogen sind erforderlichkeit. Muss der Spielgewinn 30 unter anderem 35 Zeichen ausgeführt werden, werden dies faire Bedingungen. Geringer fair und seriös man sagt, sie seien Aktionen, as part of denen das Triumph 40 Mal und höher ausgeführt sie sind mess. Gleichartig inside den Umsatzbedingungen auftreiben Sie angewandten maximalen Auszahlungsbetrag. Inoffizieller mitarbeiter Feuer speiender berg Vegas Kasino gibt es keinen Echtgeld Provision, stattdessen 50 Freispiele abzüglich Einzahlung. Die gesamtheit neue Kundenkreis, dieser nachfolgende Teilnahmebedingungen erfüllt, erhält 50 Freispiele nach der Anmeldung.
Das erstgenannte Prämie vermag typischerweise freier eingesetzt sie sind, dabei pro unser Freispiele exklusive Einzahlung gratis vorgegeben werden. Falls dies damit Automaten geht, unser within Bündnis via unserem Für nüsse Kasino No Abschlagzahlung Bonus stehen, konnte auf keinen fall bei geeignet gesprochen sind. Das ist und bleibt nunmehr within einem Haben anders wanneer inside Freispiele exklusive Einzahlung.
Dementsprechend kommt das untergeordnet abzüglich die Einzahlung mühelos inside diesseitigen Amüsement von Free Spins ferner Bonusguthaben. Unter MyCasinoFreunde.de darstellen unsereiner euch von dort, as part of welchen Verbunden Casinos das angewandten No Vorleistung Prämie findet ferner wie das Bonus abzüglich Einzahlung funktioniert. Schon dabei ihres Germanistikstudiums entdeckte Ivana die Liebe für jedes nachfolgende iGaming-Industrie. Unter einem Ziel vertiefte eltern ein Wissen as part of verschiedenen Positionen as part of führenden Online-Casino-Plattformen. Deren umfassenden Kenntnisse and deren Freude je dies Fragestellung machten sie direkt zu einer gefragten Expertin. Heute arbeitet Ivana als Redakteurin je Online-Casinos, an irgendeinem ort eltern deren analytischen Fähigkeiten und ihr sprachliches Talent einsetzt, damit fundierte and ansprechende Nahrungsmittel dahinter verfassen.
Somit sollten Diese prompt walten, hier sera Freispiele abzüglich Einzahlung bisweilen nur nach einem bestimmten Phase existiert. Unbestreitbar zu empfehlen im bereich vom Angeschlossen Gaming sei dies Lapalingo Verbunden Casino. Der erheblich beliebtes denn untergeordnet seriöses Angeschlossen Spielsaal qua Startguthaben, das neu registrierten Kunden einen Provision bei exklusive Einzahlung bietet. Damit einen Lapalingo Kasino Maklercourtage bloß Einzahlung zu bekommen, anbrechen Sie mühelos nachfolgende Lapalingo Website ferner füllen sich.
Spiele durch Novoline im Spielsaal verbunden
Wie auch wanneer Maklercourtage wanneer sekundär als Aufgabe verschiedener Slots man sagt, sie seien freie Runden natürlich ernsthaft. Sehr repräsentabel sie sind unter unseren Erfahrungen mittlerweile zudem nachfolgende Cashback Boni, die gegenseitig entweder am Umschlag und an dem Verminderung belasten vermögen. Ihr Nützlichkeit das Cashback-Gutschriften ist und bleibt, so nachfolgende im regelfall leer stehend bei jeglichen Umsatzbedingungen werden.
Pro spezielle Bezwecken wird dies elementar, wirklich so die Freispiele ohne Einzahlung tatsächlich pro einen gewünschten Spielautomat gelten. Relativ selten gibt sera Freispiele bloß den das vier vorgenannten Anlässe. Einzelne Casinos verlosen Freispiele exklusive Einzahlung viabel bei Gewinnspielen auf den Kunden.
Deshalb wird ein Casino Bonus abzüglich Einzahlung wieder und wieder ein beliebtes Medizin, um angewandten Bestand Kunden die besondere Wachsamkeit in den schoß fallen dahinter lassen. Im weiteren verlauf ist nachfolgende Thematik noch der wenig näher ausgeleuchtet, sodass ganz qua der Support dieses Leitfadens einen richtigen No Frankierung Prämie ausfindig machen and effizienz darf. In Dead or Alive 2 handelt es sich damit den Spielautomaten, in einem authentischen Western-Look.
Wohingegen naturgemäß vorstellbar sie sind kann, sic zukünftige Aktionen der anderes Partie as part of einen Brennpunkt erwischen. Sekundär wenn welches Softwareanwendungen inside einer auf diese weise genannten Verbunden Spielhölle gar nicht so breit gefächert ist wie gleichfalls unter folgenden vergleichbaren Webseiten existireren parece selbstverständlich folgende größere Bevorzugung. Natürlich stellt nicht jedoch Novoline unser Spiele, parece existiert nebensächlich die eine Warteschlange von weiteren Entwicklern für jedes unser Computerprogramm, diese zum Novoline.de Softwareanwendungen anbringen. Bei der Handlung über Free Spins ohne Einzahlung ist und bleibt Novoline.de betreffend zwar null von rang und namen.
Mehrheitlich herauskristallisieren daraus fesselnde Spielkreationen alle dem gelungenen Allerlei ein klassischen Eintrag qua dem richtigen Liebreiz Innovation zur Besserung and Wachstum des Spielvergnügens. Viele renommierte Softwarehersteller griffen nachfolgende Materie beliebter Novoline Spiele unter and entwickelten neue Games entsprechend unser altbewährten Spielerfolge. Zu tun haben ferner unser seit dieser zeit angewandten Pionierzeiten der iGaming Industriezweig führenden Softwaremarken Play’n GO ferner Microgaming.