Ciao @abrugora,
Per fare quello che ti serve ti basta usare la hook pre_get_posts
che si aziona per ogni query, verifichi che la query sia quella corretta, prelevi il dato d $_GET['country']
, ed utilizzi la meta_query
di cui puoi leggere in https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
una volta che la query è stata settata ricorda di rimuovere il filtro per prevenire che questo sia eseguito per ogni altra query.
In codice è qualcosa del genere:
function my_custom_field_country_query_filter( \WP_Query $query ) {
if ( is_admin() ) {
return;
}
$meta_value = filter_input( INPUT_GET, 'country', FILTER_SANITIZE_STRING );
if ( ! $meta_value ) {
return;
}
if ( ! $query->is_main_query() ) {
return;
}
$queried = get_queried_object();
$taxonomies = [];
if ( $queried instanceof \WP_Term ) {
$taxonomies = array_filter( (array) $queried->taxonomy,
function ( $taxonomy ) {
return is_object_in_taxonomy( 'post', $taxonomy );
}
);
}
$post_type = isset( $query->query_vars['post_type'] ) ? $query->query_vars['post_type'] : '';
if ( empty( $taxonomies ) && 'post' !== $post_type && ! is_home() ) {
return;
}
$meta_query = $query->get( 'meta_query' );
if ( ! $meta_query ) {
$meta_query = [];
} else {
$meta_query['relation'] = 'AND';
}
$meta_query = array_merge( $meta_query,
[
[
'key' => 'country',
'value' => $meta_value,
'compare' => '=',
],
]
);
$query->set( 'meta_query', $meta_query );
$query->set( 'ignore_sticky_posts', true );
remove_action( 'pre_get_posts', 'my_custom_field_country_query_filter' );
}
add_action( 'pre_get_posts', 'my_custom_field_country_query_filter' );
Fagli qualche test, io ne ho fatti alcuni per home, categorie etc… ma meglio testare in vari contesti e che non crei conflitti con altri tuoi dati.
Quello che fa di base è controllare che la query sia quella corretta quindi se non è per un articolo o per un termine di tassonomia che non è registrato per il post type post
non effettua la modifica della query.
Una volta aggiunto il dato alla query il filtro viene rimosso così da evitare di eseguirlo più e più volte inutilmente.
Caso particolare la home se non hai settato nulla in WordPress non hai contesto e vengono prelevati i posts quindi non c’è un post type impostato nella query e per la pagina di archivio dei termini per cui il post type non esiste nella query e dipende tutto dal fatto che il termine appartenga alla tassonomia registrata per essere usata insieme al post type o meno.