I try to assign custom taxonomies to a page when newly added by the “publish” button.

This is the function:

function set_default_object_terms( $id, $post ) {
if ( 'publish' === $post->post_status ) {

    log_me ('From inside function: '.__FUNCTION__.', while I pressed the "publish" button. Post-ID: '.$id);

    $taxonomy_ar = get_terms( 'property-features', '' );

    foreach ($taxonomy_ar as $taxonomy_term) {          
        log_me ('Inside the function: '.__FUNCTION__.' and inside the "foreach"-loop for the ID: '.$id.' and Term: '. $taxonomy_term->name . ' and Post-ID :'. $post->ID);
        wp_set_object_terms( $post->ID, $taxonomy_ar, $taxonomy_term->name, true );  
    }
}}

and here is the hook:

add_action( 'save_post', 'set_default_object_terms', 100, 2 );

In the logfile which i added to figure out if i find all my values, all my custom taxonomies get found:

[13-May-12 16:28] be in function while "publish" is pressed with this id: **64**
[13-May-12 16:28] In the "foreach" with id: 64 and Term: **Kitchen** and Post-ID :**64**
[13-May-12 16:28] In the "foreach" with id: 64 and Term: **Stove** and Post-ID :**64**
[13-May-12 16:28] In the "foreach" with id: 64 and Term: **Pets ok** and Post-ID :**64**

But it does not assign it.
Does somebody know where the trick is?

2 Answers
2

You are using wp_set_object_terms wrong, the second parameter should be the term slug or id and the 3 parameter should be the taxonomy name, so try:

function set_default_object_terms( $id, $post ) {
    if ( 'publish' === $post->post_status ) {

        log_me ('be in function while "publish" i pressed with this id: '.$id);

        $taxonomy_ar = get_terms( 'property-features' );
        if (count($taxonomy_ar) > 0){
            foreach ($taxonomy_ar as $taxonomy_term) {          
                //create an arry with all term ids
                log_me ('In the "foreach" with id: '.$id.' and Term: '. $taxonomy_term->name . ' and Post-ID :'. $post->ID);
                $term_ids[] = $taxonomy_term->ID;
            }
            wp_set_object_terms($post->ID,$term_ids,'property-features',true);
        }
    }
}

and make sure you register the taxonomy for pages type using register_taxonomy_for_object_type ex:

register_taxonomy_for_object_type('property-features','page');

Leave a Reply

Your email address will not be published. Required fields are marked *