Wie kann ich einen dynamischen Wert für post_updated_messages basierend auf dem Rückgabewert von post_updated festlegen?

Ich bin vertraut damit, wie man benutzerdefinierte Nachrichten für Post-Updates mit dem post_updated_messages Hook post_updated_messages . Diese Frage ist etwas anders.

Ich habe eine function / Aktion Hook auf post_updated :

 function my_custom_function($post_id) { $response = ping_other_service_and_get_confirmation($post_id); syslog(LOG_INFO, 'Response:' . $response['body']); return $response['body']; } add_action( 'post_updated', 'my_custom_function'); 

Angenommen, die function ping_other_service_and_get_confirmation() einen anderen Webdienst an, lässt sie wissen, dass der Post aktualisiert wurde, und gibt eine Bestätigungsnachricht als Zeichenfolge zurück. Momentan protokolliere ich diese Zeichenfolge in den Systemprotokollen, was für die Entwicklung gut ist, aber ich muss diese Zeichenfolge in der Postaktualisierungsnachricht verwenden, damit Clients die Bestätigung sehen können. Wie kann ich das machen? Ist es möglich?

Solutions Collecting From Web of "Wie kann ich einen dynamischen Wert für post_updated_messages basierend auf dem Rückgabewert von post_updated festlegen?"

Ich glaube, dass Sie mit Filter Hook post_updated_messages das gleiche Ergebnis post_updated_messages können, wonach Sie suchen. Sie brauchen nur die Post-ID für die Bestätigung, die Sie tun, was Sie auch hier tun können, indem Sie $_GET['post'] das Ihre Post-ID enthält.

Hier ist die function, die das Ding machen wird.

 function your_modified_message( $messages ){ if(isset($_GET['post'])){ $post_id = $_GET['post']; // get your response for respective post_id $response = ping_other_service_and_get_confirmation($post_id); syslog(LOG_INFO, 'Response:' . $response['body']); // get your information concatenated with update post message in next line $messages['post'][1] = $messages['post'][1] . '
' . $response['body']; return $messages; } else { return $messages; } } // using filter hook to modify your message add_filter( 'post_updated_messages', 'your_modified_message',10,1);

Hoffe, das wird für dich funktionieren.

Ich habe schließlich eine Lösung gefunden, die query vars verwendet, um die Statusmeldung an die nächste Seite zu übergeben, damit sie in post_updated_messages verwendet werden post_updated_messages . Hier ist eine vereinfachte Version von dem, was ich getan habe, wobei alle functionsnamen der Einfachheit halber geändert wurden, um sich auf das Problem zu konzentrieren;

Zuerst habe ich den Wert, den ich brauchte, zu $_POST var $_POST ;

 function my_custom_function($post_id) { $response = ping_other_service_and_get_confirmation($post_id); $_POST['status_response'] = $response['body']; } add_action( 'post_updated', 'my_custom_function'); 

Wenn dieser Wert dann festgelegt wird, leite ich die Post-Bearbeitungsseite auf die gleiche URL mit einer hinzugefügten Abfrage-Zeichenfolge um, die den Wert hat, den ich benötige;

 function pass_status_response($location){ if (isset($_POST['status_response'])) { $location = esc_url_raw(add_query_arg('status_response', $_POST['status_response'], $location)); } return $location; } add_filter('redirect_post_location', 'pass_status_response'); 

Abschließend post_updated_messages ich diesen Wert den Nachrichten in post_updated_messages .

 function add_status_message($messages) { if ($_GET['status_response']) { $post = get_post(); $post_type = get_post_type($post); foreach ($messages[$post_type] as &$msg) { $msg = $msg . 'Status: ' . $_GET['status_response']; } } return $messages; } add_filter('post_updated_messages', 'add_status_message'); 

Dies scheint ziemlich gut zu funktionieren, ist jedoch sehr experimentell. Wenn jemand Feedback darüber hat, wie ich diese Lösung verbessern könnte, würde ich es begrüßen. Vielen Dank!