2017-10-11 1 views
1

Je suis en train de créer un formulaire pour que les utilisateurs puissent envoyer des messages depuis le frontend. Une fois le formulaire soumis, les utilisateurs doivent être redirigés vers l'article qu'ils viennent de créer.

J'ai ce code dans mes fonctions.php. Cependant, il rend mon site vide ...

Je pense que c'est lié à la ligne exit(), j'ai essayé de le modifier mais ça ne marche pas, rien ne se passe du tout. Cela montre juste une page blanche.

<?php 
    wp_register_script('validation', 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js', array('jquery')); 
    wp_enqueue_script('validation'); 


    $post_information = array(
     'post_title' => wp_strip_all_tags($_POST['postTitle']), 
     'post_content' => $_POST['postContent'], 
     'post_type' => 'post', 
     'post_status' => 'publish' 
    ); 

    $post_id = wp_insert_post($post_information); 
    $url = get_permalink($post_id); 
    wp_redirect($url); 
    exit(); 

    ?> 

Avez-vous des idées? Comment puis-je résoudre ce problème? Merci!

+1

Est-il simplement dans votre functions.php ou est-il enveloppé dans une fonction qui est ajoutée à un hook d'action avec add_action ou quelque chose de similaire? – janh

+0

C'est comme ça dans mes fonctions.php .. – heroickoala

Répondre

1

OK, ça ne marchera pas comme ça. Tout d'abord, vous ne devez pas ajouter de scripts de ce type lorsque le fichier functions.php est chargé (car il a été chargé beaucoup trop tôt, avant que WP n'ait décidé quoi faire avec la requête provenant du navigateur) - utilisez les scripts wp_enqueue_scripts que:

<?php 
function add_my_scripts() { 
    wp_register_script('validation', 'http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js', array('jquery')); 
    wp_enqueue_script('validation'); 
} 
add_action('wp_enqueue_scripts', "add_my_scripts"); 
?> 

votre création d'un nouveau parcours post sur chaque demande - même pour cette demande quand veut votre navigateur pour montrer que le nouveau poste.

Selon exactement ce dont vous avez besoin, vous pouvez mettre cela en un crochet d'action aussi bien, mais il devrait aider déjà si vous vérifiez qu'il était en fait une requête POST qui contient un postTitle, quelque chose comme ceci:

<?php 
if($_SERVER["REQUEST_METHOD"] == "POST" && array_key_exists("postTitle", $_POST)) { 
    $post_information = array(
     'post_title' => wp_strip_all_tags($_POST['postTitle']), 
     'post_content' => $_POST['postContent'], 
     'post_type' => 'post', 
     'post_status' => 'publish' 
    ); 

    $post_id = wp_insert_post($post_information); 
    if(is_wp_error($post_id)) { 
     print "An error occured :(\n"; 
     var_export($post_id); 
    } 
    else { 
      $url = get_permalink($post_id); 
      wp_redirect($url); 
    } 
    exit(); 
} 
?> 
+0

Awesome! Fonctionne parfaitement! Merci pour l'explication! :) – heroickoala