Pruébalo, funciona perfecto para mí, qué está haciendo, consulta, obtén todas las publicaciones con un left jon
con comments
tabla, por lo que cuando una publicación tiene un comentario =n, también tiene el comment_date
si no se publican comentarios en la publicación, en el conjunto de resultados será null
así que fusioné el comment_date
con post_date
entonces, qué publicación tiene la mayor fecha (para comment_date o post_date) será la primera y así sucesivamente
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 mostrar las publicaciones, primero debe obtener los resultados definiendo la variable global de WP para la interacción de la base de datos, es decir, $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 eso sea lo que estabas buscando