Sur la page de paiement, j'ai un champ personnalisé qui est enregistré dans les métadonnées de la commande. J'ai besoin de récupérer les méta-données de commande, de créer un type d'article personnalisé et de renseigner les champs personnalisés avec les méta-données de commande.
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){
global $mypass;
echo '<p><strong>'.__('My Field').':</strong> ' . get_post_meta( $order->id, 'My Field', true ) . '</p>';
$mypass = get_post_meta( $order->id, 'My Field', true );
}
Les fonctions suivantes créent la publication à la caisse, mais n'extraient pas le champ méta défini dans la fonction ci-dessus.
add_action( 'woocommerce_checkout_update_order_meta', 'create_custom_post' );
function create_custom_post($order, $order_id, $posts) {
global $posts;
$my_post = array(
'post_title' => 'Page Title',
'post_content' => 'This is my post.',
'post_status' => 'publish',
'post_type' => 'sale',
);
$website_url = get_post_meta($order_id->id, 'My Field', true);
$new_post_id = wp_insert_post( $my_post );
update_post_meta($new_post_id, 'My Field', $website_url );
}
J'ai également essayé de définir une variable globale sur la fonction qui enregistre les données de méta-commande
function recent_post_page($order_status, $order_id, $post, $checkout ) {
global $mypass;
$order = new WC_Order( $order_id );
$my_post = array(
'post_title' => 'Page title',
'post_content' => 'This is my post.',
'post_status' => 'publish',
'post_type' => 'sale',
);
$new_post_id = wp_insert_post( $my_post );
update_post_meta($new_post_id, 'My Field', $mypass );
}
add_action( 'woocommerce_payment_complete_order_status', 'recent_post_page', 10, 2 );
Tout commentaire apprécié.
J'ai réussi à le comprendre en plaçant la fonction wp_insert_post dans la même fonction que celle qui enregistre les métadonnées de la commande.
Vérifier $website_url = get_post_meta($order_id->id, 'My Field', true);
Vous essayez d’obtenir la id
de $order_id
.
$order_id
est ou devrait être une chaîne. Vous devrez faire soit:
get_post_meta($order_id, 'My Field', true);
ou
get_post_meta($order->ID, 'My Field', true);