So machen Sie die Telefonnummer für die Kundenabrechnung in WordPress eindeutig

Lesezeit: 4 Minuten

Eigentlich möchte ich, dass Kunden der Rechnungsadresse von Woo-Commerce eindeutige Telefonnummern hinzufügen. Wenn jemand versucht, bereits vorhandene Telefonnummern hinzuzufügen / zu aktualisieren, sollte ein Fehler ausgegeben werden.

Ich habe den folgenden Code ausprobiert, aber er funktioniert nicht. Kann mir jemand die richtige Lösung für eindeutige Telefonnummern in der Woocommerce-Rechnungsadresse geben?

add_filter( 'update_user_meta', 'ts_unique_wc_phone_field');
function ts_unique_wc_phone_field( $errors ) {
    if ( isset( $_POST['billing_phone'] ) ) {
        $hasPhoneNumber= get_users('meta_value=".$_POST["billing_phone']);
            if ( !empty($hasPhoneNumber)) {
        $errors->add( 'billing_phone_error', __( '<strong>Error</strong>: Mobile number is already used!.', 'woocommerce' ) );
    }
  }
    return $errors;
}

Kundenrechnungsformular

Dein get_users Anruf ist falsch. Benutzen

$hasPhoneNumber = get_users(array(
        'meta_key' => 'billing_phone', 
        'meta_value' => $_POST['billing_phone'], 
    )
);

Vorsichtig: Sie haben Ihre Meta nicht erwähnt Schlüssel in deinem Beitrag. Dies kann etwas anderes als “billing_phone” sein. Passen Sie es nach Bedarf an.

Dies ermöglicht es Benutzern jedoch, Spielereien wie das Hinzufügen eines Leerzeichens/-/+ oder ähnliches zur Telefonnummer zu machen und sie wiederzuverwenden. Dies erfordert möglicherweise eine Funktion, um redundante Zeichen beim Einfügen von Metawerten herauszufiltern und dieselbe Funktion darauf anzuwenden $_POST['billing_phone'] vor der Metaabfrage für get_users.

  • Nein, es funktioniert nicht. Schwerwiegender Fehler: Nicht erfasster Fehler: Aufruf einer Member-Funktion add() für Zeichenfolge in….

    – NAGENDRA

    29. Januar 2020 um 4:41 Uhr


Benutzer-Avatar
Aliqua

Ich habe auf einer meiner Seiten denselben Code innerhalb von zwei (2) Funktionen eingerichtet – eine für woocommerce -> mein Konto und eine an der Kasse, die die Gültigkeit der für mein Land angegebenen Telefonnummer prüft, und die andere zur Überprüfung wenn die Telefonnummer bereits existiert.

add_action( 'woocommerce_save_account_details_errors', 'wc_myaccount_validate_billing_phone', 20, 1); // My Account
function wc_myaccount_validate_billing_phone( $args ){

    if ( isset ( $_POST['billing_phone'] ) && !empty ( $_POST['billing_phone'] ) ) { 

        if ( !preg_match( '/^04[0-9]{8}$/D', str_replace( ' ', '', $_POST['billing_phone'] ) ) ) {

            wc_add_notice( __( '<strong>Billing Mobile Phone</strong> is invalid (Example: 0412 345 678).' ), 'error' );
        }

        $existing_billing_phone = get_users( 'meta_value=" . str_replace( " ', '', $_POST['billing_phone'] ) );

        $current_user = wp_get_current_user();

        if ( !empty ( $existing_billing_phone ) ) {

            if ( $current_user->billing_phone != str_replace( ' ', '', $_POST['billing_phone'] ) ) {
                wc_add_notice( __( '<strong>Billing Mobile Phone</strong> already exists.' ), 'error' );
            }
            else { 
                return;
            }
        }
    }
}

add_action('woocommerce_checkout_process', 'wc_checkout_validate_billing_phone'); // Checkout
function wc_checkout_validate_billing_phone() {

    if ( isset( $_POST['billing_phone'] ) && !empty( $_POST['billing_phone'] ) ) { 

        if ( !preg_match('/^04[0-9]{8}$/D', str_replace(' ', '', $_POST['billing_phone'] ) ) ) {
            wc_add_notice( __( '<strong>Billing Mobile Phone</strong> is invalid (Example: 0412 345 678).' ), 'error' );
        }

        $existing_billing_phone = get_users( 'meta_value=" . str_replace(" ', '', $_POST['billing_phone'] ) );

        $current_user = wp_get_current_user();

        if ( !empty( $existing_billing_phone ) ) {

            if ( $current_user->billing_phone != str_replace(' ', '', $_POST['billing_phone'] ) ) {
                wc_add_notice( __( '<strong>Billing Mobile Phone</strong> already exists.' ), 'error' );
            }
            else { 
                return;
            }
        }
    }
}

Da ich alle Telefonnummern als 0412345678 (ohne Leerzeichen) speichern möchte und einige Leute Telefonnummern als 0412 345 678 eingeben, entfernt str_replace() dies vor dem Speichern.

add_action( 'woocommerce_checkout_update_user_meta', 'wc_checkout_save_billing_phone' );
function wc_checkout_save_billing_phone( $user_id ) {   

    if ( $user_id && $_POST['billing_phone'] ) {
        update_user_meta( $user_id, 'billing_phone', str_replace(' ', '', $_POST['billing_phone'] ) );
    }
}

Obwohl ich diesen nächsten Teil noch nicht getestet habe, wird auf dieses Beispiel verwiesen dieser Linkwenn Sie den Admin-Benutzerbereich aktualisieren möchten, können Sie so etwas verwenden.

add_action( 'show_user_profile', 'wc_checkout_validate_billing_phone', 10 );
add_action( 'edit_user_profile', 'wc_checkout_validate_billing_phone', 10 );

Unten ist ein Screenshot der Ergebnisse des Versuchs, meine Telefonnummer in eine bereits vorhandene zu ändern, während ich mich im Bereich WooCommerce->Mein Konto befinde.

Geben Sie hier die Bildbeschreibung ein

  • Schwerwiegender Fehler: Uncaught ArgumentCountError: Zu wenige Argumente für die Funktion add_action(), 1 übergeben (zweite Funktion). Und die erste Funktion funktioniert auch nicht, sie aktualisiert einfach bereits vorhandene Telefonnummern.

    – NAGENDRA

    29. Januar 2020 um 6:39 Uhr

  • Ich verwende eine Klasse und musste vor der Bereitstellung Änderungen an der add_action vornehmen. Bitte finden Sie die folgenden Änderungen an der Antwort: add_action('woocommerce_checkout_process', 'wc_checkout_validate_billing_phone'); (Ich habe vergessen, die entsprechenden –> ‘ <-- um die Funktionen herum anzugeben).

    – Aliqua

    29. Januar 2020 um 7:02 Uhr


  • Meine Antwort wurde mit dem Admin-Benutzerbereich aktualisiert, wenn Sie dies erreichen möchten.

    – Aliqua

    29. Januar 2020 um 7:08 Uhr

  • Nein, es funktioniert nicht. entweder zeigt es auch keinen Fehler an. Bereits vorhandene Telefonnummern werden auch im Admin-Bereich und im Checkout-Formular aktualisiert.

    – NAGENDRA

    29. Januar 2020 um 7:18 Uhr


  • Hoffentlich kann das dann jemand ergänzen, da es bei mir funktioniert. Entschuldigung @Nagendra.

    – Aliqua

    29. Januar 2020 um 8:02 Uhr

1010320cookie-checkSo machen Sie die Telefonnummer für die Kundenabrechnung in WordPress eindeutig

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy