web-dev-qa-db-ja.com

成功したウーコマースオーダーでカスタム投稿タイプを作成する

チェックアウトページには、注文メタデータに保存されるカスタムフィールドがあります。注文メタデータを取得してカスタム投稿タイプを作成し、カスタムフィールドに注文メタデータを入力する必要があります。

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

次の関数はチェックアウト時に投稿を作成しますが、上記の関数で設定されたメタフィールドを引き込みません。

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

メタオーダーデータを保存する関数にグローバル変数を設定することも試みました

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

任意のフィードバックをいただければ幸いです。

1
Nwar

私はwp_insert_post関数をorderメタデータを保存するのと同じ関数に入れることでそれを理解することができました

1
Nwar

$website_url = get_post_meta($order_id->id, 'My Field', true);をチェックしてくださいあなたは$order_ididを手に入れようとしています。

$order_idは文字列であるか、文字列であるべきです。どちらかを実行する必要があります。

get_post_meta($order_id, 'My Field', true);

または

get_post_meta($order->ID, 'My Field', true);
0
Tim Plummer