Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere il post commentato più recente sopra il nuovo post inviato in Wordpress?

Provalo funziona perfettamente per me cosa sta facendo query ottieni tutti i post con un left jon con comments tabella così quando un post ha un commento them=n ha anche il comment_date se non ci sono commenti pubblicati sul post, nel set di risultati sarà null quindi ho unito il comment_date con post_date quindi quale post ha la data maggiore (per comment_date o post_date) sarà il primo e così via

SELECT p.*,
(CASE WHEN c.comment_date IS NULL THEN p.`post_date` ELSE c.comment_date END) order_column
 FROM `wp_posts` p
LEFT  JOIN `wp_comments` c  ON (p.ID = c.`comment_post_ID` ) WHERE p.post_type='post' AND p.post_status='publish'
GROUP BY p.ID
 ORDER BY order_column   DESC

Per visualizzare i post devi prima ottenere i risultati definendo la variabile globale del WP per l'interazione con il database, ad esempio $wpdb

<?php
global $wpdb;
$results = $wpdb->get_results("    SELECT p.*,
    (CASE WHEN c.comment_date IS NULL THEN p.`post_date` ELSE c.comment_date END) order_column
     FROM `wp_posts` p
    LEFT  JOIN `wp_comments` c  ON (p.ID = c.`comment_post_ID` ) WHERE p.post_type='post' AND p.post_status='publish'
    GROUP BY p.ID
     ORDER BY order_column   DESC"); 
?>

HTML

<?php foreach($results as $result){

<h1><?php echo $result->post_title;?></h1>
<div> <?php echo $result->post_content;?> </div>
// and so on the fields of wp_posts
<?php } // loop end ?>

Spero sia quello che stavi cercando