반응형
워드프레스 크론은 wp_mail()을 발사하지 않고 php mail() 기능을 합니다.
cronjob 작업에 wp_mail을 사용하려고 하는데 메일이 오지 않았습니다.대신 순수 php 함수 메일()이 작동합니다.
질문 1):메일()은 작동하지만 wp_mail은 작동하지 않는 이유는 무엇입니까?
질문 2): www.domain.de/wp-cron.php 에 전화하면 이메일이 수동으로 전송됩니다.하지만 받은 이메일의 html 이메일 본문은 여전히 문자열이고 html로 번역되지 않습니다.왠지 알아?
해결책을 찾고 몇 가지를 찾았습니다.이 게시물(워드프레스의 크론 작업이 작동하지 않음)에 따라 나는 다음과 같이 크론 작업을 설정합니다.
사용자 지정 간격 설정:
function example_add_cron_interval( $schedules ) {
$schedules['five_seconds'] = array(
'interval' => 5,
'display' => esc_html__( 'Every Five Seconds' ),
);
$schedules['daily'] = array(
'display' => esc_html__( 'Once Daily' )
);
return $schedules;
}
add_filter( 'cron_schedules', 'example_add_cron_interval', 999 );
cronjob 활성화:
function cron_activation() {
if( !wp_next_scheduled( 'dbs_cron_hook' ) ) {
wp_schedule_event(time(), 'daily', 'dbs_cron_hook' );
}
}
add_action('init', 'cron_activation');
논리 실행: 함수 my_task_function() {
$max_hours = 336; // entspricht 2 Wochen
global $post;
$args = array( 'post_type' => 'bookings', );
$booking_listing = new WP_Query( $args );
$mail_body = '<table>';
if( $booking_listing->have_posts() ) :
while( $booking_listing->have_posts() ) : $booking_listing->the_post();
$post_id = get_the_ID();
$email_sent_timestamp = intval( get_post_meta( $post_id, 'approvement_email_sent', true ) );
$event_id = intval( get_post_meta( $post_id, 'event_id', true ) );
if( $email_sent_timestamp != 0 ){
$date = date_create();
$now_timestamp = date_timestamp_get($date);
$hoursPassed = diff_timestamp( $now_timestamp, $email_sent_timestamp );
var_dump($hoursPassed["full_hours"] >= $max_hours);
if( $hoursPassed >= $max_hours ){
update_post_meta( $event_id, 'event_reserved', intval(0) );
$mail_body .= '<tr><td>BuchungsNr ' . $post_id . ': 2 Wochen sind abgelaufen.</td></tr><tr><td>Der Termin ' . $event_id . ' wurde wieder aktiviert.</td></tr>';
}
}
endwhile;
else:
wp_send_json_error( "No events found" );
endif;
$mail_body .= '</table>';
var_dump($max_hours);
// wp_mail( 'xxxxx@xxxxxxx.xxx', 'Rervierung ' . $post_id . ' abgelaufen', $mail_body );
mail( 'xxxxx@xxxxxxx.xxx', 'Rervierung ' . $post_id . ' abgelaufen', $mail_body );
}
add_action( 'dbs_cron_hook', 'my_task_function' );
구성에서 wpcron을 비활성화했습니다.이런 phpdefine('DISABLE_WP_CRON', true);
그리고 이렇게 서버에 cronjob을 설정합니다.* */1 * * * /vrmd/webserver/php70/bin/php-cli /homepages/xxxxxx/wp-cron.php > /dev/null
저를 도와주시기 바랍니다.
질문 2에 대한 편집: 메일()에서 $header를 사용하기만 하면 됩니다.
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
mail( $to, $subject, $mail_body, $headers );
1번 질문은 아직도 궁금하군요...
언급URL : https://stackoverflow.com/questions/50057615/wordpress-cron-doesnt-fire-wp-mail-but-php-mail-function
반응형
'programing' 카테고리의 다른 글
AngularJS $resource 오류 - TypeError: 개체 #에 'push' 메서드가 없습니다. (0) | 2023.10.22 |
---|---|
printf 형식 지정(%d 대 %u) (0) | 2023.10.22 |
오라클 저장 프로시저 실행 시간이 실행 방식에 따라 크게 증가하는 이유는 무엇입니까? (0) | 2023.10.22 |
Angular의 사용자 정의 양식 구성요소에서 FormControl에 액세스합니다. (0) | 2023.10.22 |
간단한 Oracle 변수 SQL 할당 (0) | 2023.10.22 |