Je viens ici en homme désespéré ! J'ai voulu rendre mon plugin Wordpress de messagerie interne plus fluide en intégrant AJAX. Sur Wordpress, Ajax fonctionne avec jQuery, mon problème est lorsque l'on envoie un e-mail, on fait appel à une fonction javascript qui va faire un appel à une fonction qui va envoyer le message... Mais le problème est que la fonction d'envoie vérifie si les données ont bien été transmises... Et en l'occurence, et bien isset($_POST['desti']) ou isset($_REQUEST['desti']) ne marche pas ! Voici mon code :
Script :
jQuery('#send_mail').submit(function (e) {
e.preventDefault(); // Le navigateur ne peut pas envoyer le formulaire
var donnees = jQuery(this).serialize(); // On créer une variable content le formulaire sérialisé
alert(donnees.substring(8));
console.log('hello');
jQuery.ajax({
url : ajaxurl,
type : 'POST',
cache: false,
data : '?action=send_mail&' + donnees,
success : function(code_html, statut){
alert(code_html);
jQuery(code_html).appendTo("#composition"); // On passe code_html à jQuery() qui va nous créer l'arbre DOM !
},
});
});
PHP du plugin :
add_action('wp_enqueue_scripts', 'ajax_test_enqueue_scripts');
add_action('wp_ajax_send_mail', 'send_mail' );
function send_mail()
{
echo '<script>alert(\'hello\');</script>';
if (isset($_REQUEST['desti']))
{
?>
<?php
echo '<script>alert(\'script correct\');</script>';
global $wpdb;
if (empty($_POST['obj']))
{
$obj = 'No Subject';
}
else
{
$obj = $_POST['obj'];
}
$test = $wpdb->get_var($wpdb->prepare('SELECT can_mail FROM wp_users WHERE id = %d', get_current_user_id()));
if (isset($_POST['envoie']))
{
$folder = 'inbox';
if ( $test == 0 && $_POST['desti'] != 1)
{
$folder = 'draft';
echo '<script>alert(\'Vous n\\\'êtes pas autorisé à envoyer des messages, votre mail va être sauvegardé dans les brouillons.\n Merci de contacter votre administrateur par e-mail : admin.\');</script>';
}
}
else
{
$folder = 'draft';
}
if (isset($_POST['id_mess']) && isset($_POST['brouillon']))
{
$wpdb->update('wp_messagerie', array('receiver' => $_POST['desti'], 'objet' => $obj, 'message' => $_POST['mess']), array('id' => $_POST['id_mess']), array('%d', '%s', '%s'), array('%d', '%s', '%s'));
$wpdb->query('UPDATE wp_messagerie SET date_envoi = NOW() WHERE id = ' . $_POST['id_mess']);
}
else
{
$response = $wpdb->query($wpdb->prepare('INSERT INTO wp_messagerie(sender, receiver, unread, objet, message, date_envoi, dossier) VALUES (%d, %d, 1, %s, %s, NOW(), %s);', get_current_user_id(), $_POST['desti'], $obj, $_POST['mess'], $folder));
if (isset($_POST['id_mess']) && isset($_POST['envoie']))
{
$wpdb->query($wpdb->prepare('DELETE FROM wp_messagerie WHERE id = %d', $_POST['id_mess']));
}
}
echo '?page=messagerie&action=inbox';
die();
}
wp_die();
}
function ajax_test_enqueue_scripts() {
wp_enqueue_script( 'script_send', plugins_url( '/script_send.js', __FILE__ ), array('jquery'), '1.0', true );
wp_localize_script( 'script_send', 'script', array(
'ajax_url' => admin_url( 'admin-ajax.php' )
));
}
Voilà, j'espère que vous pourrez m'aider ! Parce que lorsque que je regarde dans la requête POST effectué, les données sont bien transmises...
[Wordpress][AJAX/jQuery] Problème récup $_POST
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.