首页 > 解决方案 > 在自定义 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(); ?>

标签: phpwordpressfilter

解决方案


推荐阅读