web-dev-qa-db-fra.com

Rejoignez dans une requête wpdb .. confused!

Je dois obtenir un retour d'une requête qui me fournit un email, un nom d'utilisateur ou un nom de famille, ainsi qu'un titre de publication basé sur l'identifiant de l'auteur.

La requête doit être exécutée une fois par jour via cron et rechercher les publications ayant passé un certain temps en direct avant leur suppression (la requête est censée être exécutée cinq jours, puis trois jours avant la suppression).

jusqu'à présent, j'ai ce qui fonctionne (presque) via l'exécution de requêtes manuelles dans 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)  

tout va bien ici, ça retourne le succès, mais ce que j'ai maintenant besoin d’obtenir, c’est aussi les post_titles de tous les articles qui doivent expirer pour pouvoir être ajoutés dans la partie $ message du wp_mail.

Je vais être honnête avec vous, je n'ai pas la moindre idée de la possibilité de devenir membre. que ce soit des jointures à gauche, des jointures extérieures ou tout autre type de jointure, la seule information qui me semble me revient régulièrement du codex est-ce que cette page est

Update

<?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
}
?>

Code de travail completci-dessouspour toute personne intéressée:

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

}


?>  

Le code ci-dessus notifiera à l'auteur @ 720 heures qu'il lui reste 3 jours avant la suppression automatique de la publication.

cordialement

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