web-dev-qa-db-fra.com

Personnalisation de l'enregistrement des données de taxonomie personnalisées dans l'écran d'édition

J'ai un type de message personnalisé "projets" avec une taxonomie personnalisée "type_projet". Si je sélectionne une taxonomie de type de projet dans l'écran d'édition de publication et que je clique sur mettre à jour, la taxonomie n'est pas mise à jour. Pire encore, il efface toutes les valeurs de taxonomie associées à ce projet. Bizarrement, j'ai ajouté une colonne dans l'écran d'administration pour afficher les valeurs de taxonomie personnalisées et je suis en mesure de mettre à jour les valeurs de taxonomie via la fonction d'édition rapide intégrée de WP.

Voici le gros du type de message personnalisé et du code de taxonomie: http://Pastebin.com/2TdmVEAE

Je pense donc avoir besoin d’une fonction qui modifiera la fonction de sauvegarde de la publication pour inclure les données de taxonomie personnalisées. À l'heure actuelle, la fonction save_post ne doit pas inclure de taxonomies personnalisées dans un type de publication personnalisé. C'est pourquoi elle efface les données. (côté: pourquoi ça marche avec quick post?)

Je ne sais tout simplement pas comment gérer les données dans les taxonomies personnalisées afin de comparer/écrire les taxonomies sélectionnées au poste spécifique. Je viens de découvrir le codex sur save_post ... Voici ce que j'ai jusqu'à présent, construit à partir d'un autre article similaire:

add_action('save_post', 'dcg_taxonomy_save');

// Save data from meta box
function dcg_taxonomy_save($post_id) {
global $post;

// verify nonce
if (!wp_verify_nonce($_POST['project_type'], basename(__FILE__))) {
    return $post_id;
}

// check autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return $post_id;
}

// check permissions
if ('page' == $_POST['project']) {
    if (!current_user_can('edit_page', $post_id)) {
        return $post_id;
    }
} elseif (!current_user_can('edit_post', $post_id)) {
    return $post_id;
}

$old = wp_get_post_terms($post_id, 'project_type', array("fields" => "all") ); // grabs all terms for this post in the taxonomy
$new = $_POST[ ...?... ]; // <-- how do I grab the custom taxonomy values

// probably need to run a foreach through the array of taxonomy values, yea?
if ($new != $old) {
    wp_set_post_terms($post_id, $new, 'project_type', false ) // sets new taxonomy terms
}
}
2
Joshua Nelson

Si vous avez attribué un type d'article personnalisé et une taxonomie personnalisée, vous n'avez pas besoin de gérer vous-même la sauvegarde de ces termes, WordPress le fait déjà pour vous. Vous pouvez donc supprimer votre code de sauvegarde de taxonomie.

Vous devez également placer votre code register_post_type et votre code d’enregistrement de taxonomie personnalisé dans une fonction et le lier au crochet init. Il n'est pas prudent de simplement les déclarer.

0
Tom J Nowell