web-dev-qa-db-fra.com

Créer un type d'article personnalisé sur une commande woocommerce réussie

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é.

1
Nwar

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.

1
Nwar

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);
0
Tim Plummer