Dans ma fonction d'enregistrement des valeurs de champ personnalisées, j'ajoute quelques contrôles pour empêcher que les valeurs ne soient effacées lors d'une sauvegarde automatique ou d'une modification rapide.
add_action('save_post', 'save_my_post');
function save_my_post($post_id)
{
// Stop WP from clearing custom fields on autosave,
// and also during ajax requests (e.g. quick edit).
if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX))
return;
// Clean, validate and save custom fields
$myfield = ( ! isset($_POST['myfield'])) ? '' : strval($_POST['myfield']);
update_post_meta($post_id, 'myfield', $myfield);
}
Il semble cependant que les champs personnalisés sont toujours effacés dans le cas d’une modification en masse. Les contrôles DOING_AUTOSAVE
et DOING_AJAX
ne s'appliquent pas aux éditions en bloc.
Je me rends compte que vous ne pouvez simplement pas appeler update_post_meta
si les variables $_POST
applicables ne sont pas définies. Cela ne fonctionnerait pas dans le cas des cases à cocher, cependant.
Idéalement, une simple vérification pour déterminer si nous sommes dans une édition en masse ou non ferait l'affaire. Des idées?
Vous pouvez rechercher une modification en masse en consultant la variable bulk_edit
dans $_GET
ou $_POST
. Les modifications en bloc sont généralement des demandes GET dans la mesure où je les ai enquêtées.
Notez que $_REQUEST
prend en compte les données GET et POST. Dans wp-admin/edit.php
, ils font également une vérification de isset()
pour $_REQUEST['bulk_edit']
.
function save_my_post($post_id)
{
// Do nothing during a bulk edit
if (isset($_REQUEST['bulk_edit']))
return;
// ...
}