所以我在重力表单提交上执行了一些 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;
}
}
感谢评论者的一些见解和建议,问题是插件实例在重定向时重置,因此设置 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;
}