【问题标题】:Implode() not working with associative array WordpressImplode() 不适用于关联数组 Wordpress
【发布时间】: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 ,一一分隔

此代码有效并显示&lt;li&gt; 中的所有电子邮件:

 <?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);

为什么它不起作用?

表“wp_offers”:

【问题讨论】:

  • 参见。更新:验证您的 SQL 语法并避免在同一主题中提出多个问题。

标签: php wordpress


【解决方案1】:

问题在于 implode 需要数组

 implode(string $separator, array $array): string

您可以做的是将电子邮件收集在一个数组中,然后内爆。这样的事情可能会有所帮助:

$emailsData = [];
foreach ($retrieve_data as $retrieved_data){
    $emailsData[] = $retrieved_data->email;
} // foreach
$emails = implode(",",$emailsData);

【讨论】:

  • 感谢分配,它有效,但是当我添加: "WHERE post_id=" 。 $id 在我的查询中,没有显示任何内容。
  • 更新问题。
  • "SELECT * FROM $table_name WHERE post_id=$id" 您可以通过这种方式获取数据。如果这不起作用测试是 id 集。
  • ID 被获取,但查询不工作,为什么?
  • 很难说这是什么问题。从查询来看,它接缝没问题。确保您添加了正确的 post_id 和 table_name。还可以使用 die() 或 vard_dump() 检查该查询的输出。
【解决方案2】:

你这样做:

foreach ( $retrieve_data as $retrieved_data ){ 
    $email = implode( ",", $retrieved_data->email );
}

它不起作用,因为你给 implode() 一个字符串,而不是一个数组。

尝试制作一个电子邮件字符串数组,然后将其内爆。

$emails = array();
foreach ( $retrieve_data as $retrieved_data ){
    $emails[] = $retrieved_data->email;
}
$email = implode( ",", $emails );

这是将 SQL 结果集中的某些列转换为逗号分隔列表的常用代码模式。

【讨论】:

    【解决方案3】:

    困惑在于想要内爆不是数组的东西:

    foreach ($retrieve_data as $retrieved_data)
    

    顺便说一句,这些对于变量名称来说太通用了:它们根本不描述数据。除非您正在构建的对象非常通用,否则这是不好的做法。我将重命名它们,以便答案开始变得清晰。我假设这是一个用户对象,但它可以是其他任何东西:

    foreach ($user_object_array as $user_object){
    // a $user_object_array has multiple user objects
    // a $user_object has all the different properties
    $email_array[] = $user_object->email;
    // push a new piece of data into a flat email array
    }
    $emails_string = implode(", ", $email_array);
    echo $emails_string;
    

    implode() 失败,因为 implode 的参数不是关联数组,而是一个简单的字符串 $retrieved_data-&gt;email

    另外,如果你想使用 wp_mail 函数,如果你已经将它放在一个数组中,则不需要内爆它: https://developer.wordpress.org/reference/functions/wp_mail/

    wp_mail( string|string[] $to, string $subject, string $message, string|string[] $headers = '', string|string[] $attachments = array() )

    参数

    $to (string|string[]) (必需)数组或逗号分隔的列表 用于发送消息的电子邮件地址。

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2020-04-27
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多