Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php wp_邮件功能在foreach循环中只工作一次_Php_Wordpress - Fatal编程技术网

Php wp_邮件功能在foreach循环中只工作一次

Php wp_邮件功能在foreach循环中只工作一次,php,wordpress,Php,Wordpress,我正在运行一个带有删除旧事件(基于自定义字段)功能的cron。 该函数用于查找和删除过去发生的所有事件。 到目前为止还不错 现在,我想向事件的作者发送一封电子邮件,告知事件已被删除。我在foreach中使用了一个额外的wp\u mail函数来实现这一点 现在的问题是,只有最后一个旧事件被删除。也许这与foreach中的邮件变量($post,$author,…)有关 我在这里读到一些关于这个问题的东西,但我不明白: 这是我的密码: function get_delete_old_events()

我正在运行一个带有删除旧事件(基于自定义字段)功能的cron。 该函数用于查找和删除过去发生的所有事件。 到目前为止还不错

现在,我想向事件的作者发送一封电子邮件,告知事件已被删除。我在foreach中使用了一个额外的
wp\u mail
函数来实现这一点

现在的问题是,只有最后一个旧事件被删除。也许这与foreach中的邮件变量(
$post
$author
,…)有关

我在这里读到一些关于这个问题的东西,但我不明白:

这是我的密码:

function get_delete_old_events() {

    $past_query = date('Y-m-d', strtotime('-1 day'));

    // Set our query arguments
    $args = [
        'fields'         => 'ids', // Only get post ID's to improve performance
        'post_type'      => 'event', // Post type
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => 'gid_22', // Replace this with the event end date meta key.
                'value'   => $past_query,
                'compare' => '<='
            ]
        ]
      ];
    $q = get_posts( $args );

    // Check if we have posts to delete, if not, return false
    if ( !$q )
        return false;

    // OK, we have posts to delete, lets delete them
    foreach ( $q as $id )

        /* start e-mail  */
            $headers[] = 'From: SITENAME <hello@domain.com>';

            $post       = get_post($id);
            $author     = get_userdata($post->post_author);
            $subject    = "SUBJECT: ".$post->post_title."";

            $message = "THE MESSAGE BODY";

            wp_mail($author->user_email, $subject, $message, $headers);
        /* end e-mail */

        wp_trash_post( $id );
}

// expired_post_delete hook fires when the Cron is executed
add_action( 'old_event_delete', 'get_delete_old_events' );


// Add function to register event to wp
add_action( 'wp', 'register_daily_events_delete_event');

