Wie zeige ich ein benutzerdefiniertes Feld in Woocommerce-Bestellungen im Admin-Bereich an?


12

Derzeit füge ich ein benutzerdefiniertes Abrechnungsfeld in Woocommerce von hinzu

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

Ich muss diesen Feldwert auf der Admin-Seite bearbeiten. Derzeit kann ich alle anderen Werte in der Rechnungsadresse bearbeiten, aber dieser Wert wird nicht im Admin-Bereich angezeigt. Ich verwende den folgenden Code nur, um den Wert im Admin-Bereich anzuzeigen.

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

add_action( 'woocommerce_admin_order_data_after_billing_address', 'order_phone_backend', 10, 1 );

Ich habe die Dokumentation https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ gelesen . Aber alles in diesem Dokument, was richtig funktioniert, erwartet, dass billing_phone / Phone im Feld Benutzerdefiniert angezeigt wird. Ich überprüfe die Bildschirmoption, aber ich habe bereits ein benutzerdefiniertes Feld angekreuzt. Andere benutzerdefinierte Felder und deren Wert sind sichtbar und können bearbeitet werden.

Wie kann ich diesen Wert im Backend bearbeiten? Bitte helfen Sie.


Der erste Codeblock in Ihrer Frage ändert das Standardfeld "Telefonnummer". Dem Checkout-Formular wird kein neues Feld hinzugefügt. Die Checkout-Felder sind unter "Benutzerdefinierte Felder" nicht verfügbar. Bitte suchen Sie sie dort nicht. Wenn Sie eines der Felder von der Rechnungsadresse oder der Lieferadresse aus bearbeiten möchten, gehen Sie zum Backend und klicken Sie auf eine Bestellung unter der Bestellliste. Dann sehen Sie ein kleines Bearbeitungssymbol neben den Überschriften "Rechnungsdetails" und "Versanddetails". Wenn Sie darauf klicken, können Sie diese Details bearbeiten. Ich hoffe das hilft.
Prasad Nevase

Bitte überprüfen Sie jetzt meinen Code
Ron

Antworten:


22

Der von Ihnen angegebene Code ist unvollständig. Ich bin mir nicht sicher, ob dies der einzige Code ist, mit dem Sie das erreichen, was Sie wollen. Neben dem ersten Codeblock, den Sie bereitgestellt haben, füge ich unten den gesamten Rest des Codes hinzu, der erforderlich ist, um das neue Feld im Backend im Feld "Bestelldetails" anzuzeigen und über benutzerdefinierte Felder bearbeitbar zu machen. Bitte beachten Sie, dass Sie in Ihrem zweiten Codeblock den Feldschlüssel als benannt haben _billing_new_phone. Jeder benutzerdefinierte Feldschlüsselname, der mit _ (Unterstrich) beginnt, ist ein verstecktes benutzerdefiniertes Feld und wird im Backend unter "Benutzerdefinierte Felder" nicht angezeigt.

/**
 * Process the checkout
 */
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * Update the order meta with field value
 */
add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' );

function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ( ! empty( $_POST['billing_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce macht das neue Checkout-Feld unter dem Standardfeld "Bestelldetails" nicht bearbeitbar. Es wird in diesem Feld als "Nur anzeigen" -Modus verfügbar sein, aber Sie können es auch über den Standardblock für benutzerdefinierte Felder von WordPress bearbeiten. Siehe unten Screenshot.

Geben Sie hier die Bildbeschreibung ein


"" Jeder benutzerdefinierte Feldschlüsselname, der mit _ (Unterstrich) beginnt, ist ein verstecktes benutzerdefiniertes Feld und wird im Backend unter "Benutzerdefinierte Felder" nicht angezeigt. "" Woher bekommen Sie diese Informationen?
Ron

2
Auf WordPress Codex. Sie können weitere Informationen abrufen
Prasad Nevase

Bitte helfen Sie bei der Lösung meiner Freund Frage stackoverflow.com/questions/49505056/…
Ron

In meinem Fall habe ich Ergebnisse mit get_post_meta erhalten ($ order-> get_id (), '_billing_phone_new', true). Ich musste in der Funktion get_post_meta einen Unterstrich vor den Variablennamen setzen.
Dashrath

1

Hier ist die Lösung: Der direkte Zugriff auf Produktdaten ist nicht zulässig, z

$product->id

Die richtige Methode für die Zukunft ist:

$product->get_id()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.