WordPress последние сообщения и канал комментариев? - PullRequest
0 голосов
/ 07 июля 2010

Я пытаюсь написать собственный SQL-запрос, который создаст список самых последних сообщений и комментариев, и у меня возникают проблемы с визуализацией, как я могу это сделать.

Я могу получить последние комментарии по дате DESC, и я могу получить последние сообщения по дате DESC, но как мне сделать фид / запрос, чтобы показать их оба?

Вот мой комментарий SQL

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

Редактировать: более ясно:

Извините, мне следовало быть немного более ясным.Я хочу иметь такой список, основанный на дате, когда они произошли:

Wordpress post 
wordpress post
wordpress comment
wordpress post
wordpress comment

Так что, если кто-то прокомментирует 4-месячный пост, он все равно будет отображаться в верхней части этого «фида»

Ответы [ 3 ]

1 голос
/ 07 июля 2010

Чтобы получить список, основанный исключительно на самой последней отметке времени из двух таблиц, вам необходимо использовать 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

... где dt - псевдоним столбца для столбца, который содержитзначение даты для записей в любой таблице.

Использовать UNION ALL - поскольку данные взяты из двух разных таблиц, дубликатов для фильтрации не нужно менять.Но это означает, что вы должны получить другие столбцы, которые вы хотите из любой таблицы, выстроить в линию на основе данных и типа данных ...

0 голосов
/ 07 июля 2010

Я думаю, что вам лучше всего (и избегать использования пользовательского SQL) было бы взять последние X-посты и X-комментарии, перебрать каждый из них и построить массив для объединения двух в один «самый последний» набор данных;

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

Это не слишком красиво, но оно должно делать это.

0 голосов
/ 07 июля 2010

Специальный mySql не требуется, просто используйте цикл query_posts и функцию get_comments в цикле.

 <?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; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...