私はこの機能があります。
$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
にマージしました。などなど
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
} ?>
それがあなたが探していたものであることを願っています