J'ai l'impression de parcourir tout le Web et de revenir à la recherche d'une réponse à cette question, et cela commence vraiment à brouiller les engrenages.
Pas sûr que ce soit la bonne façon de le faire, mais je veux ajouter un tableau query_posts à une URL sous la forme d'un query_arg. Voici notre requête:
query_posts( array( 'meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged,
Comment utiliser add_query_arg pour transmettre cela à l'URL afin de réorganiser les publications avec ce tableau meta_key/query_posts? J'ai essayé ceci, cela ne semble pas changer l'ordre des messages, il y a quelque chose qui me manque ici.
<a href="<?php echo $by_rank;?>"> Rank </a>
<?php $by_rank= esc_url(add_query_arg(array('meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC'))); ?>
La raison pour laquelle je souhaite ajouter les vars de requête à la chaîne d'URL est que les utilisateurs peuvent trier les publications sur les pages de catégorie en fonction de la méta_key/meta_value. En quelque sorte, de manière similaire à faire? Orderby = date, sauf avec une meta_key.
Cela peut être fait, non? Parce que je commence sérieusement à penser que ce n'est pas possible.
EDIT: - J'ai essayé, cela fonctionne pour trier les messages par ordre ASC/DESC, mais pas par la méta_key
<?php
$meta_key = (isset($_GET['meta_key'])) ?
sanitize_text_field($_GET['meta_key']) : 'rank'; // use default value here ''
$orderby = (isset($_GET['orderby'])) ?
sanitize_text_field($_GET['orderby']) : 'meta_value_num'; // use default value here ''
$order = (isset($_GET['order'])) ?
sanitize_text_field($_GET['order']) : 'DESC'; // use default value here ''
$by_rank = esc_url(add_query_arg(array(
'meta_key' => $meta_key,
'orderby' => $orderby,
'order' => $order
)));
?>
<a href="<?php echo $by_rank;?>"> Rank </a>
Je devrais ajouter que si j'ajoute le tableau query_posts directement dans le modèle de page, cela fonctionne parfaitement.
Qu'en est-il quelque chose comme ça?
function wpse139657_orderby(){
if( isset($_GET['orderby']) ){
$order = $_GET['order'] or 'DESC';
set_query_var('orderby', 'meta_value_num');
set_query_var('meta_key', $_GET['orderby']);
set_query_var('order', $order);
}
}
add_filter('pre_get_posts','wpse139657_orderby');
De cette façon, vous pouvez appeler vos URL avec un suffixe ?orderby=rank
et il devrait faire l'affaire. Vous pouvez également avoir un paramètre optionnel order
, si vous souhaitez l'implémenter.