Захват значения пользовательского поля оплаты в Woocommerce - PullRequest
0 голосов
/ 21 ноября 2018

Я нахожусь на woocommerce и пытаюсь по фрагментам, получить значение всех полей для отправки в приложение Android с json.

Беда в том, что я не могу зафиксировать значения пользовательских полей при извлечении.Я попытался с помощью плагина и фрагмента создать поле, но я не могу восстановить значения для отправки в 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?

Спасибо за помощь.

1 Ответ

0 голосов
/ 21 ноября 2018

Обновлено

В вашем коде есть некоторые ошибки и упущения.Вместо этого попробуйте следующее:

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

Теперь оно должно работать лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...