You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elementor Pro表单添加自定义提交后动作失败求助

解决Elementor Pro表单自定义提交动作不显示的问题

你的核心问题是只定义了自定义动作类,但没有把它注册到Elementor的表单动作管理器中,同时直接修改Elementor Pro核心文件的做法既不安全(插件更新会覆盖修改)也不符合规范。以下是正确的实现步骤和修正后的代码:


正确实现步骤

  1. 不要修改Elementor Pro核心文件,推荐将代码放在主题的functions.php文件中,或创建一个独立的自定义插件(更稳定,避免主题更新丢失代码)。
  2. 必须通过Elementor提供的钩子注册自定义动作,让表单管理器识别你的动作类。

完整可运行代码

/**
 * 注册Elementor表单自定义提交动作
 */
add_action( 'elementor_pro/forms/actions/register', function( $form_actions_manager ) {
    // 确保Elementor表单动作基类已加载
    if ( ! class_exists( '\ElementorPro\Modules\Forms\Classes\Action_Base' ) ) {
        return;
    }

    // 自定义动作类
    class CustomFormAction extends \ElementorPro\Modules\Forms\Classes\Action_Base {
        // 动作唯一标识(内部使用)
        public function get_name() {
            return 'translate-action';
        }

        // 下拉菜单中显示的动作名称
        public function get_label() {
            return __( 'Translate Action', 'elmformaction' );
        }

        // 注册动作对应的设置面板
        public function register_settings_section( $widget ) {
            $widget->start_controls_section(
                'section_translate',
                [
                    'label' => __( 'Translate Action', 'elmformaction' ),
                    'condition' => [
                        'submit_actions' => $this->get_name(),
                    ],
                ]
            );

            $widget->add_control(
                'success_image',
                [
                    'label' => __( 'Success Image', 'elmformaction' ),
                    'type' => \Elementor\Controls_Manager::MEDIA,
                    'label_block' => true,
                    'separator' => 'before',
                    'description' => __( 'Select the image to be displayed after the form is submitted successfully.', 'elmformaction' ),
                ]
            );

            $widget->end_controls_section();
        }

        // 表单提交时执行的逻辑
        public function run( $record, $ajax_handler ) {
            $settings = $record->get( 'form_settings' );

            if ( empty( $settings['success_image'] ) ) {
                return;
            }

            $ajax_handler->add_response_data( 'success_image', $settings['success_image']['url'] );
        }

        // 导出模板时清理自定义设置(可选)
        public function on_export( $element ) {
            unset( $element['success_image'] );
            return $element;
        }
    }

    // 将自定义动作添加到表单动作管理器
    $form_actions_manager->register( new CustomFormAction() );
} );

// 可选:注册文本域以支持多语言(若不需要可删除)
add_action( 'init', function() {
    // 若放在主题中,将plugin_dir_path(__FILE__)替换为get_stylesheet_directory() . '/languages/'
    load_plugin_textdomain( 'elmformaction', false, plugin_dir_path( __FILE__ ) . 'languages/' );
} );

验证方法

  1. 将代码添加到目标文件后,刷新WordPress后台。
  2. 打开Elementor编辑器,编辑任意表单组件。
  3. 在「表单设置」→「提交后动作」下拉菜单中,即可看到Translate Action选项。

为什么之前的方法无效

  • 直接放到functions.php但未注册:Elementor不会自动扫描并加载自定义动作类,必须通过elementor_pro/forms/actions/register钩子主动注册。
  • 修改Elementor Pro核心文件:插件更新会完全覆盖核心目录的修改,且Elementor默认不会自动扫描新增的动作文件,需要修改核心加载逻辑(不推荐)。

内容的提问来源于stack exchange,提问作者John Downey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:45:06