在 Woocommerce 中捕获自定义结帐字段值
Capture custom checkout field value in Woocommerce
我在 woocommerce 上,正在尝试使用代码片段,使用 json 获取所有字段的值以发送到 adroid 应用程序。
麻烦的是,我无法在结帐时捕获自定义字段的值。我尝试通过插件和代码片段创建字段,但是我无法恢复要发送到 json
的值
该字段是使用该代码段创建的
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
当尝试使用该片段创建 json 时,我可以获得所有标准 woo 值,但我无法获得自定义字段
function action_woocommerce_order_status_completed( $array ) {
$order = wc_get_order( $order_id );
$url = 'localhost/wp/recolector.php';
//Initiate cURL.
$ch = curl_init($url);
// now you can get the data from $product array
};
//The JSON data.
$jsonData = array(
'email' => $order->get_billing_email(),
'first_name'=> $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'phone'=>$order->get_billing_phone()(),
'address'=>$order->get_billing_address_1(),
'city'=>$order->get_billing_city(),
'province'=>$order->get_billing_state(),
'country'=>$order->get_billing_country(),
'order'=>$order->get_order_number()
);
//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request
$result = curl_exec($ch);
};
// add the action
add_action( 'woocommerce_order_status_completed', 'action_woocommerce_order_status_completed', 10, 1 );
那么如何将 my_field_name 添加到 json?
感谢您的帮助。
已更新
您的代码中存在一些错误和缺失。请尝试以下操作:
// Display a custom checkout field
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';
woocommerce_form_field( '_custom_field', array(
'type' => 'text',
'class' => array('my-custom-field form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( '_custom_field' ));
echo '</div>';
}
// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
if ( isset($_POST['_custom_field']) )
$order->update_meta_data('_custom_field', sanitize_text_field( $_POST['_custom_field'] ) );
}
add_action( 'woocommerce_order_status_completed', 'action_on_order_status_completed', 10, 2 );
function action_on_order_status_completed( $order_id, $order ) {
// The order data (array)
$data = array(
'email' => $order->get_billing_email(),
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'phone' => $order->get_billing_phone()(),
'address' => $order->get_billing_address_1(),
'city' => $order->get_billing_city(),
'province' => $order->get_billing_state(),
'country' => $order->get_billing_country(),
'order' => $order->get_order_number()
);
// Get the custom field value (and add it if not empty)
if( $custom_field = $order->get_meta('_custom_field') ) {
// Add it to the array
$data['custom_field'] = $custom_field;
}
//Encode the array into JSON.
$json_data = json_encode( $data );
// The Url
$url = 'localhost/wp/recolector.php';
//Initiate cURL.
$ch = curl_init($url);
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request
$result = curl_exec($ch);
// Set the return result in the order as custom meta data (if needed)
$order->update_meta_data('_curl_result', $result );
$order->save();
}
现在应该可以更好地工作了。
我在 woocommerce 上,正在尝试使用代码片段,使用 json 获取所有字段的值以发送到 adroid 应用程序。
麻烦的是,我无法在结帐时捕获自定义字段的值。我尝试通过插件和代码片段创建字段,但是我无法恢复要发送到 json
的值该字段是使用该代码段创建的
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
当尝试使用该片段创建 json 时,我可以获得所有标准 woo 值,但我无法获得自定义字段
function action_woocommerce_order_status_completed( $array ) {
$order = wc_get_order( $order_id );
$url = 'localhost/wp/recolector.php';
//Initiate cURL.
$ch = curl_init($url);
// now you can get the data from $product array
};
//The JSON data.
$jsonData = array(
'email' => $order->get_billing_email(),
'first_name'=> $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'phone'=>$order->get_billing_phone()(),
'address'=>$order->get_billing_address_1(),
'city'=>$order->get_billing_city(),
'province'=>$order->get_billing_state(),
'country'=>$order->get_billing_country(),
'order'=>$order->get_order_number()
);
//Encode the array into JSON.
$jsonDataEncoded = json_encode($jsonData);
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request
$result = curl_exec($ch);
};
// add the action
add_action( 'woocommerce_order_status_completed', 'action_woocommerce_order_status_completed', 10, 1 );
那么如何将 my_field_name 添加到 json?
感谢您的帮助。
已更新
您的代码中存在一些错误和缺失。请尝试以下操作:
// Display a custom checkout field
add_action( 'woocommerce_after_order_notes', 'my_custom_checkout_field' );
function my_custom_checkout_field( $checkout ) {
echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';
woocommerce_form_field( '_custom_field', array(
'type' => 'text',
'class' => array('my-custom-field form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( '_custom_field' ));
echo '</div>';
}
// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_create_order', 'save_order_custom_meta_data', 10, 2 );
function save_order_custom_meta_data( $order, $data ) {
if ( isset($_POST['_custom_field']) )
$order->update_meta_data('_custom_field', sanitize_text_field( $_POST['_custom_field'] ) );
}
add_action( 'woocommerce_order_status_completed', 'action_on_order_status_completed', 10, 2 );
function action_on_order_status_completed( $order_id, $order ) {
// The order data (array)
$data = array(
'email' => $order->get_billing_email(),
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'phone' => $order->get_billing_phone()(),
'address' => $order->get_billing_address_1(),
'city' => $order->get_billing_city(),
'province' => $order->get_billing_state(),
'country' => $order->get_billing_country(),
'order' => $order->get_order_number()
);
// Get the custom field value (and add it if not empty)
if( $custom_field = $order->get_meta('_custom_field') ) {
// Add it to the array
$data['custom_field'] = $custom_field;
}
//Encode the array into JSON.
$json_data = json_encode( $data );
// The Url
$url = 'localhost/wp/recolector.php';
//Initiate cURL.
$ch = curl_init($url);
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request
$result = curl_exec($ch);
// Set the return result in the order as custom meta data (if needed)
$order->update_meta_data('_curl_result', $result );
$order->save();
}
现在应该可以更好地工作了。