Thème : Ajouter des Metabox à l'admin page de commande
Je suis actuellement avec succès ajout d'un champ à mon Thème les pages des produits, qui est de montrer la valeur:
- dans le panier (front-end),
- sur la page de paiement (front-end),
- sur la page de commande (front-end),
- et dans l'admin de commande page (back-end).
Le problème: Il n'apparaît pas comme un champ personnalisé dans l'admin de l'ordre "champs personnalisés" Metabox avec la valeur à l'intérieur, mais comme un texte dans la page de commande.
Voici mon code de travail:
//Add the field to the product
add_action('woocommerce_before_add_to_cart_button', 'my_custom_checkout_field');
function my_custom_checkout_field() {
echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
echo '<label>fill in this field</label> <input type="text" name="my_field_name">';
echo '</div>';
}
//Store custom field
function save_my_custom_checkout_field( $cart_item_data, $product_id ) {
if( isset( $_REQUEST['my_field_name'] ) ) {
$cart_item_data[ 'my_field_name' ] = $_REQUEST['my_field_name'];
/* below statement make sure every add to cart action as unique line item */
$cart_item_data['unique_key'] = md5( microtime().rand() );
}
return $cart_item_data;
}
add_action( 'woocommerce_add_cart_item_data', 'save_my_custom_checkout_field', 10, 2 );
//Render meta on cart and checkout
function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) {
$custom_items = array();
/* Woo 2.4.2 updates */
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item['my_field_name'] ) ) {
$custom_items[] = array( "name" => 'My Field', "value" => $cart_item['my_field_name'] );
}
return $custom_items;
}
add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );
//This is what I think needs changing?
function subscription_order_meta_handler( $item_id, $values, $cart_item_key ) {
if( isset( $values['my_field_name'] ) ) {
wc_add_order_item_meta( $item_id, "My Field", $values['my_field_name'] );
}
}
add_action( 'woocommerce_add_order_item_meta', 'subscription_order_meta_handler', 1, 3 );
Je pense que c'est le dernier bout de code qui doit être changé. Actuellement, il montre que le texte sous le poste de commande, donc j'ai peut-être besoin d'ajuster wc_add_order_item_meta
à quelque chose d'autre?
J'ai tout essayé mais il ne semble pas fonctionner. Je peux le faire fonctionner lorsque mon domaine est sur la page de paiement mais pas quand je le tire sur la page du produit.
Peut-être que je suis absent un processus de commande extrait?
OriginalL'auteur MV-123 | 2016-06-12
Vous devez vous connecter pour publier un commentaire.
D'abord je dois faire tout est prévu, à l'exception de l'obtention de la valeur pour
my_field_name
en back-end "champs Personnalisés" Metabox dans les pages de Commande.Puis, après un vrai cauchemar, j'ai trouvé une très bonne solution de travail, mieux qu'avant. Dans le back-end, vous avez maintenant une Coutume metabox avec le champ personnalisé
my_field_name
de l'affichage de la valeur de droite, comme dans cette capture d'écran:Mon code est divisé En 2 parties.
1) Le backend Metabox dans les pages de Commande, avec un champ modifiable montrant la valeur correcte à venir à partir d'un champ personnalisé sur les pages produits du site (front-end):
2) Front-end /Back-end:
• La page du produit champ personnalisé (front-end).
• L'affichage de ces données sur le chariot, les pages de paiement et je vous remercie de commande (front-end).
• L'affichage des données sur une page de commande (back-end)
Tout fonctionne comme prévu maintenant.
OriginalL'auteur LoicTheAztec