allow only one post in specific category

After the post save (using save_post hook) you check if the saved post has your “unique” category, and if so remove the category from the other posts, keeping the one you just saved.


add_action( 'save_post', 'set_post_unique_category', 10,3 );

function set_post_unique_category( $post_id, $savedPost, $update ) {

    // Only set for post_type = post
    if ( 'post' !== $savedPost->post_type ) {
        return;
    }

    // Check if post has your desired category
    if ( ! has_category('best-post', $savedPost) ){ //use your category slug
        return;
    }

    // Get the best-post category term by its slug
    $term = get_term_by( 'slug', 'best-post', 'category' );

    //Now let's find the other posts with your category
    $args = array( 'category' => $term->term_id, 'post_type' =>  'post' );  //set the arguments for the query
    $postsList = get_posts( $args );  

    foreach ($postsList as $post) { //Remove the category from the found posts
         if ($post->ID == $post_id ) //but skip the just saved post
              continue;

         wp_remove_object_terms( $post->ID, 'best-post', 'category' );
    }



}

I haven’t tested it so you could encounter syntax errors or wrong property names, but the logic should be fine, at least to get you an idea of what you should do. A good google search plus a wordpress codex stroll are always your friends 😉