function register_daily_events_delete_event() {
    // Make sure this event hasn't been scheduled
    if( !wp_next_scheduled( 'old_event_delete' ) ) {
        // Schedule the event
        wp_schedule_event( time(), 'hourly', 'old_event_delete' );
    }
}
函数get\u delete\u old\u events(){ $pass_query=date('Y-m-d',strottime('-1天)); //设置查询参数 $args=[ 'fields'=>'ids',//仅获取帖子ID以提高性能 'post_type'=>'event',//post type “每页帖子数”=>-1, “元查询”=>[ [ 'key'=>'gid_22',//将其替换为事件结束日期元键。 'value'=>$pass\u查询,
“compare'=>”
wp_-mail
函数返回bool(请参阅)。因此,它在第一次迭代中返回值时退出函数

只需在wp_邮件之前添加一个变量

 $is_sent = wp_mail($author->user_email, $subject, $message, $headers);

然后它应该可以工作。

wp\u mail函数返回bool(请参阅)。因此,它在第一次迭代中返回值时退出函数

只需在wp_邮件之前添加一个变量

 $is_sent = wp_mail($author->user_email, $subject, $message, $headers);
然后它就可以工作了。

试试下面的代码

function get_delete_old_events() {
    $past_query = date('Y-m-d', strtotime('-1 day'));
    // WP_Query arguments
    $args = array(
        'fields'         => 'ids', // Only get post ID's to improve performance
        'post_type'      => array( 'event' ), //post type
        'posts_per_page' => '-1',//fetch all posts,
        'meta_query'     =>array(
                                    'relation'  => 'AND',
                                    array(
                                            'key' => 'gid_22',
                                            'value' =>  $past_query,
                                            'compare'   => '<='
                                          )
                                  )
        );

    // The Query
    $query = new WP_Query( $args );

    // The Loop
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            // do something
            $headers[] = 'From: SITENAME <hello@domain.com>';

            $postid     = get_the_ID();
            $post       = get_post($postid);
            $author     = get_userdata($post->post_author);
            $subject    = "SUBJECT: ".get_the_title()."";

            $message = "THE MESSAGE BODY";

            wp_mail($author->user_email, $subject, $message, $headers);
            wp_trash_post( $id );
        }
    } else {
        // no posts found
        return false;

    }

    // Restore original Post Data
    wp_reset_postdata();

}
函数get\u delete\u old\u events(){ $pass_query=date('Y-m-d',strottime('-1天)); //WP_查询参数 $args=数组( 'fields'=>'ids',//仅获取帖子ID以提高性能 'post_type'=>数组('event'),//post类型 'posts_per_page'=>'-1',//获取所有帖子, “元查询”=>数组( '关系'=>'和', 排列( 'key'=>'gid_22', 'value'=>$pass\u查询, “比较”=>“尝试下面的代码

function get_delete_old_events() {
    $past_query = date('Y-m-d', strtotime('-1 day'));
    // WP_Query arguments
    $args = array(
        'fields'         => 'ids', // Only get post ID's to improve performance
        'post_type'      => array( 'event' ), //post type
        'posts_per_page' => '-1',//fetch all posts,
        'meta_query'     =>array(
                                    'relation'  => 'AND',
                                    array(
                                            'key' => 'gid_22',
                                            'value' =>  $past_query,
                                            'compare'   => '<='
                                          )
                                  )
        );

    // The Query
    $query = new WP_Query( $args );

    // The Loop
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            // do something
            $headers[] = 'From: SITENAME <hello@domain.com>';

            $postid     = get_the_ID();
            $post       = get_post($postid);
            $author     = get_userdata($post->post_author);
            $subject    = "SUBJECT: ".get_the_title()."";

            $message = "THE MESSAGE BODY";

            wp_mail($author->user_email, $subject, $message, $headers);
            wp_trash_post( $id );
        }
    } else {
        // no posts found
        return false;

    }

    // Restore original Post Data
    wp_reset_postdata();

}
函数get\u delete\u old\u events(){ $pass_query=date('Y-m-d',strottime('-1天)); //WP_查询参数 $args=数组( 'fields'=>'ids',//仅获取帖子ID以提高性能 'post_type'=>数组('event'),//post类型 'posts_per_page'=>'-1',//获取所有帖子, “元查询”=>数组( '关系'=>'和', 排列( 'key'=>'gid_22', 'value'=>$pass\u查询,
'compare'=>'您的代码似乎必须正常工作。您能否共享在编辑邮件功能之前工作正常的代码?工作正常的代码与我的问题中的代码相同。除了注释部分“开始电子邮件”和“结束电子邮件”之间的代码也许您需要使用重置数据功能让我共享代码您的代码似乎必须正常工作。您能否共享在编辑邮件功能之前工作正常的代码?工作正常的代码与我的问题中的代码相同。除了注释部分“开始电子邮件”和“结束电子邮件”之间的代码也许你需要使用重置数据功能让我共享代码谢谢,但它还不起作用。也许我们还需要存储其他变量?嗯,可能是。请检查WP文档。如果他们返回了一些东西,但没有被某个变量处理,那么你可能需要。谢谢,但它还不起作用。也许我们需要存储其他变量也可以是变量?嗯,可能是。请检查WP文档。如果它们返回的内容不是由某个变量处理的,那么您可能需要。抱歉,现在请检查我以前将变量包装为字符串。$pass\u query我将其包装为字符串谢谢..再见,抱歉,现在请检查我以前将变量包装为字符串。$pass\u query i wra把它当作一根弦谢谢…你好