How can I sort a
WP_Query based on how many 'matches' there are on the
tax_query set. Furthermore, how can I then add more posts if the
posts_per_page is not met due to the
I'm fairly new to
WP_Query editing, therefore this question. I've checked out multiple posts already but can't seem to find the fitting answer.
I'm in the situation where I extend my
WP_Query in the
pre_get_posts hook. Here, I'm adding a
tax_query to first receive posts that are in certain categories OR contain certain tags. This is (the interesting part of) the code I use in
$extend = [ [ 'relation' => 'OR', [ 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => [1, 2, 3], 'include_children' => false ], [ 'taxonomy' => 'post_tag', 'field' => 'term_id', 'terms' => [6, 7, 8], ] ] ]; $query->set('tax_query', $extend);
Which actually gives me the results I want. Based on the original query, which has
cat => 4, I only receive posts that have:
- Category 4, AND;
- Either category 1/2/3 OR tag 6/7/8
Which is the desired effect. However, the problem comes when the query doesn't return enough results.
For example: The
posts_per_page is set to 5 for example, and after the
pre_get_posts hook the query only returns 3 posts. If this happens, I'd like to add another 2 posts to fill up to 5. These posts do not have to meet the
pre_get_posts tax_query, but just the original query_vars. I've managed to get this working with another
found_posts hook, on which I check how many posts I already have and if that's enough to meet the
posts_per_page var. If it does not, it'll search for more posts and add those.
I'm not sure if implementing the
found_posts hook is the way to go here, as I'd like to sort the posts based on how many 'matches' they have in the
tax_query first, and then add the other posts (that do not match) to the end, so that the posts with category or tag in the tax_query get displayed first.
Has anyone else encountered this before?
Looking forward to any help, thanks a bunch!