web-dev-qa-db-fra.com

Comment obtenir le dernier commentaire commenté au-dessus du nouveau message soumis dans Wordpress?

J'ai cette fonction:

$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
}
?>

Ce qui montre le latest commented posts dans une liste, ce qui est bien. Ce que je veux faire, c'est donner une priorité à celui-ci et le combiner avec un "get newest post list". Supposons donc que j'ai commenté aujourd'hui un message intitulé Hello World et que quelqu'un d'autre ait envoyé un message hier ... Alors je souhaite obtenir le dernier commentaire commenté au-dessus de ce nouveau message. Le problème est que dans mon extrait de code, rien ne dit d’obtenir les messages les plus récents. Comment puis-je les combiner ? Comment combiner les articles les plus récents commentés et les articles les plus récents? Est-ce possible?

1
user1627363

Donnez-lui un essai fonctionne parfaitement pour moi ce qu'il fait requête obtenir toutes les publications avec un left jon avec une table comments de sorte que lorsqu'un message a un commentaire, il possède également le comment_date si aucun commentaire n'est posté sur le message, puis dans le jeu de résultats, ce sera null donc j'ai fusionné le comment_date avec post_date afin que le post ait la date la plus longue (pour comment_date ou post_date) il sera d'abord et ainsi de suite

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

Pour afficher les publications, vous devez d’abord obtenir les résultats en définissant la variable globale du groupe de travail pour l’interaction avec la base de données, i.e $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
} ?>

J'espère que c'est ce que vous cherchiez

5
M Khalid Junaid