Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a custom post type "projects" with a custom taxonomy "project_type." If I select a project type taxonomy within the post editor screen and hit update, the taxonomy isn't updated. Worse yet, it clears all taxonomy values associated with that project. Oddly, I added a column in the admin screen to display the custom taxonomy values and I am able to update the taxonomy values via WP's built-in quick edit feature.

Here is the bulk of the custom post type and taxonomy code: http://pastebin.com/2TdmVEAE

So, I'm thinking I need some function that will amend the save post function to include the custom taxonomy data. Right now the save_post function must not include custom taxonomies in a custom post type, and that is why it is clearing the data. (side: why does it work with quick post?)

I just don't know how exactly to handle the data in the custom taxonomies to compare/write the selected taxonomies to the specific post. I've just discovered the codex on save_post... Here's what I have so far, built off another post that is similar:

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
}
}
share|improve this question
add comment

1 Answer

up vote 0 down vote accepted

If you have a custom post type and a custom taxonomy assigned to it, you do not need to handle the saving of those terms yourself, WordPress already does this for you. So you can remove your taxonomy save code.

Also you should put your register_post_type and custom taxonomy registering code inside a function, and attach it to the init hook. It's not safe to just declare them outright.

share|improve this answer
    
Thanks for the tips! Yea, I have them all registered, but on update/publish it clears the taxonomy data - so something isn't working correctly, hence my code above as an attempt to fix it. –  Joshua Nelson Apr 5 '12 at 18:35
    
I would put your registration code into functions, it may be that your getting errors or warnings because the registration functions aren't defined when the calls are made during the quick edit ajax requests –  Tom J Nowell Apr 5 '12 at 18:36
    
Also move your permalink structure stuff into the appropriate hook so it doesn't redo the same work each time you load a page, and see if the problem goes away when you comment out your metabox code –  Tom J Nowell Apr 5 '12 at 18:38
    
Ok, I moved the registration stuff into a function, hooked in with init, but still same error. I'm not sure they are related... pastebin.com/1y1qM5ZJ –  Joshua Nelson Apr 5 '12 at 19:09
    
It's good practice so better that than nothing. Is it just quick edit that this happens with or does the full editor do it too? –  Tom J Nowell Apr 5 '12 at 19:19
show 6 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.