我有这个功能:

$ids = $wpdb->get_col("SELECT DISTINCT comment_post_ID
FROM $wpdb->comments
ORDER BY comment_date DESC
LIMIT 0 , 30");

foreach ($ids as $id) {
  $post = &get_post( $id );
  setup_postdata($post); ?>
  <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
  <?php
}
?>


可以在列表中显示latest commented posts,这很好。我想做的是优先考虑这一点,并将其与“ get newest post list”组合。假设我今天在一个名为“ Hello World”的帖子上发表了评论,昨天又有其他人提交了一篇帖子……比我想在这个新帖子上方获得最近发表的评论。问题在于,在我的代码段中,没有什么可以说是获得最新帖子的。如何合并它们?那么,如何将最新评论的帖子和最新的帖子彼此结合在一起呢?这有可能吗?

最佳答案

尝试一下对我来说是完美的,它正在执行的查询将所有带有left joncomments表的帖子发布给表,因此当帖子对它们进行评论时,如果== n,并且还没有评论,则也具有comment_date。发布,然后在结果集中将是null,所以我将comment_datepost_date合并,因此哪个发布的日期较大(对于comment_date或post_date),它将首先发布,依此类推

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


要显示帖子,您必须首先通过定义WP的数据库交互全局变量(即$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 ?>


希望那是你想要的

关于mysql - 如何在Wordpress中新提交的帖子上方获取最新评论的帖子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17501490/

10-17 01:39