Moest even puzzelen hoe die array in elkaar zat.
<?php
$nested = array (
'body' => array (
"contactName" => "Bart R",
"contactPhone" => "+324",
"contactEmail" => "[email protected] ",
"contactLanguage" =>"nl",
"regionId" => 5,
"passengers" => array(
array(
"name" => "Bart",
"child" => "",
"weight" => "90",
"paymentType" => "COUP",
"paymentReference" => "1234 5678 90"
),
array(
"name" => "Annelies",
"child" => "",
"weight" => "70",
"paymentType" => "WIRE"
),
array(
"name" => "Amber",
"child" => "on",
"weight" => "35",
"paymentType" => "WIRE"
)
)
)
);
echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';
?>
<pre>Als 'child' empty is, moet het de boolean false dragen;
Als 'child' de een string ‘on’ bevat, moet het de boolean true dragen;
'Weight' moet een integer zijn, geen string, dus zonder haakjes.
</pre>
<?php
foreach ( $nested['body']['passengers'] as $key => $value )
{
echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
$nested['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE : (boolean)TRUE;
$nested['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
$nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}
echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';
foreach ( $nested['body']['passengers'] as $key => $value )
{
echo 'Kind ' . $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is kind' : 'is geen kind' ) . '<br />';
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
}
?>
Link gekopieerd
Dankuwel! Straks eens proberen, ik laat je zeker weten als het gelukt is. Nogmaals bedankt!
[size=xsmall]
Toevoeging op 25/07/2021 21:26:32: [/size]
Helaas, het wil niet werken. Nuja, ik begrijp de code ook maar half, dus heb ik hem gewoon geïntegreerd.
Hieronder de feitelijke plugin (WordPress), misschien kan jij zien waar het fout loopt?
function piotnetforms_send_request_bart( $form_submission ) {
$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];
$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden
$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];
// begin omzetting
foreach ( $body['body']['passengers'] as $key => $value )
{
echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
$nested['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE : (boolean)TRUE;
$nested['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
$nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}
echo '<pre>' . print_r( $nested, TRUE ) . '</pre>';
foreach ( $body['body']['passengers'] as $key => $value )
{
echo 'Kind ' . $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is kind' : 'is geen kind' ) . '<br />';
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is integer' : 'is geen integer' ) . '<br /><br />';
}
// einde omzetting
$request = [
'body' => json_encode($body),
];
$content = var_export($request, true);
$to = '[email protected] ';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $content, $headers );
}
add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');
Link gekopieerd
<?php
$body_origineel = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value']
];
$body = [
"contactName" => "Bart R",
"contactPhone" => "+324",
"contactEmail" => "[email protected] ",
"contactLanguage" =>"nl",
"regionId" => 5,
"passengers" => [
[
"name" => "Bart",
"child" => "",
"weight" => "90",
"paymentType" => "COUP",
"paymentReference" => "1234 5678 90"
],
[
"name" => "Annelies",
"child" => "",
"weight" => "70",
"paymentType" => "WIRE"
],
[
"name" => "Amber",
"child" => "on",
"weight" => "35",
"paymentType" => "WIRE"
]
]
];
echo '<pre>' . print_r( $body, TRUE ) . '</pre>';
?>
<pre>Als 'child' empty is, moet het de boolean false dragen;
Als 'child' de een string ‘on’ bevat, moet het de boolean true dragen;
'Weight' moet een integer zijn, geen string, dus zonder haakjes.
</pre>
<?php
foreach ( $body['passengers'] as $key => $value )
{
echo '<pre>' . print_r( $value, TRUE ) . '</pre>';
$body['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE : (boolean)TRUE;
$body['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
echo $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is een kind' : 'is geen kind' ) . '<br />';
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is een integer' : 'is geen integer' ) . '<br /><br />';
$body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}
echo '<pre>' . print_r( $body, TRUE ) . '</pre>';
foreach ( $body['passengers'] as $key => $value )
{
echo $value['name'] . ' : ' . ( $value['child'] == TRUE ? 'is een kind' : 'is geen kind' ) . '<br />';
echo 'Gewicht ' . $value['weight'] . ' : ' . ( is_integer( $value['weight']) ? 'is een integer' : 'is geen integer' ) . '<br /><br />';
}
?>
Link gekopieerd
Bedankt voor jouw respons op dit late uur!
Als ik jouw code als separate php-file uitvoer, dan zie ik dat de waardes aangepast zijn. Onderstaande is letterlijk wat er gemaild wordt:
array ( 'body' => '{"contactName":"Bart","contactPhone":"+3247000000","contactEmail":"[email protected] ","contactLanguage":"nl","contactCity":"Diest","regionId":2,"passengers":[{"name":"Bart","child":"","weight":"80","paymentType":"WIRE"},{"name":"Amber","child":"on","weight":"30","paymentType":"WIRE"}]}', )
Bij het uitvoeren van mijn code lijkt de $content (zie mijn vorige bericht) ongewijzigd te blijven.
<?php
/**
* Plugin name: Query APIs
* Plugin URI: https://www.webdesignbart.be
* Description: Pass information from external APIs in WordPress - json
* Author: Bart Raymakers
* Author URI: https://www.webdesignbart.be
* version: 0.1.0
* License: GPL2 or later.
* text-domain: query-apis
*/
function piotnetforms_send_request_bart( $form_submission ) {
$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];
$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden
$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];
$request = [
'body' => json_encode($body),
];
// begin omzetting
foreach ( $request['body']['passengers'] as $key => $value )
{
$request['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE : (boolean)TRUE;
$request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
$request['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}
// einde omzetting
$content = var_export($request, true);
$to = '[email protected] ';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $content, $headers );
}
add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');
Link gekopieerd
Zou het niet beter zijn om deze contactinfo te verwijderen van dit forum.
Link gekopieerd
Goede opmerking Jan. Ik heb mijn posts gewijzigd.
Link gekopieerd
Verwijder de regels 33 tot/met35 en plak dit na regel 46 :
$request = json_encode([ 'body' => $body ] );
echo $request;
En die foreach moet met $body. Niet met $request. Je kunt niet een json op die manier aanpassen.
Link gekopieerd
Wat is dit?
(boolean)TRUE
Waarom zou je hier een boolean typecasten naar een boolean?????
En wat is dit voor constructie?
$body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
En waarom dit:
$request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
niet gewoon zo?
$request['body']['passengers'][$key]['child'] = ($value['child'] == 'on');
Link gekopieerd
Deze regels bevatten bij nadere inspectie een overbodigheid :
$nested['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
$body['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
Moet zijn :
$nested['body']['passengers'][$key]['weight'] = (int)$value['weight'];
$body['passengers'][$key]['weight'] = (int)$value['weight'];
Link gekopieerd
Sorry, maar ik kan niet goed meer volgen. Welke regels zijn te vervangen?
<?php
/**
* Plugin name: Query APIs
* Plugin URI: https://www.webdesignbart.be
* Description: Pass information from external APIs in WordPress - json
* Author: Bart Raymakers
* Author URI: https://www.webdesignbart.be
* version: 0.1.0
* License: GPL2 or later.
* text-domain: query-apis
*/
function piotnetforms_send_request_bart( $form_submission ) {
$regio = [
'regionId' => $form_submission['fields']['region_Id']['value'],
];
$regio = $regio[regionId]; // regio is een array!!!
$regio = intval($regio); // regio moet een integer worden
$body = [
'contactName' => $form_submission['fields']['contactName']['value'],
'contactPhone' => $form_submission['fields']['contactPhone']['value'],
'contactEmail' => $form_submission['fields']['contactEmail']['value'],
'contactLanguage' => $form_submission['fields']['contactLanguage']['value'],
'contactCity' => $form_submission['fields']['contactCity']['value'],
'regionId' => $regio,
'passengers' => $form_submission['fields']['passengers']['value'],
];
// begin omzetting
foreach ( $request['body']['passengers'] as $key => $value )
{
$request['body']['passengers'][$key]['child'] = $value['child'] == '' ? (boolean)FALSE : (boolean)TRUE;
$request['body']['passengers'][$key]['child'] = $value['child'] == 'on' ? (boolean)TRUE : (boolean)FALSE;
$request['body']['passengers'][$key]['weight'] = $value['weight'] = (int)$value['weight'];
}
// einde omzetting
$request = json_encode([ 'body' => $body ] );
echo $request;
$content = var_export($request, true);
$to = '[email protected] ';
$subject = 'The subject';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $content, $headers );
}
add_action('piotnetforms/form_builder/new_record_v2', 'piotnetforms_send_request_bart');
Link gekopieerd