Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter a postagem comentada mais recente acima da nova postagem enviada no Wordpress?


Experimente funciona perfeito para mim o que está fazendo consulta obter todas as postagens com um left jon com comments table então quando um post tem comment them=n ele também tem o comment_date se não houver comentários postados na postagem, no conjunto de resultados, será null então eu juntei o comment_date com post_date então qual post tem a maior data (para comment_date ou post_date) será o primeiro e assim por diante
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

Para exibir as postagens, você deve primeiro obter os resultados definindo a variável global do WP para a interação com o banco de dados, ou seja, $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 ?>

Espero que seja isso que você estava procurando