【发布时间】:2021-09-28 22:49:41
【问题描述】:
我想发送关于自定义帖子更新的电子邮件,为此我将电子邮件保存在不同的表“wp_offers”中,每个帖子都有多个条目。
我正在尝试使用 implode() 函数在所有存储的电子邮件地址上发送电子邮件,但 implode 不起作用:
function send_emails_on_new_event( $post ) {
$id = get_the_ID( $post->ID );
global $wpdb;
// this adds the prefix which is set by the user upon instillation of wordpress
$table_name = $wpdb->prefix . "offers";
// this will get the data from your table
$retrieve_data = $wpdb->get_results( "SELECT * FROM $table_name" . "WHERE post_id=" . $id);
foreach ($retrieve_data as $retrieved_data){
$email = implode(",",$retrieved_data->email);
}
$emails = $email;
$headers = 'From: Name <support@mydomain.com>';
$title = wp_strip_all_tags( get_the_title( $post->ID ) );
$message = 'New post created' . " " . $email;
if ( get_post_type( $post->ID ) === 'property' ) {
wp_mail( $emails, 'New Post', $message, $headers );
}
}
add_action( 'pre_post_update', 'send_emails_on_new_event' );
我使用此代码显示了所有电子邮件,但我希望它们用comma ,一一分隔
此代码有效并显示<li> 中的所有电子邮件:
<?php
$id = $post->ID;
global $wpdb;
// this adds the prefix which is set by the user upon instillation of wordpress
$table_name = $wpdb->prefix . "offers";
// this will get the data from your table
$retrieve_data = $wpdb->get_results( "SELECT * FROM $table_name" );
?>
<ul>
<?php foreach ($retrieve_data as $retrieved_data){ ?>
<li> <?php echo $retrieved_data->email;?></li>
<?php
}
?>
</ul>
更新:
It worked with this solution:
$emailsData = [];
foreach ($retrieve_data as $retrieved_data){
$emailsData[] = $retrieved_data->email;
} // foreach
$emails = implode(",",$emailsData);
谢谢 但是当从以下位置更改查询时:
$retrieve_data = $wpdb->get_results( "SELECT * FROM $table_name" );
到:
$retrieve_data = $wpdb->get_results( "SELECT * FROM $table_name" . "WHERE post_id=" . $id);
为什么它不起作用?
【问题讨论】:
-
参见。更新:验证您的 SQL 语法并避免在同一主题中提出多个问题。