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 postM Salauddin Morshed
also, you are not closing the function before you are adding the actionStender
The function is closed, look at the bottom of code block, maybe i can't wrap the code block perfectlyM 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" <[email protected]>' ,
        '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 );