Kurztipp: Metadaten und Inline-Bearbeitung
Wenn Sie eine benutzerdefinierte Metabox haben oder mit benutzerdefinierten Metadaten auf Post-Ebene arbeiten, stoßen Sie möglicherweise auf ein Problem mit versehentlich gelöschten Daten, wenn Sie sie aus dem Bildschirm „ Massenbearbeitung “ speichern.
Das Setup für das Problem sieht in etwa so aus:
- Sie haben eine Sammlung von Beiträgen, die geändert werden müssen,
- Sie laden alle Beiträge in den Massenbearbeitungsbildschirm (wie oben gezeigt),
- Sie wenden eine Änderung an.
Sobald dies geschieht, tritt die Änderung ein, löscht jedoch alle benutzerdefinierten Post-Metadaten, die Sie möglicherweise haben.
Dies ist nur ein kleines Codebeispiel dafür, wie die Speichermethode für Ihre benutzerdefinierten Metadaten aussieht (das heißt, ich lasse eine Reihe von Schutzklauseln weg):
<?php
/**
* Save the options in the meta box.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Das Problem dabei ist, dass nicht überprüft wird, ob dies vom Massenbearbeitungsbildschirm kommt. Aus diesem Grund können die Metadaten vollständig gelöscht werden.
Um dies zu handhaben, müssen wir prüfen, ob die Serialisierung vom Bildschirm „Massenbearbeitung“ stammt. Auf diese Weise können wir frühzeitig zurückkehren und verhindern, dass der Code ausgeführt wird. In seiner einfachsten Form können Sie so etwas tun :
<?php
/**
* Save the options in the meta box. Ignore the action if it's coming from the
* Bulk Edit screen.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
if (isset( $_POST['_inline_edit'])) {
return;
}
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Beachten Sie, dass ich nicht empfehle, dies wörtlich für universelle Fälle oder für den universellen Gebrauch zu verwenden, da es aggressiv ist. Stattdessen denke ich, dass es sich lohnt, diesen Codex – Artikel durchzulesen, um mehr Informationen darüber zu erhalten, wie die Inline-Bearbeitung sowohl auf der Server- als auch auf der Client-Seite funktioniert.
Der Beitrag soll zeigen, wie benutzerdefinierte Metadaten unbeabsichtigt gelöscht werden können, und grundlegende Grundlagen dafür schaffen, wie Sie dies verhindern können.