web-dev-qa-db-ja.com

Wordpressで新しく投稿された投稿の上に最新のコメント投稿を取得する方法?

私はこの機能があります。

$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という投稿にコメントし、昨日他の誰かが投稿したとしましょう。問題は、私のコードスニペットには、最新の投稿を入手するための情報が何もないことです。どうやってそれらを組み合わせることができますかそれでは、どうやって最新のコメント投稿と最新投稿を組み合わせることができますか?これでも可能ですか?

1
user1627363

それを試してみてくださいクエリがleft joncommentsテーブルを持つすべての投稿を取得するので、投稿がコメントを持っている場合、comment_dateも持っています投稿に投稿されたコメントは結果セットでnullになりますので、comment_datepost_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.ID,
    (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 LIMIT 20"); 
?>

HTML

<?php
foreach ($results as $id) {
  $post = &get_post( $id->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
} ?>

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

5
M Khalid Junaid