web-dev-qa-db-fra.com

Comment afficher un champ personnalisé dans les ordres woocommerce dans le panneau d'administration?

actuellement j'ajoute un champ de facturation personnalisé dans woocommerce par

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');

j'ai besoin de modifier cette valeur de champ du côté de l'administrateur. Actuellement, je peux éditer toutes les autres valeurs dans l'adresse de facturation, mais cette valeur n'apparaît pas dans la section admin. J'utilise le code suivant uniquement pour voir la valeur dans la section admin.

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 );

J'ai lu la documentation https://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ . Mais tout dans ce document fonctionnant correctement, attendez-vous à billing_phone/Phone, notez-le dans le champ Personnalisé. Je vérifie l'option d'écran mais j'ai déjà coché le champ personnalisé. Les autres champs personnalisés et leur valeur sont visibles et modifiables.

Comment puis-je modifier cette valeur en back-end. S'il vous plaît aider.

8
Ron

Le code que vous avez fourni est incomplet. Pas sûr que ce soit le seul code que vous utilisez pour réaliser ce que vous voulez. Donc, en plus du premier bloc de code que vous avez fourni, ci-dessous, j'ajoute tout le reste du code nécessaire pour afficher le nouveau champ dans le dossier dans la zone "Détails de la commande" et le rendre modifiable à l'aide de champs personnalisés. Veuillez noter que dans votre deuxième bloc de code, vous avez nommé la clé de champ _billing_new_phone. Tout nom de clé de champ personnalisé commençant par _ (trait de soulignement) est un champ personnalisé masqué et n'apparaîtra pas dans le backend sous "Champs personnalisés".

/**
 * 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 ne rend pas le nouveau champ de paiement modifiable dans sa zone standard "Détails de la commande". Il sera disponible en mode "affichage uniquement" dans cette zone, mais vous pouvez le modifier via le bloc de champs personnalisés standard de WordPress. Voir ci-dessous capture d'écran.

 enter image description here 

17
Prasad Nevase

Voici la solution: L’accès direct aux données du produit n’est pas autorisé, par exemple.

$product->id

La bonne méthode est la suivante:

$product->get_id()
1
Gaël