The question:
So here is my problem
I want to show Posts if have same category if not have post then show post of same tag. And to do that I am using “pre_get_posts” action. and setting query like following.
function related_custom_posts($query){
$query->set( 'category__in', array(2,3) );
$query->set( 'tag__in', array(10,13) );
}
add_action( 'pre_get_posts', 'related_custom_posts', 1 );
But it create sql like this
AND ( wp_term_relationships.term_taxonomy_id IN (2) AND tt1.term_taxonomy_id IN (11) )
but i need this with OR condition AND ( wp_term_relationships.term_taxonomy_id IN (2) OR tt1.term_taxonomy_id IN (11) )
Thanks in advance.
The Solutions:
Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.
Method 1
You can achieve the OR relation using the tax_query
argument like so:
$query->set( 'tax_query', array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'terms' => array( 2, 3 ),
),
array(
'taxonomy' => 'post_tag',
'terms' => array( 10, 13 ),
),
) );
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0