Php 未保存自定义字段

Php 未保存自定义字段,php,wordpress,Php,Wordpress,我在woocommerce中有3个自定义字段: 事项参考号、发票号和处理案件的律师(代码下一步,如果您不想看到它,只需向下滚动,这并不重要) 您正在使用钩子更新post元(post-id和order-id)。如果您检查数据库,您应该能够在适当的post id meta下看到这些字段 如果你想将它们添加到电子邮件中,你还需要使用另一个钩子: woocommerce\u电子邮件\u订单\u元密钥 以下是woocommerce文档中的参考: /** * Add the field to order

我在woocommerce中有3个自定义字段:

事项参考号、发票号和处理案件的律师(代码下一步,如果您不想看到它,只需向下滚动,这并不重要)


您正在使用钩子更新post元(post-id和order-id)。如果您检查数据库,您应该能够在适当的post id meta下看到这些字段

如果你想将它们添加到电子邮件中,你还需要使用另一个钩子:

woocommerce\u电子邮件\u订单\u元密钥

以下是woocommerce文档中的参考:

/**
 * Add the field to order emails
 **/
add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');

function my_custom_checkout_field_order_meta_keys( $keys ) {
    $keys[] = 'My Field';
    return $keys;
}
实际上,每个操作只需要使用一个钩子,并将代码放在那里,例如:

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta');

function custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['matter_ref_num']) update_post_meta( $order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num']));
    if ($_POST['invoice_num']) update_post_meta( $order_id, 'Invoice Number', esc_attr($_POST['invoice_num']));
    if ($_POST['sol_deal']) update_post_meta( $order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal']));
}

希望这能有所帮助。

被接受的答案对我不起作用。我必须删除update_post_元函数的第二个参数:

add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_fields_update_order_meta' );
function custom_checkout_fields_update_order_meta( $order_id ) {
  if ($_POST['_billing_vat_number']) update_post_meta( $order_id, '_billing_vat_number', sanitize_text_field( $_POST['_billing_vat_number'] ) );
}
我还使用了wordpress的清理功能,但这不是问题所在

/**
 * Update the order meta with field value
 **/
add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta');

function custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['matter_ref_num']) update_post_meta( $order_id, 'Matter Reference Number', esc_attr($_POST['matter_ref_num']));
    if ($_POST['invoice_num']) update_post_meta( $order_id, 'Invoice Number', esc_attr($_POST['invoice_num']));
    if ($_POST['sol_deal']) update_post_meta( $order_id, 'Solicitor Dealing With Matter', esc_attr($_POST['sol_deal']));
}
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_fields_update_order_meta' );
function custom_checkout_fields_update_order_meta( $order_id ) {
  if ($_POST['_billing_vat_number']) update_post_meta( $order_id, '_billing_vat_number', sanitize_text_field( $_POST['_billing_vat_number'] ) );
}