I’ll answer my own question if someone needs help with this in the future.
You can simply add ?orderby=’date’&order=’dsc'
at the end of an archive URL and WordPress will recognize it and order the archive accordingly. However, this doesn’t work with properties that aren’t predefined by WordPress, so doing something like ?orderby=’likes’&order=’dsc'
will do nothing.
But you can check for the value of orderby
in a PHP function before the archive is generated and if it is ‘likes’ then modify the query. ULike has a function to get posts sorted by likes, wp_ulike_get_popular_items_ids()
. So my code at the end looked like this (it’s a bit simplified for demonstration):
HTML:
<select name="sort" id="sort" onchange="document.location.href=\'?\' + this.options[this.selectedIndex].value" class="archive_sort_dropdown">
[...]
<option value="orderby=likes" class="archive_sort_dropdown_item" >Most liked</option>
[...]
</select>
PHP:
add_action('pre_get_posts', 'most_liked_query');
function most_liked_query($query)
{
if($_GET['orderby'] == 'likes'){
$post__in = wp_ulike_get_popular_items_ids(array(
"rel_type" => 'article', //post type
"period" => 'all', //all time, I think you can set week, day etc
"limit" => 0 //how many posts to get, I think 0 is all posts
));
$query-> set('post__in', $post__in);
$query-> set('orderby', 'post__in');
return $query;
}
}
-
This reply was modified 3 years, 9 months ago by pend00.