Formularkurzcode speichert keine Daten in der WP-database

Ich entwickle ein Plugin, das beim Aktivieren des Plugins eine benutzerdefinierte Tabelle erstellt. Das Plugin ermöglicht es Benutzern, einen Formular-Shortcode hinzuzufügen, um Daten für Leads zu sammeln.

Ich habe den Punkt erreicht, an dem entweder die Daten gespeichert werden, aber ich kann keinen neuen Beitrag erstellen (ich bekomme die “Header bereits gesendet”, wenn die Publish-Schaltfläche im WP-Editor geklickt wird) oder, ich bin dazu in der Lage Erstellen Sie einen neuen Post, das Formular wird jedoch über den Shortcode angezeigt ABER die Daten werden nicht in der database gespeichert.

Ich habe mir die Haare ausgezogen, um herauszufinden, was ich falsch mache.

Jede Hilfe in der richtigen Richtung wäre sehr willkommen.

Hier ist der Formularprozesscode.

//Process form data function el_process_form(){ if (isset($_POST['everlead'])) { if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['post_type'] ) && $_POST['post_type'] == "everlead"){ $name = stripcslashes($_POST["name"]); $email = stripcslashes($_POST["email"]); $phone = stripcslashes($_POST["phone"]); $website = stripcslashes($_POST["website"]); // Do some minor form validation to make sure there is content if (trim($name) == "" ) { echo 'Please enter your name. 
'; } if (trim($email) == "" ) { echo 'Please enter a valid email address.
'; } if (trim($phone) == "" ) { echo 'Please enter a contact number.
'; } if (trim($website) == "" ) { echo 'Please enter your website url.
'; } global $wpdb; //Set time $formtime = date('mdY h:i:a'); $ipaddress = $_SERVER['REMOTE_ADDR']; //Table data $data = array( 'name' => $name, 'email' => $email, 'phone' => $phone, 'website' => $website, 'date' => $formtime, 'ipaddress' => $ipaddress ); //set lead data $table = $wpdb->prefix . 'el_leads'; $wpdb->insert( $table, $data, array('%s', '%s', '%s', '%s', '%s') ); } } } add_action( 'init', 'el_process_form' );

Eine seltsame Sache mit dem Code über ^^^. Alles funktioniert gut, wenn Sie auf einem lokalen Server (xampp) if (isset($_POST['everlead'])) { aber ich bekomme den Fehler “Header bereits gesendet” Fehler auf einer Live-Site. ‘

Wenn ich diese if-statement vor dem Formularprozess hinzufüge, kann ich die Daten nicht in der database speichern.

  function el_process_form(){ if(isset($_POST['post_type'])){ ...process form data } } add_action('init', 'el_process_form' ); 

Der obige Code ermöglicht es mir, einen neuen Post zu erstellen (wie im vorherigen Absatz erwähnt), aber die Daten werden nicht gespeichert.

Solutions Collecting From Web of "Formularkurzcode speichert keine Daten in der WP-database"

Ok, aus irgendeinem Grund funktioniert es jetzt. Anstatt mich an ‘init’ zu hängen, habe ich ‘the_post’ benutzt und der Form-Shortcode macht’s. Ich habe kein Problem mehr mit der Veröffentlichung eines neuen Beitrags oder der nicht gespeicherten Daten. Auch keine “Header-Informationen nicht ändern – Header bereits gesendet” -Fehler.

Die function

 function el_process_form(){ if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['post_type'] ) && $_POST['post_type'] == "everlead"){ $name = stripcslashes($_POST["name"]); $email = stripcslashes($_POST["email"]); $phone = stripcslashes($_POST["phone"]); $website = stripcslashes($_POST["website"]); // Do some minor form validation to make sure there is content if (trim($name) == "" ) { echo 'Please go back and enter your name. 
'; exit(); } if (trim($email) == "" ) { echo 'Please go back and enter a valid email address.
'; exit(); } if (trim($phone) == "" ) { echo 'Please go back and enter a contact number.
'; exit(); } if (trim($website) == "" ) { echo 'Please go back and enter your website url.
'; exit(); } global $wpdb; //Set time $formtime = date('mdY h:i:a'); $ipaddress = $_SERVER['REMOTE_ADDR']; //Table data $data = array( 'name' => $name, 'email' => $email, 'phone' => $phone, 'website' => $website, 'date' => $formtime, 'ipaddress' => $ipaddress ); //set lead data $table = $wpdb->prefix . 'el_leads'; $wpdb->insert( $table, $data, array('%s', '%s', '%s', '%s', '%s') ); }

}

Ich benutze ‘the_post’ und alles ist in Ordnung

 add_action( 'the_post', 'el_process_form' ); 

Jetzt [el_form buttonsize="block"] mein [el_form buttonsize="block"] und zeigt das Formular auf jeder Seite oder Post an. Vor allem speichert es die Daten in der database.

Ich muss tiefer gehen, um herauszufinden, warum ‘the_post’ über ‘init’ funktioniert, wenn ein Formular-Shortcode verwendet wird.