web-dev-qa-db-ja.com

Wpdbクエリの中に参加してください。

電子メール、ユーザー名、またはニックネーム、および作成者IDに基づく投稿のタイトルを提供するクエリからリターンを取得する必要があります。

クエリはcronを介して1日1回実行され、削除されるまでに特定のライブ時間を費やした投稿を探します(クエリは5日後、投稿削除の3日前に実行されることを意図しています)。

これまでのところ私はphpmyadminで手動クエリを実行することで(ほぼ)動作するこれを持っています。

SELECT ID, user_email, display_name, user_nicename
FROM wp_users
WHERE ID
IN (SELECT post_author FROM wp_posts WHERE post_type = 'sales' AND HOUR( TIMEDIFF( NOW( ) , post_date_gmt ) ) >=1)  

これは成功を返しますが、wp_mailの$ message部分の内側に追加できるように、期限切れになる予定のすべての投稿のpost_titlesも取得します。

私はあなたと正直になるつもりです私はものに参加することについての手がかりを持っていません。それが左結合を必要とするか、外部結合を必要とするか、あるいは他の種類の結合を必要とするかにかかわらず、私がコーデックスから取り戻し続けるように思われる唯一の情報 はこのページです

更新

<?php
$emailusers = $wpdb->get_results("SELECT ID, user_email FROM $wpdb->users WHERE ID IN (SELECT post_author FROM $wpdb->posts WHERE post_type = 'sales' AND HOUR( TIMEDIFF( NOW( ) , post_date_gmt ) ) >=1)");

foreach ($emailusers as $user) {
// do wp_mail stuff from here
}
?>

興味のある人のための完全な作業コードの下

<?php 
require_once 'wp-load.php';

global $wpdb;

$emailusers = $wpdb->get_results("SELECT u.user_nicename, u.user_email, p.post_title,  p.post_date
FROM $wpdb->posts p
INNER JOIN $wpdb->users u ON p.post_author = u.ID
WHERE post_type = 'sales' OR post_type = 'rentals' OR post_type = 'business'
AND HOUR( TIMEDIFF( NOW( ) , post_date_gmt ) ) >=721");


foreach ($emailusers as $user) {

$to = $user->user_email;

$subject = $user->post_title;

$message = 'You have a property listing that will auto expire in 3 days, the property is <strong>' . $user->post_title .'</strong> and was listed on <strong>' . $user->post_date .'</strong>' . "\r\n";


$headers .= "From: -------- <www.------------.com>" . "\r\n";


wp_mail( $user_email, $subject, $message, $headers);

}


?>  

上記のコードは、投稿が自動削除されるまでに残り3日間があることを720時間以内に著者に通知します。

よろしく

1
MartinJJ
$emailusers = $wpdb->get_results(
    "SELECT p.ID AS post_id, p.post-title, u.user_email " .
    "FROM $wpdb->posts AS p " .
    "INNER JOIN $wpdb->users AS u ON p.post_author = u.ID " .
    "WHERE p.post_type = 'sales' AND HOUR( TIMEDIFF( NOW( ) , p.post_date_gmt ) ) >=1)"
);

foreach ($emailusers as $user) {
    // do wp_mail stuff from here

    // $emailusers->post_title;
    // $emailusers->user_email;

    // used 'post_id' alias rather than 'ID' so it's clear it's not the author ID
    // $emailusers->post_id;
}
6
TheDeadMedic