Probieren Sie es aus, funktioniert perfekt für mich, was es tut, fragen Sie alle Beiträge mit einem left jon
ab mit comments
also wenn ein Beitrag comment them=n hat, hat er auch das comment_date
Wenn keine Kommentare zu dem Beitrag gepostet wurden, ist die Ergebnismenge null
also habe ich das comment_date
zusammengeführt mit post_date
Welcher Beitrag also das größere Datum hat (für comment_date oder post_date), wird zuerst angezeigt und so weiter
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
Um die Beiträge anzuzeigen, müssen Sie zuerst die Ergebnisse abrufen, indem Sie die globale Variable des WP für die Datenbankinteraktion definieren, z. B. $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 ?>
Ich hoffe, das ist, wonach Sie gesucht haben