web-dev-qa-db-fra.com

Comment empêcher les champs personnalisés d'être effacés lors d'une modification en bloc?

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?

3
Geert

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;

    // ...
}
5
Geert