it-swarm.com.de

Wie kann ich ein benutzerdefiniertes Feld in Woocommerce-Bestellungen im Admin-Bereich anzeigen?

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. Momentan kann ich alle anderen Werte in der Rechnungsadresse bearbeiten, aber dieser Wert erscheint nicht im Admin-Bereich. Ich verwende den folgenden Code nur, um den Wert im Admin-Bereich zu sehen.

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 gelesen https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Aber alles in diesem Dokument funktioniert korrekt. Erwarten Sie, dass billing_phone/Phone den Hinweis unter Benutzerdefiniertes Feld enthält. Ich habe die Bildschirmoption aktiviert, 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.

8
Ron

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 Code-Block, 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 es über benutzerdefinierte Felder bearbeitbar zu machen. Bitte beachten Sie, dass Sie in Ihrem zweiten Codeblock den Feldschlüssel _billing_new_phone genannt haben. 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 Ansicht" -Modus verfügbar sein, aber Sie können dasselbe über den standardmäßigen benutzerdefinierten Feldblock von WordPress bearbeiten. Siehe unten Screenshot.

 enter image description here 

17
Prasad Nevase

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()
1
Gaël