J'utilise un type de publication personnalisé avec des champs méta personnalisés, mais l'enregistrement automatique et la boîte de dialogue "modifications non enregistrées" ne semblent pas être déclenchés pour ces champs méta personnalisés. L'enregistrement automatique n'est pas aussi important pour moi que la boîte de dialogue des modifications non enregistrées - y a-t-il un moyen de le déclencher?
function add_meta_boxes() {
add_meta_box('places_location', __('Location'), array(&$this, 'location_box'), 'place', 'normal', 'high');
}
function location_box($post) {
wp_nonce_field(plugin_basename(__FILE__), 'places_location_nonce');
$lat = get_post_meta($post->ID, 'places_lat', true);
$lng = get_post_meta($post->ID, 'places_lng', true);
?>
<p>
<label>
Latitude:
<input name="places_lat" value="<?php echo esc_attr($lat); ?>" />
</label>
<label>
Longitude:
<input name="places_lng" value="<?php echo esc_attr($lng); ?>" />
</label>
</p>
<?php
}
function save_place($id) {
// skip unverified location nonces
if(!wp_verify_nonce($_POST['places_location_nonce'], plugin_basename(__FILE__))) return;
// skip autosave calls
// commenting this out still doesn't trigger saving these fields on autosave
//if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// update our custom post meta
update_post_meta($id, 'places_lat', (float)$_POST['places_lat']);
update_post_meta($id, 'places_lng', (float)$_POST['places_lng']);
}
Le code en effet ne regarde que l'éditeur TinyMCE ou le champ de titre et de contenu si l'éditeur est masqué:
window.onbeforeunload = function(){
var mce = typeof(tinyMCE) != 'undefined' ? tinyMCE.activeEditor : false, title, content;
if ( mce && !mce.isHidden() ) {
if ( mce.isDirty() )
return autosaveL10n.saveAlert;
} else {
title = $('#post #title').val(), content = $('#post #content').val();
if ( ( title || content ) && title + content != autosaveLast )
return autosaveL10n.saveAlert;
}
};
Vous pouvez remplacer ce gestionnaire onbeforeunload
par le vôtre (assurez-vous d'inclure la fonctionnalité existante, bien sûr). Ou jouez avec l'état isDirty()
de l'éditeur TinyMCE et cette valeur autosaveLast
?
J'ai résolu ce problème en utilisant cet excellent plugin jQuery qui vérifie l'état de données incorrect d'un formulaire. Il contient des méthodes pour vérifier les champs ajoutés/supprimés/modifiés via javascript. Ça donne un coup de pied au cul!
Je n'ai pas manipulé le "AUTOSAVE" (pour le moment). J'espère que quelqu'un trouvera cela utile.