J'ai un formulaire qui soumet des données de publication à la fonction PHP appelée recherche, la fonction de recherche interroge une table que j'ai ajoutée à la base de données WordPress. Après l'envoi, j'aimerais rediriger vers une page de résultats que j'ai ajoutée dans le tableau de bord. Jusqu'à présent, je ne peux que rediriger avec Ajax, mais je voudrais rediriger depuis le fichier PHP.
Ajax
$('#finderForm').on('submit', function(e) {
//e.preventDefault();
var form = $('#finderForm').serialize();
$.ajax({
type: "POST",
url: "wp-admin/admin-ajax.php?action=search",
data: form,
success: function (data) {
console.log('Submission was successful.');
console.log(data);
console.log(window.location.href);
//window.location.href = '?page_id=7=' + data;
},
error: function (data) {
console.log('An error occurred.');
console.log(data);
},
});
});
Ma fonction de recherche dans PHP Fichier, je veux rediriger à partir d'ici:
add_action("wp_ajax_search", "search");
function search() {
$name = $_POST['name'];
$mydb = new wpdb('root','','i3264185_wp1','localhost');
$query = "SELECT event_name FROM event WHERE event_name LIKE '$name%'";
$result = $mydb->get_results($query);
$result = json_encode($result);
wp_redirect( home_url('/?page_id=7') );
exit;
echo $result;
die();
}
Tu ne peux pas. Si vous souhaitez rediriger un utilisateur avec PHP, vous devez définir l'en-tête de la réponse. Si vous éditez des données, vous ne pourrez pas, et vous obtiendrez une erreur Header already sent
.
Regardez cette ligne:
wp_redirect( home_url('/?page_id=7') );
exit;
echo $result;
die();
Lorsque vous utilisez exit
(identique à die()
), vous terminez le script. Les prochaines lignes ne seront jamais exécutées. Donc, ma suggestion est d'utiliser soit AJAX pour rediriger, ou changez votre formulaire en quelque chose comme ceci:
<form action="<?php echo admin_url ( 'admin-ajax.php' ); ?>">
<!-- This is to set the action of your query args -->
<input type="hidden" name="action" value="search"/>
<!-- Rest of your form here -->
</form>
Ensuite, supprimez la ligne après la variable exit
et le script AJAX, si vous ne vous en fiez pas à quelque chose d'important.