我觉得我已经在网络上,并再次寻找答案,这真的开始磨练我的齿轮。
不确定这是否是正确的方法,但我想以query_arg的形式将一个query_posts数组添加到URL。这是我们的查询:
query_posts( array( 'meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged,
如何使用add_query_arg将其传递给URL,以便使用该meta_key / query_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_key / meta_value对类别页面上的帖子进行排序。除了使用meta_key之外,以类似的方式进行排序?orderby = date。
这可以做到,对吗?因为我认真开始认为这是不可能的。
来自Rahil的回答
<?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_posts数组一样正常的值,帖子不会重新排序。
答案 0 :(得分:0)
你实际上正在做add_query_arg
罚款,但在分配变量之前回显变量是你的问题。
<a href="<?php echo $by_rank;?>"> Rank </a>
--------------------^^^^^^^^ ----->> undefined variable
<?php $by_rank= esc_url(add_query_arg(array('meta_key' => 'rank', 'orderby' => 'meta_value_num', 'order' => 'DESC'))); ?>
------^^^^^^^^ ----> Now its defined.
更改为:(记住代码从上到下运行)
<?php
$meta_key = (isset($_GET['meta_key'])) ?
sanitize_text_field($_GET['meta_key']) : ''; // use default value here ''
$orderby = (isset($_GET['orderby'])) ?
sanitize_text_field($_GET['orderby']) : ''; // use default value here ''
$order = (isset($_GET['order'])) ?
sanitize_text_field($_GET['order']) : ''; // 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>
现在为$by_rank
分配了一个值,您可以回复它。它将输出
/?meta_key=rank&orderby=meta_value_num&order=DESC
修改强>
现在您必须将变量$meta_key
,$orderby
和$order
置于query_posts()
函数之上:
像这样:
query_posts(array(
'meta_key' => $meta_key,
'orderby' => $orderby,
'order' => $order,
'paged' => $paged
));
现在更改来自网址的查询字符串会影响query_posts()
答案 1 :(得分:0)
答案: -
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');
创建一个pre_get_posts过滤器,只需将meta_key名称传递给URL,就像这样?orderby = rank