En son yorum tarafından Wordpress Mesajları sipariş

6 Cevap php

Ben en son yorumun Wordpress Mesajları sipariş etmek isteyen kulüpler. Bilgime iyi için bu WP_Query nesnesini kullanarak mümkün değildir ve kolayca yazabilirsiniz özel $ wpdb sorgusu gerektirir. Ancak, daha sonra bu nesne kapalı çalıştırmak için kurulum nasıl döngü bilmiyorum.

Herkes yardımcı olabilir?

6 Cevap

Tamam çocuklar,

Bir burada büyük yanıtlar çok, ama belli ki kimse onları test etmek için zaman aldı.

Hao Lian ilk iyi orijinal cevap için kredi alır, ama ne yazık ki onun kodu olmadan yorum mesajları göstermez.

Kaptan Keytar doğru yolda olduğunu, ancak onun kod ayrı bir sonucu olarak her yazı ve eki gösterecektir.

İşte Kaptan Keytar değiştirilmiş bir sürümü ama yayımlanmıştır türü 'post' .. sonuçlarını sınırlar (taslakları almamak için!)

    select wp_posts.*,
    coalesce(
        (
            select max(comment_date)
            from $wpdb->comments wpc
            where wpc.comment_post_id = wp_posts.id
        ),
        wp_posts.post_date
    ) as mcomment_date
    from $wpdb->posts wp_posts
    where post_type = 'post'
    and post_status = 'publish' 
    order by mcomment_date desc
    limit 10

Atamak

select wp_posts.*, max(comment_date) as comment_date
from $wpdb->posts wp_posts
right join $wpdb->comments
on id = comment_post_id
group by ID
order by comment_date desc
limit 10

bazı değişken $ sorgu için. Siz 10 veya sorgu kendisi ile uğraşmak olabilir. (Ben hiçbir SQL optimizasyonu ninjayım.) Sonra kod gibi bir şey olacaktır

<?php
     $results = $wpdb->get_results($query) or die('!');
     foreach ($results as $result):
?>
[insert template here]
<?php endforeach ?>

Bu model daha derinlemesine kaplıdır by the Codex.

I işlevinde bir yerel WP daha basit, kullanmıştır. yardımcı olur umarım ve bazı bir geliştirmeye devam edebilirsiniz. Burada başlık ve gösteren bir basitleştirilmiş versiyonu Yorum içerik ve birlikte yazının alıntı get_comments kullanarak son yorumladı mesaj gelen yazar.

    $args = array(
        'status' => 'approve',
        'number' => 6,
        'order' => 'DESC'
    );
    $comments = get_comments($args);

    foreach($comments as $comment) : $count++;

            $post_args = array(
                'post_type' => 'post',
                'p' => $comment->comment_post_ID,
                'posts_per_page' => 1
                );

            $posts = get_posts($post_args);

            foreach($posts as $post) : setup_postdata($post);

                the_title();
                the_excerpt();

            endforeach;

        echo $comment->comment_content;     
        echo $comment->comment_author;

    endforeach;

Hao Lian cevabı bir zeyilname olarak, aşağıdaki sorguyu kullanabilirsiniz eğer:

select wp_posts.*,
coalesce(
    (
        select max(comment_date)
        from $wpdb->comments wpc
        where wpc.comment_post_id = wp_posts.id
    ),
    wp_posts.post_date
) as mcomment_date
from $wpdb->posts wp_posts
order by mcomment_date desc
limit 10

Bu henüz yorum yok mesajların karıştırır ve POST_DATE ve max (comment_date) göre sıralar.

Hao Lian tarafından önerilen kodu eklemek gerekir ki gerçeği dışında mükemmel çalışıyor fıkra comment_count = 0, bu durum spam yorum tarafından neden olduğu ile POST çekerek önlemek için NEREDE aşağıdaki.

The WHERE clause to add is as follows:

WHERE comment_approved = '1' AND comment_type = '' AND post_password = ''

Complete code after adding the where clause shoud look like following:

select wp_posts.*, max(comment_date) as comment_date
from wp_posts 
right join wp_comments on id = comment_post_id
WHERE comment_approved = '1' AND comment_type = '' AND post_password = ''
group by ID    
order by comment_date desc
limit 6

Ben max işlevi ekleyerek sonuçlarınızı berbat olacağını düşünüyorum. MySQL her birinden max çekmek için gitmiyor. Bu tam kümesinden max çekmek için gidiyor. Bu size sonuç alırsınız sorgu:

select wp_posts.*, comment_date
from $wpdb->posts wp_posts
right join $wpdb->comments
on id = comment_post_id
group by ID
order by comment_date desc
limit 10

WP kuralını takip etmek istiyorsanız, bundan sonra, bu kullanmak ve sonra da şablonlar çoğu (döngü dayalı) kullanarak emin işlevlerini kullanabilirsiniz:

$results = $wpdb->get_results($query) or die('!');
     foreach ($results as $post):
    setup_postdata($post);