重力表单重定向确认不会触发 gform_after_submission 挂钩

问题描述 投票:0回答:1

所以我在重力表单提交上执行了一些 PHP 和 JS,并且我遇到了一些障碍,我一生都无法在他们的文档中找到答案,所以我希望其他人以前遇到过这个问题,因为它似乎很常见。

我有以下 PHP 代码(为了简化问题,我删除了很多代码),基本上在提交后,我填充

$this->categoryStats
以在我的本地化脚本中使用。当我将表单确认设置为消息时,这确实有效,但是,我需要将其发送到感谢页面,并且在将确认从消息更改为页面后,它不再填充。

我只能假设这是由于钩子优先级或当存在重定向时

gform_after_submission
不会触发。

欢迎任何见解和想法。

<?php

GFForms::include_addon_framework();

class GFSurveyReport extends GFAddOn {
    private static $_instance = null;
    private $categoryStats = [];

    public static function get_instance() {
        if ( self::$_instance == null ) {
            self::$_instance = new GFSurveyReport();
        }

        return self::$_instance;
    }

    public function init() {
        parent::init();
        add_action( 'gform_after_submission', array( $this, 'curate_form_answers'), 10, 2 );

        // Enqueue scripts and styles
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts_and_styles' ) );
    }

    public function enqueue_scripts_and_styles() {
        wp_enqueue_script( 'gf-survey-plugin-js', plugin_dir_url( __FILE__ ) . '../js/plugin.js', array( 'jquery' ), '1.0.0', true );
        
        // Pass PHP variables to JavaScript
        wp_localize_script( 'gf-survey-plugin-js', 'categoryStats', $this->categoryStats );
    }

    public function curate_form_answers($entry, $form){
        $this->categoryStats = $categoryStats;
    }
}
wordpress gravity-forms-plugin gravityforms
1个回答
0
投票

感谢评论者的一些见解和建议,问题是插件实例在重定向时重置,因此设置 PHP Cookie 或尝试通过传统方式访问不起作用。

相反,我最终必须将值存储在 PHP 会话中,然后我连接到重力形式确认钩子,在执行之前将值附加到重定向 URL,以便我的 JS 可以从新页面上的 URL 读取值.

add_filter( 'gform_confirmation', array( $this, 'customize_redirect_url'), 10, 4 );

public function customize_redirect_url( $confirmation, $form, $entry, $ajax ) {
    // Retrieve the original redirect URL
    $redirect_url = $confirmation['redirect'];

    // Start or resume a session
    if (!session_id()) {
        session_start();
    }

    // Check if categoryStats is set in the session
    if (isset($_SESSION['categoryStats'])) {
        // Retrieve the categoryStats data from the session
        $categoryStats = $_SESSION['categoryStats'];

        // Append the categoryStats data to the redirect URL
        $redirect_url .= (strpos($redirect_url, '?') !== false ? '&' : '?') . 'categoryStats=' . urlencode($categoryStats);

        // Update the confirmation array with the modified redirect URL
        $confirmation['redirect'] = $redirect_url;
    }

    return $confirmation;
}
© www.soinside.com 2019 - 2024. All rights reserved.