How do I filter posts by most liked/voted?

So it's pretty simple, there's way to filter posts by date, random, etc.. How do I filter it to show the posts with the most likes/votes? Is there a specific php code I can add to the post query thing?

This is how my posts are pulled:

<?php $i = 0; while (have_posts()) : the_post(); $i++; ?>

I add this to make it random..

<?php query_posts('orderby=rand'); $i = 0; while (have_posts()) : the_post(); $i++; ?>

How would I edit that to show it with the top liked posts at the top? Throwing out the random thing.. Just showing how I know how to edit it already..

Thanks in advance.

  • aristath

    Hello there @Chippy, i hope you're well today!

    You can use the wdpv_popular() function to display posts sorted by votes.
    Example:

    <?php
    
    // display 5 highest rated posts on the current blog.
    wdpv_popular();
    
    // display 3 highest rated posts on the current blog.
    wdpv_popular(3);
    
    // display 5 highest rated posts on entire network.
    wdpv_popular(5, true);
    
    // display 10 highest rated posts on entire network.
    wdpv_popular(10, true);

    I hope that helps!

    Cheers,
    Ari.

  • Hoang Ngo

    Hi @Chippy,,

    I hope you are well today and I'm sorry for the delay.

    Please add this code to your theme functions.php or use mu-plugins

    This will sort the post by the most post vote. You can base on this code and have some customize to fit with your need.

    add_filter('posts_results', 'inject_post_vote_query', 10, 2);
    function inject_post_vote_query($posts, $q)
    {
        if ($q->is_main_query()) {
            global $wpdb;
            $clone = $posts;
            foreach ($clone as &$post) {
                $sql = "SELECT COUNT(id) as count FROM " . $wpdb->prefix . 'wdpv_post_votes WHERE post_id=%d AND blog_id=%d';
                $sql = $wpdb->prepare($sql, $post->ID, get_current_blog_id());
    
                $count = $wpdb->get_var($sql);
                $post->post_vote = $count;
            }
            //sort
            usort($clone, '_inject_post_vote_query');
           return $clone;
        }
        return $posts;
    }
    function _inject_post_vote_query($a, $b)
    {
        return $a->name > $b->name;
    }

    If you have any issues please don't hesitate to let us know so we can assist

    Best regards,
    Hoang Ngo