• I have modified the bbpress moderation plugin since I’m not getting any response from it’s author.
    Please see this link: https://pastebin.com/EMmZK1Zt
    for my code.

    Now, my problem is I cannot make it work. I have checked the structure of wp mail and I know I’m in the right path. It’s just why it’s still not working.

    I hope someone here can help me as I’ve been struggling on this for months now.

    Thanks and have a great day ahead.

    Best regards,
    Mariz

Viewing 5 replies - 1 through 5 (of 5 total)
  • Moderator bcworkz

    (@bcworkz)

    I assume your problem is the wp_email() calls are not working? The function has specific parameters which must be in very specific formats. Review the documentation. Your usage is not matching this. Complicating things is the ‘@’ in front of the function means PHP should suppress errors from this function, even if WP_DEBUG is defined as true.

    For your own sanity, remove the @ and set WP_DEBUG to true in wp-config.php so you are notified about what errors are occurring. Replace the @ and define WP_DEBUG as false once you’re sure everything is working properly.

    Let’s look at the admin wp_email() call. You have
    wp_mail(get_option('admin_email'), sprintf(__('Ask Become Topic Notification - %s', self::TD), $blogname, $title), $message);

    The documentation has
    wp_mail( $to, $subject, $message, $headers, $attachments );

    The first parameter is the recipient as string. That looks OK.
    Next you have
    sprintf(__('Ask Become Topic Notification - %s', self::TD), $blogname, $title)
    You’ve allocated space for one string variable, but you provide two variables to fill one space. You need another %s somehow or one less variable.
    The third parameter is $message in both cases, and it’s assignment appears correct.
    The remaining parameters are optional and you don’t provide them. All good there. The only problem is the missing %s or extra variable.

    Now the user email. You have
    wp_mail($author->user_email, $blogname, $title, $message);

    You already dropped the @ here. It’d be a good idea to put one here once this is all said and done.
    First parameter is the recipient, this looks OK.
    Next is subject. You have the blog name. Not a great subject, but technically OK.
    Third is the message body. You have $title. This is probably technically acceptable, it’s a string. Surely not what you intended though.
    Fourth is the headers parameter. This parameter has very specific requirements, of which what you have in $message is almost certainly wrong. Obviously, $blogname and $title need to be combined somehow, you could do something similar to what’s done in WP core:
    sprintf('[%s] Content: "%s"'), $blogname, $title )

    That should take care of the mail functions. There may be other issues. Having WP_DEBUG defined as true should help you locate and fix any other errors. If you get stuck again, come on back ??

    Thread Starter shearamariz

    (@mariz_p)

    Thanks for the response @bcworkz.
    I have done it using this line of code:

    function notify_user($post_id) {
    
    		if (get_option(self::TD . 'notifies')) {
    
    			$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
    			$blogurl = get_option('home');
    			$author = wp_get_current_user();
    			/* Add body of topic/reply to email */
    			$post = get_post($post_id);
    			$title = $post->post_title;
    			$message  = sprintf(__('Your Topic is under moderation in %s: %s', self::TD), $blogname, $blogurl) . "\r\n\r\n";
    			$message .= $post->post_title . "\r\n" . $post->post_content . "\r\n\r\n";			
    
    			wp_mail($author->user_email, $blogname, $title, $message);
    		}
    	}

    I’ve got it running but my problem here is I can’t edit it’s style or how it supposed to show. thanks once again for the help.

    Moderator bcworkz

    (@bcworkz)

    OK, good progress!

    I take it you want to use HTML to style the email messages? The default mail mime type is “text/plain” which essentially does not allow any kind of styling. You could change it to “text/html”, but leaving it set to that can lead to other problems. There’s a Trac ticket (#23578) that explains it.

    What you can do is set it to HTML by adding a filter for your one message and then set it back to plain again immediately afterwards by removing the filter you just added.

    add_filter('wp_mail_content_type', 'mp_set_html_content_type');
    @wp_mail( $author->user_email, $blogname, $title, $message );
    // Reset content-type to avoid conflicts— https://core.trac.www.ads-software.com/ticket/23578
    remove_filter('wp_mail_content_type', 'mp_set_html_content_type');
    
    //exit your function
    
    function mp_set_html_content_type() {
        return 'text/html';
    }

    Thread Starter shearamariz

    (@mariz_p)

    I haven’t tried this yet but I’ll keep you posted.
    I have a new problem that needs to be fix first than this.
    Thanks for the help @bcworkz.. ??

    test

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘add user notification in bbpress moderation’ is closed to new replies.