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

13

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 dans le côté administrateur. Actuellement, je peux modifier 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 fonctionne correctement, attendez-vous à ce que billing_phone / Phone soit noté sous 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. Veuillez aider.

Ron
la source
Le premier bloc de code dans votre question, modifie le champ par défaut «Numéro de téléphone». Il n'ajoute aucun nouveau champ au formulaire de paiement. Les champs de paiement ne seront pas disponibles sous "champs personnalisés", donc ne les recherchez pas ici. Si vous souhaitez modifier l'un des champs de l'adresse de facturation ou de l'adresse de livraison, accédez au backend et cliquez sur n'importe quelle commande dans la liste de commande. Ensuite, vous verrez une petite icône de modification à côté des en-têtes "Détails de facturation" et "Détails d'expédition". Cliquer dessus vous permettra de modifier ces détails. J'espère que ça aide.
Prasad Nevase
Veuillez vérifier mon code maintenant
Ron

Réponses:

22

Le code que vous avez fourni est incomplet. Je ne sais pas si c'est le seul code que vous utilisez pour obtenir 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 qui est nécessaire pour afficher le nouveau champ sur le backend dans la boîte `` Détails de la commande '' et le rendre modifiable via des champs personnalisés. Veuillez noter que dans votre deuxième bloc de code, vous avez nommé la clé de champ comme _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 sur 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 boîte standard "Détails de la commande". Il sera disponible en mode `` affichage uniquement '' dans cette boîte, mais vous pouvez le modifier via le bloc de champs personnalisés standard de WordPress. Voir la capture d'écran ci-dessous.

entrez la description de l'image ici

Prasad Nevase
la source
"" Tout nom de clé de champ personnalisé commençant par _ (trait de soulignement) est un champ personnalisé masqué et n'apparaîtra pas sur le backend sous "Champs personnalisés". "" d'où vous obtenez ces informations?
Ron
2
Sur le codex WordPress. Vous pouvez obtenir plus d'informations ici
Prasad Nevase
S'il vous plaît aider à résoudre ma question d'ami stackoverflow.com/questions/49505056/…
Ron
dans mon cas, j'ai obtenu des résultats en utilisant get_post_meta ($ order-> get_id (), '_billing_phone_new', true). J'ai dû mettre un trait de soulignement devant le nom de la variable dans la fonction get_post_meta.
Dashrath
1

Voici la solution: l'accès direct aux données produit n'est pas autorisé, par exemple

$product->id

La bonne méthode pour l'avenir est la suivante:

$product->get_id()
Gaël
la source