J'essaie de définir par programme 'meta_query' pour un filtre censé filtrer un type de publication personnalisé en fonction de l'existence d'une métakey. J'ai essayé plusieurs manières, que j'ai laissées dans le code ci-dessous, commentées. Aucune des solutions ne modifie la propriété 'meta_query' de $ query, qui reste obstinément définie sur 'false'.
J'ai le sentiment qu'il me manque quelque chose de fondamental. Veuillez aider. Je vous remercie.
add_filter( 'parse_query', 'filter_posts_by_no_associated_contact' );
function filter_posts_by_no_associated_contact( $query ) {
global $pagenow;
$qv = &$query->query_vars;
if( $pagenow == 'edit.php' &&
isset($qv['post_type']) && $qv['post_type'] == 'act'
&& isset($_GET['contact_status']) && $_GET['contact_status'] != '' ){
$compare = ( $_GET['contact_status'] == 'with_contact' ) ? 'EXISTS' : 'NOT EXISTS';
// $query->meta_query[] = array(
$metaquery = array(
'key' => 'contact_associated',
'value' => 'justAstring',
'compare' => $compare,
'type' => 'CHAR'
);
$query->set( 'meta_query', $metaquery );
}
}
j'ai vu cela fait ailleurs :
$qv = &$query->query_vars;
$qv['meta_query'] = array();
$qv['meta_query'][] = array(
'field' => 'meta-key',
'value' => $whatever,
'compare' => '',
'type' => ''
);
Mais cette solution aboutit à un php "Attention: tentative de modification de la propriété d'un non-objet".
meta_query
doit être un tableau de tableaux. Vous avez seulement un tableau.return
informations. Le vôtre ne.parse_query
est unactionpas un filtre, malgré votre utilisation de add_filter
. Utilisez add_action
à la place.pre_get_posts
au lieu de parse_query
. C'est le prochain hook qui se déclenche après parse_query
( vérifiez la source ) et votre code fonctionne plus ou moins comme prévu si vous utilisez ce hook, en supposant la modification mentionnée dans le point 1.