BuddyDev

Search

[Resolved] Can you help me with this code.

Tagged: 

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36187
              function post_notification($post_ID) {
        global $wpdb ;
    
        $post = get_post($post_ID) ;
        add_filter('wp_mail_content_type','set_contenttype') ;
    
        $aUsersID = bp_get_following_ids('user_id='.bp_loggedin_user_id() );
        foreach($aUsersID as $iUserID) {
            $user     = get_userdata($iUserID) ;
            
            $to       = $user->user_email ;
            $subject  = '[' . get_bloginfo('name') . '] Nuevo post en el blog' ;
            $message  = 'Nuevo Post: <a href="' . get_permalink($post_ID) . '">' . $post->post_title . '</a>' ;
            $message .= '<br/><br/>' ;
            $message .= nl2br($post->post_content) ;
            wp_mail( $to, $subject, $message ) ;
        }
    }
    
    add_action('publish_post', 'post_notification') ;

    Hey, I am adding this code to send email to ser followers when they post their blog post but the email is not getting sent to all the followers but to every user, Can you help where I am getting wrong.

    I would really appreciate your help.

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36195

    Any Idea Brajesh?

  • Keymaster
    (BuddyDev Team)
    Posts: 24623
    Brajesh Singh on #36197

    Hi Kumar,
    Thank you for the question.

    I am not seeing any issue with the above code. The only improvement I can suggest is taking the subject/message out of the loop as they are same for everyone.

    Regards
    Brajesh

    PS:- I am assuming you have defined the function ‘set_contenttype’ too.

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36228

    Hi, Brajesh.

    Thanks for replying.

    But the code is not sending email to the user followers when the user publishes a post, here is a complete code.

    
    function wpdocs_set_html_mail_content_type() {
        return 'text/html';
    }
    function post_notification($post_ID) {
        global $wpdb ;
    
        $post = get_post($post_ID) ;
        add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
    
        $aUsersID = bp_get_following_ids('user_id='.bp_loggedin_user_id() );
        foreach($aUsersID as $iUserID) {
            $user     = get_userdata($iUserID) ;
            
            $to       = $user->user_email ;
            $subject  = '[' . get_bloginfo('name') . '] Nuevo post en el blog' ;
            $message  = 'Nuevo Post: <a href="' . get_permalink($post_ID) . '">' . $post->post_title . '</a>' ;
            $message .= '<br/><br/>' ;
            $message .= nl2br($post->post_content) ;
            wp_mail( $to, $subject, $message ) ;
        }
    }
    
    add_action('publish_post', 'post_notification') ;
  • Keymaster
    (BuddyDev Team)
    Posts: 24623
    Brajesh Singh on #36229

    Hi Kumar,
    I see the issue now.

    Here is updated code. Please give it a try.

    
    
    function wpdocs_set_html_mail_content_type() {
    	return 'text/html';
    }
    
    function post_notification( $new_status, $old_status, $post ) {
    	global $wpdb;
    
    	if ( $new_status === $old_status || 'publish' !== $new_status ) {
    		return;
    	}
    
    	$post = get_post( $post );
    
    	add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
    
    	$aUsersID = bp_get_following_ids( 'user_id=' . bp_loggedin_user_id() );
    	foreach ( $aUsersID as $iUserID ) {
    		$user = get_userdata( $iUserID );
    
    		$to      = $user->user_email;
    		$subject = '[' . get_bloginfo( 'name' ) . '] Nuevo post en el blog';
    		$message = 'Nuevo Post: <a href="' . get_permalink( $post ) . '">' . $post->post_title . '</a>';
    		$message .= '<br/><br/>';
    		$message .= nl2br( $post->post_content );
    		wp_mail( $to, $subject, $message );
    	}
    }
    
    add_action( 'transition_post_status', 'post_notification', 10, 3 );
    

    Regards
    Brajesh

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36248

    Thanks for replying brajesh but the code is not working and it is not sending any email to the author followers when they publish a new post.

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36259

    Any idea, Brajesh?

  • Keymaster
    (BuddyDev Team)
    Posts: 24623
    Brajesh Singh on #36264

    Hi Kumar,
    could be an issue with mail delivery. Please try installing a plugin such as mail log to see if it goes or not?

    Regards
    Brajesh

  • Participant
    Level: Initiated
    Posts: 15
    kumar on #36302

    Hi, Brajesh, I have installed the mail log plugin but there doesn’t seem to be any issue related to the mail delivery.

  • Participant
    Level: Guru
    Posts: 900
    Tosin on #36514

    Hello,

    Brajesh i’m really interested in this code what does it do. can it be improved or merged into this code.
    The code you posted only allows for email notification but no bp notification.

    This code below has never worked for me can it be improved with your code into an addon

    
     /*
    Plugin Name: BuddyPress Follow Notify
    Description: This code will send an email and a BP notification to members when someone they are following publishes a post. There is a settings page in  WP Admin > Settings > Buddypress Followers Notify where you can set the Sender Name, Sender Email and select which post type to notify on.
    Version: 1.1.0
    */
    
    /*  Add settings page to WP Admin */
    add_action( 'admin_menu', 'bp_follow_notify_add_admin_menu' );
    add_action( 'admin_init', 'bp_follow_notify_settings_init' );
    function bp_follow_notify_add_admin_menu(  ) { 
    	add_options_page( 'Buddypress Folllowers Notify', 'Buddypress Folllowers Notify', 'manage_options', 'buddypress_folllowers_notify', 'bp_follow_notify_options_page' );
    }
    function bp_follow_notify_settings_init(  ) { 
    	register_setting( 'pluginPage', 'bp_follow_notify_settings' );
    	add_settings_section(
    		'bp_follow_notify_pluginPage_section', 
    		__( '', 'bp_follow_notify' ), 
    		'bp_follow_notify_settings_section_callback', 
    		'pluginPage'
    	);
    	add_settings_field( 
    		'bp_follow_notify_sender_name', 
    		__( 'Sender Name', 'bp_follow_notify' ), 
    		'bp_follow_notify_sender_name_render', 
    		'pluginPage', 
    		'bp_follow_notify_pluginPage_section' 
    	);
    	add_settings_field( 
    		'bp_follow_notify_sender_email', 
    		__( 'Sender Email', 'bp_follow_notify' ), 
    		'bp_follow_notify_sender_email_render', 
    		'pluginPage', 
    		'bp_follow_notify_pluginPage_section' 
    	);
    	
    	add_settings_field( 
    		'bp_follow_notify_post_types', 
    		__( 'Post Types', 'bp_follow_notify' ), 
    		'bp_follow_notify_post_types_render', 
    		'pluginPage', 
    		'bp_follow_notify_pluginPage_section' 
    	);
    }
    function bp_follow_notify_sender_name_render(  ) { 
    	$options = get_option( 'bp_follow_notify_settings' );
    	?>
    	<input type='text' name='bp_follow_notify_settings[bp_follow_notify_sender_name_render]' value='<?php echo $options['bp_follow_notify_sender_name_render']; ?>'>
    	<?php
    }
    function bp_follow_notify_sender_email_render(  ) { 
    	$options = get_option( 'bp_follow_notify_settings' );
    	?>
    	<input type='text' name='bp_follow_notify_settings[bp_follow_notify_sender_email]' value='<?php echo $options['bp_follow_notify_sender_email']; ?>'>
    	<?php
    }
    function bp_follow_notify_post_types_render(  ) { 
    	$options = get_option( 'bp_follow_notify_settings' );
    	$args = array(
    	   'public'   => true
    	);
    	$post_types = get_post_types( $args );
    	?>
    	<select name='bp_follow_notify_settings[bp_follow_notify_post_types][]' multiple='multiple'>
        <?php foreach ( $post_types as $post_type ) { ?>
        	<?php $selected = in_array( $post_type, $options['bp_follow_notify_post_types'] ) ? ' selected="selected" ' : ''; ?>
    		<option value='<?php echo $post_type; ?>' <?php echo $selected; ?>><?php echo $post_type; ?></option>
        <?php } ?>
    	</select>
    
    <?php
    }
    function bp_follow_notify_settings_section_callback(  ) { 
    	echo __( '', 'bp_follow_notify' );
    }
    function bp_follow_notify_options_page(  ) { 
    	?>
    	<form action='options.php' method='post'>
    		
    		<h2>Buddypress Folllowers Notify</h2>
    		
    		<?php
    		settings_fields( 'pluginPage' );
    		do_settings_sections( 'pluginPage' );
    		submit_button();
    		?>
    		
    	</form>
    	<?php
    }
    add_action( 'new_to_publish', 'bp_follow_notify_author_followers', 99, 1 );
    add_action( 'draft_to_publish', 'bp_follow_notify_author_followers', 99, 1 );
    function  bp_follow_notify_author_followers( $post ){
    	
    	$options = get_option( 'bp_follow_notify_settings' );
    	
    	if ( !in_array( get_post_type(), $options['bp_follow_notify_post_types'] ) ) {
    		return;
    	}
    				
    	$author_id = $post->post_author;
    	$author_name = get_the_author_meta( 'display_name' , $author_id );
    	$counts  = bp_follow_total_follow_counts( array( 'user_id' => $author_id ) );
    	
    	if ( $counts['followers'] > 0 ) {
    		
    		$followers = bp_follow_get_followers( array( 'user_id' => $author_id ) )  ;
    						
    		foreach($followers as $follower){
    			
    			/* Email Notification */
    			
    			$user = get_user_by( 'id' , $follower );
    			$follower_email = $user->user_email;
    			$blog_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
    			$subject = '[' . $blog_name . '] New Post From ' . $author_name;
    			
    			$message = sprintf( __( '
    				%2$s
    				
    				%3$s
    				
    				Link: %4$s
    				-----------
    				You are receiving this email because you are following %1$s.', 'bp-follow-notify' ),
    					$author_name,
    					$post->post_title,
    					wp_trim_words( $post->post_content ),
    					get_permalink( $post->ID )
    				);
    		
    			$sender_name = ( !empty( $options['bp_follow_notify_sender_name']) ? $options['bp_follow_notify_sender_name'] : $blog_name );
    			$sender_email = ( !empty( $options['bp_follow_notify_sender_email'] ) ? $options['bp_follow_notify_sender_email'] : 'no-reply@' . $blog_name );
    		
    			$headers = '';
    			
    			$headers  = "MIME-Version: 1.0" . "\r\n";
    			$headers .= "Content-type: text/html; charset=" . get_bloginfo('charset') . "" . "\r\n";
    			$headers .= "From: " . $sender_name . " <" . $sender_email . ">" . "\r\n";
    			
     	
    			if( wp_mail( $follower_email, $subject , $message, $headers ) ) {
    				
    				//echo "sending success";
    			} else {
    				
    				//echo "sending failed";
    			}	
    			
    			/* BP Notification */
    			
    			if ( bp_is_active( 'notifications' ) ) {
    				
    				bp_notifications_add_notification( array(
    					'user_id'           => $user->ID,
    					'item_id'			=> $post->ID,
    					'secondary_item_id' => $author_id,
    					'component_name'    => 'bp_follow_notify',
    					'component_action'  => 'follow_new_post',
    					'date_notified'     => bp_core_current_time(),
    					'is_new'            => 1,
    				) );
    				
    			}				
    			
    		} //end loop		
    	} 	
    	
     }
    /*  Register component */
    function bp_follow_notify_filter_notifications_get_registered_components( $component_names = array() ) {
    	// Force $component_names to be an array
    	if ( ! is_array( $component_names ) ) {
    		$component_names = array();
    	}
    	
    	array_push( $component_names, 'bp_follow_notify' );
    	
    	return $component_names;
    }
    add_filter( 'bp_notifications_get_registered_components', 'bp_follow_notify_filter_notifications_get_registered_components' );
    /* Format screen notfications */ 
    add_filter( 'bp_notifications_get_notifications_for_user', 'bp_follow_notify_format_notifications', 9, 5  );
    function bp_follow_notify_format_notifications( $action, $item_id, $secondary_item_id, $total_items, $format = 'string' ) {
    		
    	if ( 'follow_new_post' === $action ) {
    		
    		if ( (int) $total_items > 1 ) {
    			$title = sprintf( __( '%d new posts have been published', 'bp-follow-notify' ), (int) $total_items );
    			$link  = bp_get_notifications_permalink();
    		} else {
    			$title = sprintf( __( '%s has published a new post.', 'bp-follow-notify' ), bp_core_get_user_displayname( $secondary_item_id ) );
    			$link = get_permalink( $item_id );
    		}
    		
    		// WordPress Toolbar
    		if ( 'string' === $format ) {
    			$return = apply_filters( 'bp_follow_notify_notification', '<a href="' . esc_url( $link ) . '" title="' . esc_attr( title ) . '">' . esc_html( $title ) . '</a>', $title, $link );
    		// Deprecated BuddyBar
    		} else {
    			$return = apply_filters( 'bp_follow_notify_notification', array(
    				'text' => $title,
    				'link' => $link
    			), $link, (int) $total_items, $title, $title );
    		}
    		
    		return $return;
    		
    	}
    	
    	return $action;
    } 
    

You must be logged in to reply to this topic.

This topic is: resolved