Probleem:
Maak je gebruik van MailPoet als nieuwsbrief plugin? Dan kan je aan het reactieformulier een veld toevoegen om mensen automatisch aan te melden voor jouw nieuwsbrief. Dit is een gemakkelijke methode om nieuwe e-mailadressen op een legale manier te verzamelen.
Voor een website moest ik de volgorde van de velden in het reactieformulier wijzigen. Hierdoor stond het veld waarmee mensen zich aan konden melden voor de nieuwsbrief midden in het formulier. Normaal staat dit aan het einde.
Oplossing:
Mijn eerste oplossing was onderstaande PHP code. Deze kan je toevoegen aan het functions.php bestand van jouw (child) theme. De code werkte perfect en zorgde ervoor dat het MailPoet aanmeldveld weer aan het einde van het reactieformulier werd getoond.
function theme_comment_fields_custom_order($fields) { $mailpoet_field = $fields['mailpoet_subscribe_on_comment']; unset($fields['mailpoet_subscribe_on_comment']); $fields['mailpoet_subscribe_on_comment'] = $mailpoet_field; return $fields; } add_filter( 'comment_form_fields', 'theme_comment_fields_custom_order');
Alleen de code gaat ervan uit dat de MailPoet plugin altijd ingeschakeld is. Stel je schakelt de plugin uit of je verwijderd hem uit jouw WordPress website. Dan zorgt bovenstaande PHP code voor notices (errors) in jouw error log. De PHP code verwacht een veld wat er niet is.
Om ervoor te zorgen dat de code alleen uitgevoerd wordt als het veld bestaat, voegde ik een if statement met een isset() check toe. Maar op het moment dat bovenstaande code werd uitgevoerd was het MailPoet aanmeldveld nog niet toegevoegd.
Ik heb daarom uitgezocht welke functie of class in de MailPoet plugin het aanmeldveld toevoegt. Het ging om de class Comment en door middel van class_exists() controleer ik of die class nog bestaat en beschikbaar is. Hieronder staat een verbeterde versie.
function theme_comment_fields_custom_order($fields) { if (class_exists('\MailPoet\Subscription\Comment')) { $mailpoet_field = $fields['mailpoet_subscribe_on_comment']; unset($fields['mailpoet_subscribe_on_comment']); $fields['mailpoet_subscribe_on_comment'] = $mailpoet_field; } return $fields; } add_filter( 'comment_form_fields', 'theme_comment_fields_custom_order');
Oplossing getest op:
WordPress 5.3 met MailPoet 3.39.2