php - 在自定义 WP_Query 中添加 Post 排序下拉列表
问题描述
我有一个带有工作搜索过滤器和过滤器的 wp_Query 循环。
我想集成一个下拉菜单,可以按价格和日期对帖子进行排序。当我尝试时,它并没有给我任何命令,好像它不可能一样我认为我的自定义 wp_Query 中缺少一些参数
我尝试了几种方法,但都没有成功,请帮助我
函数.php
function search_query()
{
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = [
'paged' => $paged,
'post_type' => 'cars',
'posts_per_page' => 0,
'tax_query' => [],
'meta_query' => [
'relation' => 'AND',
],
];
if( isset($_GET['key']) )
{
if(!empty($_GET['key']))
{
$args['s'] = sanitize_text_field( $_GET['key'] );
}
}
if( isset($_GET['prov']) )
{
if(!empty($_GET['prov']))
{
$args['tax_query'][] = [
'taxonomy' => 'prov',
'field' => 'slug',
'terms' => array( sanitize_text_field( $_GET['prov'] ) )];
}
}
if( isset($_GET['price_above']) )
{
if(!empty($_GET['price_above']))
{
$args['meta_query'][] = array(
'key' => 'pricefinal',
'value' => sanitize_text_field( $_GET['price_above']) ,
'type' => 'numeric',
'compare' => '>='
);
}
}
if( isset($_GET['price_below']) )
{
if(!empty($_GET['price_below']))
{
$args['meta_query'][] = array(
'key' => 'pricefinal',
'value' => sanitize_text_field( $_GET['price_below']) ,
'type' => 'numeric',
'compare' => '<='
);
}
}
return new WP_Query($args);
}
HTML
<form action="<?php print home_url('/cerca-cars'); ?>" method="get">
<div class="form-group">
<select class="form-control" name="sortposts">
<option value="date"
<?php echo selected($_GET['orderby'], 'date'); ?>
>
New
</option>
<option value="property_price-ASC">Prezzo Crescente</option>
<option value="property_price-DESC">Prezzo Descrescente</option>
<input
id="order"
type="hidden"
name="order"
value="<?php echo (isset($_GET['order']) && $_GET['order'] == 'ASC') ? 'ASC' : 'DESC'; ?>"
/>
<button type="submit" class="btn btn-success btn-lg btn-block">ORDINA</button>
</select>
<?php
global $query;
// let's create new array with args
if( !empty( $_GET['sortposts'] ) ) {
// I recommend to explode it because we're take 2 param values from one $_GET variable
$sort_args = explode( "-", $_GET['sortposts'] );
// $sort_args[0] is what we sort
// $sort_args[1] is how we sort - Ascending or Descending
$new_args['order'] = $sort_args[1];
if( $sort_args[0] == 'date' ) {
// date is a default WP_Query value, so we do nothing
$new_args['orderby'] == 'date';
} elseif( $sort_args[0] == 'property_price' ) {
$new_args['orderby'] = 'meta_value_num';
$new_args['meta_key'] = 'pricefinal';
}
}
$args = array_merge( $query->query_vars, $new_args ); query_posts( $args );?>
<?php $query = search_query(); ?>
<?php if( $query->have_posts() ) :?>
<?php while ($query->have_posts()) : $query->the_post(); ?>
解决方案
推荐阅读
- javascript - HTML - 内联标签不反映
- amazon-web-services - 生成 CloudFront 签名 URL 的问题;始终拒绝访问
- php - 致命错误:在第 219 行的 /[DIR]/php5.6.10/lib/php/PEAR.php 中调用未定义的方法 PEAR::XML_Parser()
- python - Python:具有不同替换的不同正则表达式
- python-3.x - TypeError:字符串索引必须是整数-python
- javascript - AngularJS 在嵌套组件之间正确共享数据
- azure - 如何使用 DotNet SDK 创建 LogicApp SQL Server 连接器的 API 连接
- git - 如何检查本地git存储库的嵌套结构
- octave - 如何使用混合类型在八度音程中迭代 xlsx 数据
- python - 如何告诉 pbr 在包中包含非代码文件