1

我有这个功能:

$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 的帖子,而其他人昨天提交了一篇帖子......比我想在这个新帖子上方获得最近评论的帖子。问题是在我的代码片段中,没有任何内容可以说明获取最新帖子。我怎样才能将它们结合起来?那么如何将最新评论的帖子和最新的帖子相互结合呢?这甚至可能吗?

4

1 回答 1

0

试一试对我来说非常适合它在做什么查询获取所有left jon带有comments表的帖子,所以当帖子有评论时它们=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 ?>

希望这就是你要找的

于 2013-07-06T10:03:36.283 回答