J'essaie de modifier la boucle WordPress principale sur mes pages de catégorie, comme ceci:
add_filter('parse_query', 'my_modified_query');
function my_modified_query( $q ) {
if (!is_admin() && is_category()) {
$q->set( 'orderby', 'meta_value' );
$q->set( 'meta_key', 'my_key' );
}
return $q;
}
mais cela ne semble pas fonctionner.
Cependant, modifier quelque chose comme:
$q->set( 'order','title' );
$q->set( 'orderby', 'DESC');
marche parfaitement. Tout simplement pas
$q->set( 'orderby', 'meta_value' );
$q->set( 'meta_key', 'my_key' );
aucune idée pourquoi c'est?
En fin de compte, toutes les méta-requêtes sont exécutées via _get_meta_sql
.
Ligne 402 - 403 dans la fonction _get_meta_sql
L'instruction coditive suivante s'exécute pour toutes les méta-requêtes.
if ( empty( $meta_key ) && empty( $meta_value ) )
continue;
Il existe un ticket pour cela qui décrit ce que nous devrions pouvoir faire.
http://core.trac.wordpress.org/ticket/16735
Ce que vous pouvez faire, cependant, est délibérément de transmettre à votre requête un meta_value
que vos publications n’auront probablement jamais et d’utiliser la comparaison !=
(pas égale), techniquement, cela devrait vous permettre d’obtenir les bonnes publications, par exemple.
$q->set( 'meta_key', 'my_key' );
$q->set( 'meta_value', 'WPSE_RULES!' );
$q->set( 'meta_compare', '!=' );
$q->set( 'orderby', 'meta_value' );
Il y a une autre chose cependant, vous avez eu ces mauvaises conditions auparavant ..
$q->set( 'order','title' );
$q->set( 'orderby', 'DESC');
order
définit la direction dans laquelle ordonner les résultats. Les valeurs valides sont asc
ou desc
(majuscules ou minuscules).
orderby
définit l'ordre de classement des résultats, par exemple. date, titre, méta valeur, etc.
Je n'ai pas mentionné qu'il existe en fait une nouvelle méthode pour interroger les publications basées sur la méta maintenant, en utilisant le paramètre meta_query
, mais vu que cela ne résoudra pas le problème que j'ai mentionné ci-dessus et que les méta-paramètres plus anciens sont toujours (finalement) get converti en un meta_query
de toute façon, je vais simplement offrir un lien vers quelques exemples.
http://scribu.net/wordpress/advanced-metadata-queries.html
J'espère que tout aide .. :)
vous avez probablement eu la solution car elle est passée presque un an depuis que vous avez posté. J'ai eu le même problème il y a quelques heures jusqu'à ce que je sache que j'utilisais des chiffres - j'ai donc utilisé meta_value_num
insted of meta_value
.
Servus Sarah. Je suppose que cela concerne un de vos thèmes d’envato-shop? Avez-vous déjà essayé d’imprimer la requête comme ceci (avant le renvoi): echo '<pre>'; print_r($q); echo '</pre>';
.
Je suppose que vous ajoutez ceci dans un themes functions.php?
$q->set( 'oderby', 'DESC' );
fonctionne, mais $q->set( 'oderby', 'meta_value' );
pas? Essayez d’utiliser deux paramètres orderby de base, séparés par des espaces, pour vérifier si le comportement par défaut fonctionne partout. Si oui, vous pourriez vous retrouver avec une faute d'orthographe. Est-ce que d'autres valeurs que "my_key" fonctionnent pour "meta_key"? Sinon, il vous manque peut-être un paramètre 'meta_value'. Pas sûr sur celui-ci, mais jetez un oeil à celui-ci: http://codex.wordpress.org/Function_Reference/WP_Query#Parameters ou mieux encore, un regard direct sur la fonction dans le fichier core.