Je souhaite ajouter cette partie de code à mon fichier functions.php afin que, lorsqu'un utilisateur crée son premier message, il reçoive un courrier électronique pour le féliciter.
function set_mail_html_content_type() {
return 'text/html';
}
add_action( 'publish_post', 'author_publish_notice', 10 ,2 );
function author_publish_notice( $ID, $post ) {
if( 'post' == $post->post_type && count_user_posts(the_author_meta('ID') == 1); ) {
return;
}
$to = '[email protected]';
$subject = 'Your Article Is Online';
$message = '<h1>Congratulations!</h1> <p>Your article is now online and
is sure to receives trillions of comments. Please do hang around and answer any questions
viewers may have!</p> <p><a href="' . get_permalink( $ID ) . '">' . $post->post_title . '</a></p>';
add_filter( 'wp_mail_content_type', 'set_mail_html_content_type' );
wp_mail( $to, $subject, $message );
remove_filter( 'wp_mail_content_type', 'set_mail_html_content_type' );
}
Cependant, j'ai un doute sur cette ligne:
$to = '[email protected]';
Pour récupérer l'email de l'auteur, le codex montre ceci:
<?php the_author_email(); ?>
Cela aurait-il un sens? :
$to = the_author_email();
En outre, cela suffit pour ajouter la condition que le message est le premier message de l'auteur:
if( 'post' == $post->post_type && count_user_posts(the_author_meta('ID') == 1); )
Merci pour votre temps et votre aide
Vous êtes proches - jetons un coup d'oeil à cette ligne:
if( 'post' == $post->post_type && count_user_posts(the_author_meta('ID') == 1); )
the_author_meta()
imprime les données, il ne retourne rien - utilisez get_the_author_meta()
pour les comparaisons et les transfertscount_user_posts( $id ) == 1
, pas count_user_posts( $id == 1 )
Cela dit, j'ai l’impression que cette condition (une fois corrigée) est l’inverse de ce que vous voulez - au moment où vous essayez de dire "si le type de message est post
et que l’auteur a un message, ne fait rien ", alors que vous voulez réellement le contraire (?)
Dans ce cas, voici ce que je pense que vous recherchez:
if ( 'post' !== $post->post_type || count_user_posts( $post->post_author ) > 1 )
return; // If the post is NOT a post, or the author has more than one post, bail
Voyez comment j'ai utilisé $post->post_author
aussi? C'est l'ID utilisateur. Cela fait partie de l'objet post, pas besoin d'utiliser une fonction ici (malgré ce que j'ai dit à propos de get_the_author_meta()
plus tôt).
Enfin, l'email: vous pouvez soit utiliser cette fonction auteur, soit récupérer directement l'objet utilisateur (c'est ce que l'ancien est un wrapper):
$user_email = get_user_by( 'id', $post->post_author )->user_email;
Tous ensemble maintenant:
function author_publish_notice( $ID, $post ) {
if ( 'post' !== $post->post_type || count_user_posts( $post->post_author ) > 1 )
return;
$to = get_user_by( 'id', $post->post_author )->user_email;
$subject = 'Your Article Is Online';
$headers = array(
'Content-Type: text/html',
'From: [email protected]',
);
$message = '<h1>Congratulations!</h1> <p>Your article is now online and
is sure to receives trillions of comments. Please do hang around and answer any questions
viewers may have!</p> <p><a href="' . get_permalink( $ID ) . '">' . $post->post_title . '</a></p>';
wp_mail( $to, $subject, $message, $headers );
}
Vous verrez que j'ai également supprimé le filtre de type de contenu - . Vous pouvez transmettre les en-têtes de courrier en tant que quatrième paramètre à wp_mail()
, séparés par un saut de ligne ou comme un tableau.