web-dev-qa-db-fra.com

Comment attribuer une taxe par défaut aux pages sur 'save_post'?

J'essaie d'attribuer des taxonomies personnalisées à une page lors de l'ajout du bouton "Publier".

C'est la fonction:

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 );  
    }
}}

et voici le crochet:

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

Dans le fichier journal que j'ai ajouté pour déterminer si je trouve toutes mes valeurs, toutes mes taxonomies personnalisées sont trouvées:

[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**

Mais cela ne l'attribue pas. Est-ce que quelqu'un sait où est le truc?

3
JSS

Vous utilisez wp_set_object_terms faux, le deuxième paramètre devrait être le terme slug ou id et le paramètre 3 devrait être le nom de taxonomie, alors essayez:

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);
        }
    }
}

et assurez-vous d'enregistrer la taxonomie pour le type de page en utilisant register_taxonomy_for_object_type ex:

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