Einfügen mit Ajax

Ich verwende den folgenden Code, um ein Formular von einer WordPress-Seite zu senden.

 $j=jQuery.noConflict(); $j(document).ready(function(){ $j("#enqform").validate({ submitHandler: function () { dataString = $j("#enqform").serialize(); $.ajax({ type: "POST", url: "http://www.mysite.co.uk/wp-content/themes/mytheme/lib/form-process.php", data: dataString, error: function(jqXHR, textStatus, errorThrown){ console.error("The following error occured: " + textStatus, errorThrown); }, success: function(data) { console.log("Hooray, it worked!"); } }); } }) });  <form action="" class="contact-box" id="enqform" method="post">  <input type="text" id="firstname" name="firstname" value="" class="required" />   <input type="hidden" name="nonce" value="" />  

Dies ist der Code in der Datei form-process.php:

  $firstname, 'post_status' => 'publish', 'post_type' => 'mycpt' ); $pid = wp_insert_post($new_post); if( $pid ) { add_post_meta( $pid, 'cpt_firstname', $firstname, true ); } } } ?> 

Das Formular funktioniert in wp_insert_post , scheint aber zu sterben, wenn es zu wp_insert_post , was zu einem 500 Internal Server Error führt.

Irgendwelche Ideen, wo ich falsch liege, bitte?

Solutions Collecting From Web of "Einfügen mit Ajax"

Was sagt das Fehlerprotokoll? Ist das der komplette Inhalt von form-process.php ? Wenn das so ist, dann könnte das Problem sein, dass die function wp_insert_post() nicht definiert ist, weil der WordPress-Core nicht geladen wurde.

Deshalb hat WordPress eine AJAX-API . Im Folgenden finden Sie ein Beispiel für die Verwendung dieser API auf der Serverseite:

 add_action( 'admin_ajax_your_form_action', 'wpse_126886_ajax_handler' ); function wpse_126886_ajax_handler() { // maybe check some permissions here, depending on your app if ( ! current_user_can( 'edit_posts' ) ) exit; $post_data = array(); //handle your form data here by accessing $_POST $new_post_ID = wp_insert_post( $post_data ); // send some information back to the javascipt handler $response = array( 'status' => '200', 'message' => 'OK', 'new_post_ID' => $new_post_ID ); // normally, the script expects a json respone header( 'Content-Type: application/json; charset=utf-8' ); echo json_encode( $response ); exit; // important } 

Der your_form_action slug ist der »Auslöser« Ihres Callbacks. Sie müssen diesen Slug an Ihren Anfrageparameter namens action anhängen. Um mit der .serialize() Schritt zu halten, .serialize() ich, diesen Slug als versteckte Eingabe in Ihrem Formular zu übergeben:

  

Schließlich müssen Sie die URL wp-admin/admin-ajax.php für Ihre AJAX-Anfrage verwenden:

 $.ajax({ type: "POST", url: "http://www.mysite.co.uk/wp-admin/admin-ajax.php", data: dataString, error: function(jqXHR, textStatus, errorThrown){ console.error("The following error occured: " + textStatus, errorThrown); }, success: function(data) { console.log("Hooray, it worked!"); } });