Support » WooCommerce » Custom Billing Field im Backend anzeigen

  • Gelöst timrear

    (@timrear)


    Hallo zusammen,

    ich habe ein benutzerdefiniertes Feld (Kundennummer) für die Rechnungsadresse erstellt. Dieses wird bei der Registrierung, Kasse Seite und mein-Profil Seite korrekt angezeigt. Es ist nur bei der Registrierung ausfüllbar und ansonsten read-only.

    Jetzt soll dieses Feld im WordPress Backend unter „Benutzer“ angezeigt und vom Admin geändert werden können. Ich bekomme es dort angezeigt, allerdings kann ich es nicht ändern. Kann mir jemand einen Denkanstoß geben? Anbei der entsprechende Auszug meiner functions.php

    /* ******************************************** */
    /* *** Billing Field Kundenummer deklarieren *** */
    /* ******************************************** */
    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    
    // Our hooked in function – $fields is passed via the filter!
    function custom_override_checkout_fields( $fields ) {
         $fields['billing']['billing_kdnr'] = array(
            'label'     => __('Kundennummer', 'woocommerce'),
        'placeholder'   => _x('Kundennummer', 'placeholder', 'woocommerce'),
        'required'  => false,
        'class'     => array('form-row-wide'),
        'clear'     => true
         );
    
         return $fields;
    }
    
    /* ***************************************************** */
    /* *** Billing Field Kundenummer im Backend anzeigen *** */
    /* ***************************************************** */
    add_action( 'show_user_profile', 'add_kdnr_to_users' );
    
    function add_kdnr_to_users( $user ) { ?>
        <h3><?php _e("Benutzerdefinierte Benutzerinformationen", "blank"); ?></h3>
    
        <table class="form-table">
            <tr>
                <th><label for="kdnr"><?php _e("Kundennummer"); ?></label></th>
                <td>
                    <input type="text" name="kdnr" id="kdnr" value="<?php echo esc_attr( get_the_author_meta( 'billing_kdnr', $user->ID ) ); ?>" class="regular-text" /><br />
                    <span class="description"><?php _e("Bitte geben Sie die Kundennummer an."); ?></span>
                </td>
            </tr>
        </table>
    <?php }
    
    /* ***************************************************** */
    /* *** Billing Field Kundenummer ändern / speichern  *** */
    /* ***************************************************** */
    add_action( 'show_user_profile', 'edit_kdnr_to_users' );
    add_action( 'edit_user_profile', 'edit_kdnr_to_users' );
    
    function edit_kdnr_to_users($user_id) {
        // You can maybe add checks here whch would determine if the users role is customer 
        // or not or maybe validate the number. 
        if ( isset( $_POST['kdnr'] ) ) {
            update_user_meta($user_id, 'kdnr', $_POST['kdnr']);
            update_user_meta($user_id, 'billing_kdnr', $_POST['kdnr']);
        }
    }

    Vielen Dank für Eure Zeit und Mühe!

Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Thread-Starter timrear

    (@timrear)

    Ich bin fündig geworden.
    der letzte Teil war falsch….

    /* ***************************************************** */
    /* *** Billing Field Kundenummer ändern / speichern  *** */
    /* ***************************************************** */
    add_action( 'personal_options_update', 'edit_kdnr_to_users' );
    add_action( 'edit_user_profile_update', 'edit_kdnr_to_users' );
    
    function edit_kdnr_to_users( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    
    update_user_meta( $user_id, 'billing_kdnr', $_POST['billing_kdnr'] );   
    }
    Moderator Michi91

    (@michi91)

    Kleine Anmerkung:

    Statt $_POST[‚billing_kdnr‘] direkt in die Datenbank zu schreiben, empfiehlt sich vorher das Feld zu filtern z. B. Mit https://developer.wordpress.org/reference/functions/sanitize_text_field/

    theoretisch könnte sonst ein böser Benutzer mit edit_user Rechten schadcode injizieren.

    Thread-Starter timrear

    (@timrear)

    oha, das stimmt. Böser Fehler.
    Vielen Dank für den Hinweis!!!

    Ich habe aber noch eine Frage zum obigen Thema: Ich würde die Kundennummer gerne in den Bestellungen im Backend (Woocommerce / ordners / [order]) anzeigen lassen. Ich dachte in etwa an folgendes, was jedoch keine Ausgabe erzeugt:

    // Display fields in the backend Order details screen.       
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'customfields_billing_display' );
    
    function customfields_billing_display_order( $order ){
    	    echo '<p><strong>'.__('Kundennummer').':</strong> ' . get_post_meta( $order->get_id(), 'billing_kdnr', true ) . '</p>';	
    
    }

    Hat hier jemand einen Tipp für mich?

    Vielen Dank!!!!!

    Thread-Starter timrear

    (@timrear)

    Bin fündig geworden. Hier für die Nachwelt…

    add_action( 'woocommerce_admin_order_data_after_billing_address', 'user_meta_after_admin_order_billing_address', 10, 1 );
    function user_meta_after_admin_order_billing_address( $order ) {
        if ( $user = $order->get_user() ) {
            if ( $billing_kdnr = get_user_meta( $user->ID, 'billing_kdnr', true ) ) {
                printf( '<p><strong>Kundennummer:</strong> %s</p>', $billing_kdnr );
            }
        }
    }
Ansicht von 4 Antworten - 1 bis 4 (von insgesamt 4)
  • Das Thema „Custom Billing Field im Backend anzeigen“ ist für neue Antworten geschlossen.