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、投稿にコメントがある場合はthem = nもあり、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 ?>

それがあなたが探していたものであることを願っています

于 2013-07-06T10:03:36.283 に答える