Gebruik van Mollie functies in custom Wordpress plugin
Ik ben een eigen Wordpress plugin aan ontwikkelen wat gebruikt maakt van Woocommerce en Mollie als betaalmethode. Echter wil ik extra metadata meesturen met Mollie niet lukken. Mollie geeft zelf deze optie ook aan en legt dat hier(https://github.com/mollie/WooCommerce/wiki/Helpful-snippets) uit.
Hieronder de code die ik gebruik in mijn pluginfile.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
function custom_mollie_metadata( $metadata ) {
global $order_id;
$metadata += array( "invoice_reference" => $order_id );
return $metadata;
}
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
global $order_id;
$metadata += array( "invoice_reference" => $order_id );
return $metadata;
}
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
De uiteindelijke data is niks, waarbij ik me dus begin af te vragen of bovenstaande methode wel de juiste is. Kan iemand me een beetje opweg helpen?
Gewijzigd op 22/05/2020 18:38:20 door Thijmen van Doorn
Een global statement is wellicht ook een beetje gevaarlijk, maar als dat gebruikelijk is in WP dan kun je dat doen I guess.
100% zeker weten doe ik niet. Maar over het algemeen kunnen de hooks gewoon aangeroepen worden, zonder een bepaalde plugin aan te roepen. Tenminste, zo begreep ik het. Maar wellicht kan ik het over het hoofd zien..
Waar word je global $order_id aangemaakt?
Wellicht moet je global $woocommerce gebruiken, hierin kun je heel veel data uitlezen wat betreft orders, producten etc.
Waar roep je de global $woocommerce; aan?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
function custom_mollie_metadata( $metadata ) {
global $woocommerce, $order;
$order = wc_get_order($order_id);
$order_id = $order->get_id();
$metadata += array( "jortt_invoice_reference" => $order_id );
return $metadata;
}
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
global $woocommerce, $order;
$order = wc_get_order($order_id);
$order_id = $order->get_id();
$metadata += array( "jortt_invoice_reference" => $order_id );
return $metadata;
}
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata' );
Mag ik je vragen hoe je je plugin hebt opgebouwd qua files (includes etc)
Toevoeging op 26/05/2020 20:22:22:
Wil je dit eens proberen
Je code geeft de foutmelding in de php log:
"Backend log: woocommerce_add_order_item_meta is deprecated since version 3.0.0! Use woocommerce_new_order_item instead."
en bij het bestelproces verschijnt de melding 'Ongeldige bestelling'. Er maar 1 file waarin de plugin draait, er zijn wel extra files, maar die hebben niets met Woocommerce of Mollie te maken. Het vreemde is, dat verderop in de code
en
Wordt gebruikt bij een array in een function, wat wel werkt..
Natuurlijk niet nagedacht, dat er pas een ID word aangemaakt na de checkoutpage.
Je wilt voordat er betaald is informatie meesturen naar Mollie.
Je kan deze hook een proberen
Deze hook pak de order ID zodra de order is aangemaakt wat net voor de checkout gebeurt.
Dat klinkt inderdaad logisch, en zelf niet aandacht! xD
Echter zoek ik even de weg hoe deze hook aan te roepen, in combinatie met de filter? Zou het niet add_action() moeten zijn?
Ik ben zelf niet met Mollie bekend en zou hier in moeten duiken om je opweg te helpen.
Je zou vanuit die actie de order_id op moeten vangen en die kun je dan weer gebruiken in je Mollie functie.
Wellicht kun je op die hook even Googlen, vaak staat er per hook uitgelegd hoe wat en waar.
Output:
De code is nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//ADD METADATA TO MOLLIE PAYMENT
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata', 10, 1);
function custom_mollie_metadata( $metadata ) {
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );
global $woocommerce, $post, $order_id, $order, $posted_data;
$order = new WC_Order( $order_id );
$order_id_nummer = $order->get_id();
$metadata += array( "jortt_invoice_reference" => $order_id_nummer );
return $metadata;
}
add_filter( 'mollie-payments-for-woocommerce_payment_object_metadata', 'custom_mollie_metadata', 10, 1);
function custom_mollie_metadata( $metadata ) {
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );
global $woocommerce, $post, $order_id, $order, $posted_data;
$order = new WC_Order( $order_id );
$order_id_nummer = $order->get_id();
$metadata += array( "jortt_invoice_reference" => $order_id_nummer );
return $metadata;
}
In iedergeval ga ik even verder googlen en kijken hoe het komt dat er maar geen order_id komt.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 1);
function action_checkout_order_processed( $order_id ) {
$order = wc_get_order( $order_id );
// Doe wat je wilt doen, zet hier je Mollie functie eens in
}
function action_checkout_order_processed( $order_id ) {
$order = wc_get_order( $order_id );
// Doe wat je wilt doen, zet hier je Mollie functie eens in
}
Toevoeging op 29/05/2020 13:41:05:
Wat is en waar komt jortt_invoice_reference vandaan?