-
Evans a publié un message
Problème avec le shortcode qui ne fonctionne pas sur le frontend
J'ai créé un shortcode personnalisé pour une application d'enquête. Lorsque j'utilise le shortcode dans le sous-menu du tableau de bord, tout fonctionne parfaitement - le formulaire s'affiche et le bouton se déclenche comme prévu.
However, when I try to use the same shortcode on the frontend, while the form is displayed, the button does not function properly (it doesn’t trigger any action).
I have already shared my code and cannot figure out where the issue lies. Could you help identify the problem?😅
class Class_frontend { public function __construct() { add_shortcode('greeting', [$this, 'display_survey']); } public function display_survey() { global $wpdb; $current_user_id = get_current_user_id(); $table_name = $wpdb->prefix . 'code_survey'; $query = "SELECT * FROM $table_name ORDER BY id DESC LIMIT 1"; $results = $wpdb->get_results($query); if (!empty($results)) { ob_start(); foreach ($results as $result) { ?> <form id="survey-form" action=""> <input type="radio" id="answer_1" name="surveypool" value="<?php echo esc_attr($result->question_1); ?>" /> <label for="answer_1"><?php echo esc_html($result->question_1); ?></label><br /> <input type="radio" id="answer_2" name="surveypool" value="<?php echo esc_attr($result->question_2); ?>" /> <label for="answer_2"><?php echo esc_html($result->question_2); ?></label><br /> <input type="radio" id="answer_3" name="surveypool" value="<?php echo esc_attr($result->question_3); ?>" /> <label for="answer_3"><?php echo esc_html($result->question_3); ?></label><br /> <input type="radio" id="answer_4" name="surveypool" value="<?php echo esc_attr($result->question_4); ?>" /> <label for="answer_4"><?php echo esc_html($result->question_4); ?></label><br /> <button type="button" id="generate_button" data-survey-id="<?php echo esc_attr($result->id); ?>">Soumettre</button> <input type="hidden" name="trp-form-language" value="fr"/></form> <?php } return ob_get_clean(); } return '<p>No survey available.</p>'; // Fallback message if no data is found. }
Javascript
jQuery(document).ready(function ($) { jQuery('#generate_button').on('click', function () { alert('working'); // Debugging step const selectedAnswer = jQuery('input[name="surveypool"]:checked').val(); const surveyId = jQuery(this).data('survey-id'); // Correct attribute selection if (!selectedAnswer) { alert('Please select an option.'); return; } jQuery.ajax({ url: ajax_ob.ajax_url, type: 'POST', dataType: 'json', data: { action: 'submit_survey', answer: selectedAnswer, survey_id: surveyId, user_id: ajax_ob.user_id, }, success: function (response) { if (response.success) { alert(response.data); $('#survey-form').remove(); // Optionally hide form after submission } else { alert(response.data); } }, error: function () { alert('An error occurred. Please try again.'); }, }); }); });