0
votes

I have a custom post which is submitted by the visitor from front end. Visitor's submitted post status is pending.

Now when admin change the post status from pending to publish, I want to send an email to the author of this post. author email collected by custom field.

function send_mails_on_publish( $new_status, $old_status, $post ) {
    if ( 'publish' !== $new_status or 'publish' === $old_status or 'trainee' !== get_post_type( $post ) )
        return;

    $author = get_post_meta( $post_id, $tr_user_reg_email, true );

    $body = sprintf( 'Hey there is a new entry!
        See <%s>',
        get_permalink( $post )
    );


    wp_mail( $author, 'New entry!', $body );
}
add_action( 'transition_post_status', 'send_mails_on_publish', 10, 3 );

This is what I'm trying. But this does not work. Anybody can help me? Thanks in advance :)

2
why do you have the "or 'publish' === $old_status? - aren't you only checking if something is published? not if something is removed from publish? - Stender
if it is a test site - you can try to see if you are even getting past you first if() - try to var_dump($author); - and should it not be $post->ID instead of $post_id? - Stender
this is a collected snippet, "or 'publish' === $old_status? is not required. only need to checked newly published post - M Salauddin Morshed
also, you are not closing the function before you are adding the action - Stender
The function is closed, look at the bottom of code block, maybe i can't wrap the code block perfectly - M Salauddin Morshed

2 Answers

1
votes

Do you have any email restrictions from your hosting provider? Especially if it's a free hosting. If so, that may be the reason for it not working. If not, it may be just a small typo. It looks to me that you are also missing the {} for your if statement.

0
votes

Yeh got my answer from post status transition

function on_publish_pending_post( $post ) {
// A function to perform actions when a post is published.

if ( "trainee" === get_post_type() ) { // check the custom post type

    $name   = get_the_title( $post->ID );

    // get email from custom field
    $author = get_post_meta( $post->ID, "tr_user_reg_email", true );

    $subject = "mail subject";

    $body    = "mail body";

    $headers = array (
        'From: "your name" <no-reply@your-domain.com>' ,
        'X-Mailer: PHP/' . phpversion(),
        'MIME-Version: 1.0' ,
        'Content-type: text/html; charset=iso-8859-1'
    );
    $headers = implode( "\r\n" , $headers );

    wp_mail( $author, $subject, $body, $headers );
}
}
add_action( "pending_to_publish", "on_publish_pending_post", 10, 1 );