是否可以创建永久链接以使用META_KEY排序?

时间:2014-03-30 作者:andy

我觉得我一直在网络上到处寻找答案,现在我真的开始磨磨蹭蹭了。

不确定这是否是正确的方法,但我想以query\\u arg的形式向URL添加query\\u posts数组。这是我们的问题:

query_posts( array( \'meta_key\' => \'rank\', \'orderby\' => \'meta_value_num\', \'order\' => \'DESC\' , \'paged\' => $paged,
如何使用add\\u query\\u arg将其传递到URL,以便使用meta\\u键/query\\u posts数组重新排序帖子?我试过了,它似乎并没有改变帖子的顺序,我这里缺少了一些东西。

<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\'))); ?>
我想将查询变量添加到URL字符串的原因是,用户可以根据meta\\u键/meta\\u值对类别页面上的帖子进行排序。有点像这样?orderby=日期,但带有meta\\u键的除外。

这是可以做到的,对吗?因为我真的开始认为这是不可能的。

编辑:-尝试了这个,它可以按ASC/DESC顺序对帖子进行排序,但不能按meta\\u键

<?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>
我应该补充一点,如果我将query\\u posts数组直接添加到页面模板中,它就可以正常工作。

1 个回复
最合适的回答,由SO网友:Sunyatasattva 整理而成

那样的怎么样?

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\');
通过这种方式,您可以使用?orderby=rank 后缀,它应该会起作用。您还可以选择order 参数,如果要实现它。

结束