我有这个函数:
$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 jon
和comments
表获取所有帖子,这样当帖子有评论时,它们也有comment_date
。如果帖子上没有发布评论,那么在结果集中它将是null
,所以我将comment_date
和post_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 ?>
希望这就是您想要的