Machen Sie Metabox von benutzerdefinierten Post-Typ vollständig autosave- und Bulk- / Quick-Edit-kompatibel

Ich versuche, einen benutzerdefinierten Post-Typ zu erstellen, und ich habe das gleiche Problem, das hier beschrieben wird; Meine benutzerdefinierten Meta-Informationen wurden beim manuellen Speichern korrekt gespeichert, gingen aber verloren, sobald der automatische Speicher-AJAX mindestens einmal ausgeführt wurde.

Also verwende ich jetzt die gezeigte Lösung, um das zu beheben:

function save_stationinfo($post_id) { if((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit'])) return; update_post_meta($post_id, 'station_url', $_POST['station_url']); update_post_meta($post_id, 'station_subheadline', $_POST['station_subheadline']); update_post_meta($post_id, 'station_streams', $_POST['station_streams']); } 

Dies deaktiviert jedoch die automatische Speicherfunktionalität für alle benutzerdefinierten Metadaten. Was ich eigentlich will, ist, meine Metabox voll kompatibel mit der Autosave, Ajax (nicht sicher, was der DOING_AJAX-Modus ist, obwohl) und Bulk-Edit / Quick-Edit-functionalität von WordPress, so dass benutzerdefinierte Meta-Felder automatisch gespeichert werden und ich Ich bin in der Lage, einige der Felder dem Quick- / Bulk-Edit-Dialog hinzuzufügen.

Kann mir bitte jemand hier helfen oder mir zeigen, wo ich ein Tutorial dafür finden kann? (Das Entfernen der if-statement hilft hier nicht, da es mich natürlich zu meinem ersten Problem zurückführt.) Danke im Voraus!

Solutions Collecting From Web of "Machen Sie Metabox von benutzerdefinierten Post-Typ vollständig autosave- und Bulk- / Quick-Edit-kompatibel"

WordPress sendet nicht den Inhalt von benutzerdefinierten Feldern während der automatischen Speicherung (nur Titel, Slug und Inhalt). Aus diesem Grund wird der Inhalt des benutzerdefinierten Felds gelöscht, wenn Sie versuchen, die Daten zu speichern: Sie können den Unterschied zwischen gelöschtem und fehlendem Inhalt nicht sehen.

Ich würde dafür eine separate Autosave-function erstellen, da die Art und Weise, wie WordPress damit umgeht, jederzeit geändert werden kann und es keine echte API gibt. Die gespeicherten Felder sind fest codiert ohne Filter:

 if ( fullscreen && fullscreen.settings.visible ) { post_data["post_title"] = jQuery('#wp-fullscreen-title').val() || ''; post_data["content"] = jQuery("#wp_mce_fullscreen").val() || ''; } else { post_data["post_title"] = jQuery("#title").val() || ''; post_data["content"] = jQuery("#content").val() || ''; } if ( jQuery('#post_name').val() ) post_data["post_name"] = jQuery('#post_name').val(); 

Sehen Sie sich wp-admin/includes/ajax-actions.php und wp-includes/js/autosave.js an, um zu sehen, wie es funktioniert.

Erstellen Sie also im Prinzip eine Kopie dieser JavaScript-Datei, entfernen Sie die Inhalte, die Sie wiederverwenden können, und ändern Sie nur die Felder, die Sie automatisch speichern möchten. Dann reihen Sie es mit 'autosave' in seine Abhängigkeitsliste ein.

Eine weitere Idee ist es, meine Antwort hier mit einem Link zu meinem Custom Bulk / Quick Edit WordPress-Plugin und dem vollständigen Gist-Code für ein benutzerdefiniertes Post-Typ-Bulk- und Schnellbearbeitungs-Szenario für 3-benutzerdefinierte Felder zu überprüfen.

Der core behandelt das DOING_AUTOSAVE , ignoriert aber ein direktes DOING_AJAX weil wir wollen, dass es trotzdem funktioniert.