it-swarm.com.de

Benutzerdefinierter Beitragstyp save_post-Aktion wird nicht ausgelöst

Sorry wenn dies hier schon beantwortet ist. Ich sah mich um und konnte keine Antworten auf meine Frage finden, also dachte ich, ich würde meine eigenen posten.

Ich erstelle ein Plugin für einen Kunden, das Kundenfeedback zu einem kürzlich abgeschlossenen Projekt sammelt.

Der Administrator würde das System verwenden, um dem Kunden eine "Eingabeaufforderung" zu senden, in der er ihn um sein Feedback mit einem Link zu einem Formular auf der Website bittet.

Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "customer_prompts" erstellt, der nur ein Titelfeld und einige benutzerdefinierte Felder enthält, die in einer benutzerdefinierten Datenbanktabelle gespeichert sind, keine Post-Meta-Felder.

Unten ist mein Code für die Aktion save_post. Es scheint, dass wenn ich auf "Veröffentlichen" klicke, die Aktion "save_post" nicht ausgelöst wird und nur der Titelwert in wp_posts gespeichert wird.

add_action('save_post', 'save_Prompt');
function save_Prompt($post_id){
$post = get_post($post_id);

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
          return;

    if ( 'customer_Prompt' == $_POST['post_type'] ) 
    {
        if ( !current_user_can( 'edit_page', $post_id ) )
            return;
    }
    else
    {
        if ( !current_user_can( 'edit_post', $post_id ) )
        return;
    }

    global $wpdb;

    $Prompt_id = com_create_guid();
    $customer_feedback_name = $_POST['_sdg_customer_feedback_name'];
    $customer_feedback_email = $_POST['_sdg_customer_feedback_email'];
    $salesperson = $_POST['_sdg_salesperson'];

    $values = array(
        'id' => $Prompt_id, 
        'sdg_customer_name' => $customer_feedback_name,
        'sdg_customer_email' => $customer_feedback_email,
        'sdg_salesperson' => $salesperson,
        'sdg_post_id' => $post->id
    );

    $insert = $wpdb->insert($table_name, $values);

    if($insert) {
        mail($customer_feedback_email, 'hello', 'hello');
    }

}

Jede Hilfe wäre sehr dankbar, da ich nicht herausfinden kann, was hier vor sich geht.

Danke, Jamie.

3
JamieCassidy

Die Aktion "save_post" wird nur aufgerufen, wenn wir tatsächlich etwas in der Postseitenform geändert haben. Wenn wir nur die Update-Taste drücken, ohne etwas zu ändern, wird die Aktion "save_post" nicht aufgerufen.

Dies ist wichtig, wenn wir einen benutzerdefinierten Beitragstyp bearbeiten, für den benutzerdefinierte Metafelder vorhanden waren. Wenn wir uns auf die Aktion "save_post" verlassen und nur die Inhalte in unseren benutzerdefinierten Meta-Boxen ändern, passiert nichts.

Die Lösung besteht darin, den Aktions-Hook "pre_post_update" anstelle von "save_post" zu verwenden.

http://wordpress.org/support/topic/save_post-not-working-getting-called#post-2335557

12
revo

edit Haben Sie versucht, print_r('hello world'); die(); nach function save_Prompt($post_id){ zu setzen, um sicherzustellen, dass die Funktion tatsächlich vom Aktions-Hook erfasst wird?/bearbeiten

Einige Probleme könnten im Spiel sein:

1: Ihr global wpdb muss ganz oben in Ihrer Funktion stehen, vor all Ihren if-bedingten Anweisungen.

2: Ihre $_POST-Variablen sollten Bedingungen von if(isset($_POST['food')) aufweisen, um zu überprüfen, ob die zu sendenden Daten tatsächlich gesetzt sind, bevor Sie Ihre Funktion erreichen. Andernfalls wird möglicherweise ein schwerwiegender Fehler verursacht, sodass die Daten nicht in die Datenbank eingegeben werden.

3: Probieren Sie global $post oben in der Funktion aus. Anschließend können Sie die Variablen des Posts wie $post->post_type über die Variable $post als Objekt aufrufen.

4: Fügen Sie $wpdb->print_errors; die(); nach $insert = $wpdb->insert($table_name, $values); hinzu, falls Ihre DB-Abfrage nicht korrekt ist.

Hoffentlich sollte einer von denen Ihr Problem beheben.

1
Caleuanhopkins

ich denke, der var_dump in add_action ('save_post', Callback-Funktion wird nicht angezeigt!

hinzufügen

$fp = fopen('c:\data.txt', 'w');
fwrite($fp, print_r($post_id, true));
fclose($fp);

und überprüfe ob 'data.txt' existiert, ja es ist wahr durch save_post.

:)

0
Futz

Das ist mir passiert. Es stellte sich heraus, dass ich ein Seitenvorlagen-Set (ein Post-Meta-Wert für _wp_page_template) für eine Vorlage hatte, die es nach einem Themenwechsel nicht mehr gab. Dieses Stück Code in wp-includes/post.php:

if ( ! empty( $postarr['page_template'] ) ) {
    $post->page_template = $postarr['page_template'];
    $page_templates = wp_get_theme()->get_page_templates( $post );
    if ( 'default' != $postarr['page_template'] && ! isset( $page_templates[ $postarr['page_template'] ] ) ) {
        if ( $wp_error ) {
            return new WP_Error( 'invalid_page_template', __( 'Invalid page template.' ) );
        }
        ...

bricht ab, bevor save_post ausgelöst wird.

0
Vic

Ich hatte genau dieses Problem und dachte, ich würde die möglichen Antworten ergänzen, um jemandem Zeit zu sparen. Es war ein sehr einfaches Problem, das mich Tage gekostet hat, um es zu identifizieren (ich bin im Moment ein bisschen nervös - und fühle mich ein bisschen albern) ...

Es stellte sich heraus, dass ein Metabox-Formular, das generiert wurde, ein "Aktions" -Feld enthielt, das das "Aktions" -Feld des in WordPress generierten Formulars überschrieb. Das Formular wurde nur für einen benutzerdefinierten Beitrag verwendet und daher wurde die falsche Aktion übergeben zu WordPress auf POST zu ' wp-admin/post.php ' und es endete durch den Standard-Handler (am Ende der switch-Anweisung) behandelt.

Ein weiterer Nebeneffekt war, dass WordPress beim Aktualisieren oder Veröffentlichen zum integrierten Post-Index umgeleitet wurde, anstatt direkt zum bearbeiteten Post.

Die Lösung bestand darin, das verborgene Formularelement 'action' für die Metabox zu entfernen.

Ich hoffe das hilft jemandem da draußen ...

0
user3381109

Zunächst einmal würde ich vorschlagen, Ihre WordPress-Site so einzurichten, dass sie leicht zu debuggen ist. Http://codex.wordpress.org/Debugging_in_WordPress

Auf diese Weise ist es einfach zu see stuff;)

Ich glaube, Sie müssen es für Action Hook wie folgt einbinden:

add_action('save_post', 'save_Prompt', 10, 2);
function save_Prompt( $post_id, $post ){
//do whatever
}

der Hook save_post übergibt 2 Argumente.

0
WP Themes