2010-07-06 8 views
0

J'essaie d'écrire une requête SQL personnalisée qui va créer une liste des messages et des commentaires les plus récents et j'ai du mal à visualiser comment je peux le faire.Wordpress latest Posts et commentaires feed?

Je peux tirer les derniers commentaires par date DESC et je peux tirer les derniers messages par date DESC mais comment puis-je faire un flux/requête pour montrer les deux?

Voici mon commentaire SQL

SELECT comment_id, comment_content, comment_date 
FROM wp_comments 
WHERE comment_author = 'admin' 
ORDER BY comment_date DESC 

Edit: plus clair:

Désolé, je suis un peu plus clair. Je veux avoir une telle liste en fonction de quelle date ils se sont produits:

Wordpress post 
wordpress post 
wordpress comment 
wordpress post 
wordpress comment 

Donc, si quelqu'un commente un poste âgé de 4 mois, il affiche encore au sommet de cette « nourrir »

Répondre

0

Je pense que votre meilleur pari (et pour éviter d'utiliser SQL personnalisé) serait de saisir les derniers messages X et commentaires X, boucle sur chacun et construire un tableau pour fusionner les deux en un « plus récent » données ensemble;

$comments = get_comments('number=X'); 
$posts = get_posts('posts_per_page=X'); 

$most_recent = array(); 

foreach ($comments as $comment) 
    $most_recent[strtotime($comment->comment_date_gmt)] = $comment; 

foreach ($posts as $post) 
    $most_recent[strtotime($post->post_date_gmt)] = $post; 

unset($comments, $posts); 

krsort($most_recent); 
$most_recent = array_slice($most_recent, 0, X); 

foreach ($most_recent as $post_or_comment) { 

    $is_post = isset($post_or_comment->post_date_gmt); 

    // output comments and posts 
} 

Ce n'est pas trop joli, mais il devrait le faire.

+0

Cela semble fonctionner pour moi. De toute façon je peux obtenir le titre d'un post que le commentaire a été fait? – wesbos

+0

'$ comment_post_title = get_the_title ($ comment-> comment_post_ID);' – TheDeadMedic

+0

Merci d'essayer ça maintenant :) – wesbos

0

Aucun mySql spécial nécessaire, utilisez simplement la boucle query_posts et la fonction get_comments dans la boucle.

<?php query_posts('posts_per_page=10'); while (have_posts()) : the_post(); ?> 

    <div> 
     <a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"<?php the_title_attribute(); ?></a> 
     <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php echo the_title(); ?></a> 
     <?php 
      $comments = get_comments(); 
      foreach($comments as $comm) : 
       echo($comm->comment_author); 
       echo($comm->comment_content); 
      endforeach; 
     ?> 
    </div> 

<?php endwhile; ?> 
+0

Désolé, j'aurais dû être un peu plus clair. S'il vous plaît voir ci-dessus. – wesbos

1

Pour obtenir une liste basée uniquement sur l'horodatage le plus récent de deux tables, vous devez utiliser un UNION:

SELECT wc.comment_date AS dt 
    FROM WP_COMMENTS wc 
UNION ALL 
SELECT wp.post_date AS dt 
    FROM WP_POSTS wp 
ORDER BY dt 

... où dt est l'alias de colonne pour la colonne qui contient la valeur de la date pour les enregistrements dans les deux tables.

Utilisez UNION ALL - car les données proviennent de deux tables différentes, il n'y a aucun changement de doublons à filtrer. Mais cela signifie que vous devez obtenir les autres colonnes que vous voulez de chaque table à aligner en fonction des données et du type de données ...

Questions connexes