web-dev-qa-db-fra.com

post-effacement des méta-données sur la sauvegarde automatique

Pour commencer, j'utilise cette excellente réponse pour créer des types de publication personnalisés, ainsi qu'une méthode personnalisée pour insérer ces types de publication dans d'autres pages. Vous pouvez afficher cette réponse ici: Champ personnalisé/méta renseigné par liste déroulante des postes existants?

Je rencontre un problème, mais lorsque WordPress Auto se sauvegarde, il efface toutes les métadonnées que j'ai insérées dans les formulaires.

EXEMPLE:

Je sélectionne les 3 menus déroulants que je veux dans ma metabox et clique sur update.

La page est rechargée et les 3 choix sont toujours sélectionnés. Dans phpMyAdmin, je peux rechercher les métadonnées et voir le tableau en place comme il se doit.

J'attends maintenant que Wordpress soit sauvegardé automatiquement.

Dès que cela se produit, je peux soit actualiser la page (pas mettre à jour, mais actualiser) et les métadonnées sont perdues, ou je peux rechercher les métadonnées dans phpMyAdmin et rien ne s'affichera (c'est-à-dire: c'est parti).

Je suppose que cela a quelque chose à voir avec le besoin de se lier à un autre crochet (un crochet de mise à jour automatique) ou à quelque chose, mais même dans ce cas, cela n'a aucun sens de supprimer vos métadonnées (plutôt que de ne pas mettre à jour automatiquement il).

Dernière remarque: si vous copiez et collez le code Mikes dans le fichier functions.php, vous devriez être capable de recréer mon erreur (dans WordPress 3.1) très facilement.

1
William

Eh bien, comme toujours, je me sens comme un mannequin, mais après des heures passées à chercher sur Internet et à constater qu'il semble que beaucoup de gens se posent cette question et que je n'arrive pas à trouver une réponse n'importe où, je suppose que je ne suis pas si lent!

le code important est quelque chose dans ce sens:

add_filter('wp_insert_post_data',array(__CLASS__,'filter_wp_insert_post_data'),10,2);
static function filter_wp_insert_post_data($data, $postarr) {
     update_post_meta($postarr['ID'],'_offices',$postarr['offices']);
     return $data;
}

ce qui se passait, c'est que ce code est exécuté, mais il n'y a pas de $ postarr ['offices'], donc il insère des données vierges à la place! donc la solution rapide à ceci est:

if(isset($postarr['offices']))
update_post_meta($postarr['ID'],'_offices',$postarr['offices']);

Si les données que vous souhaitez insérer ne sont pas définies, elles ne seront pas mises à jour!

Je ne suis pas sûr de savoir pourquoi wordpress ne transmet pas ces variables lors d'une sauvegarde automatique, mais c'est vrai lors d'une sauvegarde, mais dans les deux cas, cela fonctionne donc je suis heureux!

1
William

En utilisant save post action, je vérifie l'état

<?php

add_action('save_post' ,'my_save_postdata');

function my_save_postdata ( $post_id )
{
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
        return $post_id;
    }

    // logic

}
3
Marcin