Automatically add a tag according to custom metadata

I’m trying to figure out how to make a function to automatically add a “featured” tag to a post, based on a checkbox in a metabox I’ve added to the edit screen.

I think the function I need to use is wp_set_object_terms, but I don’t get how it works. I know how to check if those checkboxes are active or not, but that´s all.

Read More

I hope someone can put me on the right track with this.

Related posts

Leave a Reply

3 comments

  1. I accidentally found this question searching for something similar, and I liked your approach, so I improved your code a bit.

    1. I updated the action hook so it’s being triggered on save AND update.
    2. Added the wp_remove_object_terms to be able to switch back ( toggle ) custom meta box value ( in this case check-box value ).

    function works fine with both, regular and custom post types, also can be used with tags, categories or custom taxonomies too.

    function set_term( $post_id, $your_term ){
    
        $post_id = get_the_ID();
    
        $your_term = get_post_meta( $post_id, 'your_custom_meta_id', true ); 
    
        // check the custom meta-box checkbox value
        if ( $your_term == '1' ) {
            // Create a new term if checked
            wp_set_object_terms( $post_id, 'YourTerm', 'your_custom_taxonomy', true );
        } else {
            // Remove the created term if unchecked
            wp_remove_object_terms( $post_id, 'YourTerm', 'your_custom_taxonomy' );
        }
    }
    
    add_action( 'save_post', 'set_term', 10, 3 );
    
  2. Ok, found the problem.

    This code works like a charm:

    function is_featured_post(){
    $postid = get_the_ID();
    $featured = get_post_meta($postid, 'wpcf-slider-if', true); if ( $featured == 1 ) { 
        wp_set_object_terms( $postid, 'Destacado', 'post_tag', true );
    }
    }
    
    add_action ( 'publish_post', 'is_featured_post' );
    

    But it only works in standard post, not in custom post types. There is a hook to do the same with custom post types?