User preference IDs can be stored in each author or category meta data. Thus each category or author has an array of user IDs that wish to get notifications. Hook one of the post update filters like “save_post”. In the added callback, get the user IDs from author meta and any category meta. Loop through the IDs. For each user ID, get the user’s email, then send them a message with wp_mail().
Naturally you will need functions to add or remove preferences from meta data associated with any particular post. You could add code to your theme’s sidebar template that checks for user preference of the current post and displays either subscribe or unsubscribe links accordingly. The links can trigger Ajax calls to add or remove the user ID from related meta data.
]]>