web-dev-qa-db-fra.com

poste meta se supprimer lors de la sauvegarde

J'ai un problème avec l'enregistrement de la méta de publication sur tous les types de publication, par défaut et personnalisé. Je me connecte à save_post pour exécuter ma fonction, et ce qui se passe, c'est que le méta-post est ajouté, mais immédiatement supprimé. C'est ce que j'ai en ce moment:

function saveSidebarMeta($postId) {
    $toAdd = $_POST['collection-topics'];
    foreach ($toAdd as $topic) {
        add_post_meta($postId, 'collection-topic', $topic);
    }
}

add_action('save_post', 'saveSidebarMeta', 100);

À l'heure actuelle, la priorité est fixée à 100, ce qui enregistre le méta de l'article, mais si la page est à nouveau sauvegardée, la méta de l'article est supprimée à moins que les informations correctes soient ajoutées et que je ne veuille pas que ce soit la suppression et l'ajout. les données à chaque fois que quelqu'un enregistre une publication.

Si la priorité est définie sur 10 par défaut, les données sont enregistrées mais immédiatement supprimées. Je le sais parce que 1.) add_post_meta () renvoie la méta_key, qui est alors absente de la base de données et 2.) si je mets un die () instruction juste après add_post_meta () , les métadonnées s'affichent dans le tableau. .

J'ai d'autres fonctions d'économie de post meta très bien. Est-ce que je manque quelque chose de vraiment simple ici? Cela fait un moment que j'examine cette question et que je suis à court de lieux ou d'indications pour trouver une solution. Toute aide serait appréciée. Merci!

1
Eric Strom

Exportez-vous les données sauvegardées sur la page de modification avant de sauvegarder la publication? Sinon, vous obtiendrez peut-être des données $ _POST ['collection-topics'] vides, puis enregistrez des données vides ou nulles.

Je ferais un chèque avant de faire add_post_meta()

if ( empty($_POST['collection-topics']) ) return;
1
stoi2m1

Voici un début, mais nous devons également voir le code qui génère le formulaire.

Une possibilité est que la sauvegarde automatique vous dérange, alors essayez cette variante de votre code.

add_action('save_post', 'saveSidebarMeta', 100);

function saveSidebarMeta( $postId ) {

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

        $toAdd = $_POST['collection-topics'];
        foreach ($toAdd as $topic) {
            add_post_meta($postId, 'collection-topic', $topic);
        }
    }

}

Mais si nous pouvons également voir votre code générer un formulaire, je pourrais peut-être développer davantage.

0
Andy Macaulay-Brook