J'ai déjà posé une question connexe auparavant, mais je pense avoir enfin résolu le noeud du problème.
J'utilise Champs personnalisés avancés et un certain nombre de champs personnalisés sont attachés à mon type de publication. J'essaie de modifier l'URL pour recevoir des publications via leur champ et leur valeur personnalisés.
Et je deviens vraiment proche. C'est ce qui se trouve actuellement dans mon functions.php :
add_action('pre_get_posts', 'my_pre_get_posts');
function my_pre_get_posts( $query ) {
if( is_admin() ) { return; }
$meta_query = $query->get('meta_query'); // get original meta query
if( isset($_GET['type']) ) {
$type = '"' . $_GET['type'] . '"';
$meta_query[] = array(
'key' => 'type',
'value' => $type,
'compare' => 'LIKE',
);
}
$query->set('meta_query', $meta_query); // update the meta query args
return; // always return
}
Maintenant, parce qu'ACF utilise des tableaux sérialisés lorsqu'il s'agit de gérer plusieurs valeurs dans des champs personnalisés, j'utilise la requête LIKE
. Le champ personnalisé type
accepte en réalité plusieurs valeurs et je peux afficher les publications de un type
(i.e: women) avec succès.
website.com?type=women
Mais lorsque vous essayez de récupérer plusieurs type
s (c'est-à-dire: femmes, hommes, garçons), cela ne fonctionne pas.
website.com?type=women,men,boys
Maintenant, je réalise que je travaille avec des tableaux sérialisés ici, et si je voulais interroger plusieurs type
, je devrais exploser cette variable $type
, mais cela ne semble pas fonctionner non plus.
Si quelqu'un peut aider, je cherche désespérément une solution. Merci!
EDIT | Plusieurs fois pour chaque type:
$meta_query[] = array(
'relation' => 'OR',
array(
'key' => 'type',
'value' => 'men',
),
array(
'key' => 'type',
'value' => 'women',
),
array(
'key' => 'type',
'value' => 'boys',
),
);
Je viens de comprendre moi-même comment le faire
Jetez un oeil à cet exemple:
$args = array();
$args['relation'] = 'OR';
foreach ( $tag_ids as $t ) {
$args[] = array(
'key' => 'afz_entry_tags',
'value' => serialize( strval( $t->id ) ),
'compare' => 'LIKE'
);
}
$query->set( 'meta_query', $args );
Je reçois $tag_ids
avec un get_results
normal.
Ensuite, je crée le premier élément du tableau pour meta_query afin de définir le OR i nécessaire.
Ensuite, je parcoure la collection d'objets que j'ai reçus de get_results et crée autant de tableaux pour la méta_query que nécessaire.
Il fonctionne comme un charme.
LIKE
ne prend pas de valeur de tableau. Vos options sont probablement:
OR
.REGEXP
compare et collez plusieurs types dans une expression régulière, ce qui peut être très lent à exécuter.