Support » Plugin: Subscribe2 » Custom Emails for Custom Users

  • Resolved lotsamottsa


    Is there a way to manage email notifications on custom post types for user roles? I have three user roles: general, managers and admins (I’m using user role editor plugin).

    I am able to auto email all users any time a general post is created as well as my custom post types ‘jobs’.

    What I’d like to do is remove general users from all ‘jobs’ activity:

    1. Remove general users from receiving an email any time my custom post type ‘jobs’ is created.

    2. Email managers and admins every time a comment is made in a job post type.

    I am using the following code to add the custom post type, but not seeing it appear in the subscription areas as a checkbox.

    //email jobs to specific users
    function my_post_types($types) {
        $types[] = 'jobs';
        return $types;
    add_filter('s2_post_types', 'my_post_types');

Viewing 7 replies - 1 through 7 (of 7 total)
  • @lotsamottsa,

    There are four filters in Subscribe2 that you’d need to use to achieve (1). The filters are called:

    Each of these filters passes 2 arguments. The first is an array of recipient email addresses and the second if the post ID number. You would need to write a filter function that checked the post id to see if it’s in your ‘jobs’ type and then remove any general users from the array of recipients. I would probably do this unsung the array_intersect() function in PHP passing the Subscribe2 list along with a list of managers and admins as additional arguments.

    (2) is not possible in Subscribe2 as it works for posts only, not comments. You need to look for a comment notification plugin for that, perhaps Subscribe to Comments Reloaded.

    Thanks Mattyrob,
    Sorry, but my php skills are not very advanced, so I’m not familiar with some of the terminology you are using, but I did a little bit of research to try and figure this out… is this close to the template I would use to accomplish this?

    function remove_jobs_email($args){
     $args = array(
              // customer post type is jobs
              //user is general
    add_filter(s2_send_plain_excerpt_suscribers, remove_jobs_email);
    add_filter(s2_send_plain_fullcontent_suscribers, remove_jobs_email);
    add_filter(s2_send_html_excerpt_suscribers, remove_jobs_email);
    add_filter(s2_send_html_fullcontent_suscribers, remove_jobs_email);


    It’s a good start but your function can take 2 variables, the first is an array of subscribers and the second is the post ID. You might find the example on the API page useful:

    Ok, so that definitely helped, but I’m getting some error messages when publishing the post, so I’m not sure what I have wrong here: My “general” user role is the role I am trying to remove from receiving emails when a the post type job is published. This role only has the ability to “read” and read private pages, so I am guessing that is level 0?

    The error seems to be happening with the second part of my function: The errors messages are:
    1. in_array() expects parameter 2 to be array, string
    2. array_intersect() [function.array-intersect]: Argument #2 is not an array

    function s2member_filter($subscribers, $post_id) {
        // $subscribers is an array of subscriber email addresses
        $args = array(
            'role' => 's2member_level0',
            'fields' => array('user_email')
        $s2_level1 = get_users($args);
        foreach ($s2_level1 as $user) {
            $s2members[] = $user->user_email;
        // we can do thins with the $postid also
        // like amend the subscribers list of the post id is in a specific category
    	$posttype = get_post_type( $post_id );
    	if ( in_array('jobs', $posttype) ) {
        $filtered_subscribers = array_intersect($subscribers, $s2members);
    } // end s2member_filter()
    add_filter('s2_send_plain_excerpt_suscribers', 's2member_filter', 10, 2);
    add_filter('s2_send_plain_fullcontent_suscribers', 's2member_filter', 10, 2);
    add_filter('s2_send_html_excerpt_suscribers', 's2member_filter', 10, 2);
    add_filter('s2_send_html_fullcontent_suscribers', 's2member_filter', 10, 2);


    This role only has the ability to “read” and read private pages, so I am guessing that is level 0?

    You can’t guess, you need to delve into the database or look in your role management plugin and find a way to collect those users. I suspect your errors are arising as you are not getting any user data from the WordPress tables.

    Thanks Mattyrob. I ended up getting this to work without using the plugin. You’ve definitely helped me understand some things though, and steered me in the right direction. Thank you for your time.


    You are welcome – I’m glad you got things working.

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Custom Emails for Custom Users’ is closed to new replies.