WordPress.org

Ready to get started?Download WordPress

Forums

Subscribe2
[resolved] Custom Emails for Custom Users (8 posts)

  1. lotsamottsa
    Member
    Posted 5 months ago #

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

    http://wordpress.org/plugins/subscribe2/

  2. mattyrob
    Member
    Plugin Author

    Posted 5 months ago #

    @lotsamottsa,

    There are four filters in Subscribe2 that you'd need to use to achieve (1). The filters are called:
    s2_send_plain_excerpt_suscribers
    s2_send_plain_fullcontent_suscribers
    s2_send_html_excerpt_suscribers
    s2_send_html_fullcontent_suscribers

    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.

  3. lotsamottsa
    Member
    Posted 5 months ago #

    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);
  4. mattyrob
    Member
    Plugin Author

    Posted 5 months ago #

    @lotsamottsa,

    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:
    http://subscribe2.wordpress.com/support/api/

  5. lotsamottsa
    Member
    Posted 5 months ago #

    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) ) {
            //DOES ANYTHING NEED TO GO IN HERE?
        }
    
        $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);
  6. mattyrob
    Member
    Plugin Author

    Posted 5 months ago #

    @lotsamottsa,

    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.

  7. lotsamottsa
    Member
    Posted 4 months ago #

    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.

  8. mattyrob
    Member
    Plugin Author

    Posted 4 months ago #

    @lotsamottsa,

    You are welcome - I'm glad you got things working.

Reply

You must log in to post.

About this Plugin

About this Topic