Elementor Pro表单:指定字段为空时跳过MailerLite动作
Elementor Pro Forms 跳过MailerLite动作解决方案
需求说明
使用Elementor Pro Forms搭建了集成MailerLite的表单,配置了「收集提交内容」和「MailerLite」两个提交动作。需要实现:当ID为emailval的字段值为空时,仅执行「收集提交内容」动作,跳过MailerLite的订阅动作。
现有代码
add_action( 'elementor_pro/forms/validation', function ( $record, $ajax_handler ) { $form_name = $record->get_form_settings( 'form_name' ); if ( 'my_el_form' !== $form_name ) { return; } $fields = $record->get_field( [ 'id' => 'emailval', ]); if ( empty( $fields ) ) { return; } $field = current( $fields ); if ( '' === $field['value'] ) { //if value is empty skip mailerlite and send form } }, 10, 2 );
解决方案
要实现跳过特定动作,需要在表单验证完成后、动作执行前移除MailerLite的动作回调。将钩子从elementor_pro/forms/validation切换为elementor_pro/forms/after_validation,并在字段值为空时移除对应动作:
add_action( 'elementor_pro/forms/after_validation', function( $record, $ajax_handler ) { $form_name = $record->get_form_settings( 'form_name' ); // 仅针对目标表单执行逻辑 if ( 'my_el_form' !== $form_name ) { return; } $fields = $record->get_field( [ 'id' => 'emailval' ] ); if ( empty( $fields ) ) { return; } $field = current( $fields ); // 当emailval字段为空时,移除MailerLite动作 if ( '' === trim( $field['value'] ) ) { remove_action( 'elementor_pro/forms/action/run', [ ElementorPro\Modules\Forms\Integrations\MailerLite\MailerLite::instance(), 'action_mailerlite' ], 10 ); } }, 20, 2 );
关键说明
- 使用
after_validation钩子:该钩子触发于表单验证通过后、提交动作执行前,是修改动作列表的合适时机 - 移除动作回调:通过
remove_action精准移除MailerLite的动作处理函数,确保仅跳过该动作,保留「收集提交内容」的默认行为 - 优先级设置:将当前钩子的优先级设为20(高于默认的10),保证在MailerLite动作执行前完成移除操作
内容的提问来源于stack exchange,提问作者Matredok
相关产品推荐
相关产品推荐

