Упорядочивание по нескольким параметрам в пользовательском цикле запросов WordPress

Я реализовал бесконечную прокрутку, и в результатах поиска при упорядочении по цене или любому другому значению она не работает. Здесь внутри моего поставленного в очередь сценария: -

 isset($_GET['orderby'])?$ga_order_by = $_GET['orderby']: $ga_order_by = '';//grabbing the orderby value 



  if ( gettype($result) == 'object') {
    $ga_wp_query = new \WP_Query([ 'post_type'=> ['product_variation', 'product'], 'post__in' => $includes, 'orderby' => ['post__in',$ga_order_by], 'order' => 'ASC' ]);//so i'm ordering by search results and dynamically grabbed value.
  } else {
    $ga_wp_query = new \WP_Query([ 'post_type'=> 'product', 'post__in' => $includes, 'orderby' => ['post__in',$ga_order_by], 'order' => 'ASC']);
  }

 $args['ga_search_posts'] = json_encode($ga_wp_query->query_vars);

Внутри моего вызова функции обработки ajax при поиске: -

 $search_query = json_decode( stripslashes( $_POST['search_posts'] ), true );//this is the   $args['ga_search_posts'] i'm posting via my javascript

    $search_query['post_status'] = 'publish';
    $search_query['posts_per_page'] = get_option('posts_per_page');
    $search_query['paged'] = $_POST['page'] + 1;

    wc_set_loop_prop( 'total', $_POST['search_count'] );
    add_filter( 'woocommerce_get_price_html', 'labtag_show_price' );

    ob_start();

    query_posts( $search_query);


    if (  have_posts() ) {//product loop
      if ( wc_get_loop_prop( 'total' ) ) {
            while ( have_posts() ) {
               the_post();
              wc_get_template_part( 'content', 'product' );
            }
          }
  } 
  $data = ob_get_clean();
  die($data); 
  exit; 

Это работает, за исключением случаев, когда я пытаюсь упорядочить по любому параметру, например, по цене и т. д. Не могу ли я «orderby» => ['post__in',$ga_order_by] объявить как массив? Если нет, я должен передавать все идентификаторы сообщений обработчику ajax. перебирать их и сортировать (если это так, как обрабатывать мои пользовательские параметры order_by)?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 543
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

Итак, с OrderBy WordPress у вас есть несколько разных вариантов.

Если вы хотите, чтобы оба параметра были отсортированы в одном и том же направлении ASC или DESC, то аргумент предполагает одну строку с параметрами, разделенными пробелом.

Multiple 'orderby' values Display pages ordered by 'title' and 'menu_order'. (title is dominant):

$args = array(
  'post_type' => 'page',
  'orderby'   => 'title menu_order',
  'order'     => 'ASC',
);
$query = new WP_Query( $args );

Вы используете массив, когда сортируете каждый параметр по-разному:

Multiple 'orderby' values using an array

> Display pages ordered by 'title' and 'menu_order' with different sort
> orders (ASC/DESC) (available since Version 4.0):
$args = array(
  'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
);
$query = new WP_Query( $args );

В вашем случае, поскольку вы используете переменную, подумайте о создании строки, а затем используйте ее в своем массиве аргументов, то есть:

//start with a space, then .= to concatenate the $_GET parameter with the space if it's set, or clear the string if it's not.
$ga_order_by = " ";   
isset($_GET['orderby'])?$ga_order_by .= $_GET['orderby']: $ga_order_by = '';
//grabbing the orderby value and building our complete string.
            $orderBy = 'post__in'.$ga_order_by;        
          if (gettype($result) == 'object') {
              $ga_wp_query = new \WP_Query([ 'post_type'=> ['product_variation', 'product'], 'post__in' => $includes, 'orderby' => $orderBy , 'order' => 'ASC' ]);//so i'm ordering by search results and dynamically grabbed value.
          } else {
              $ga_wp_query = new \WP_Query([ 'post_type'=> 'product', 'post__in' => $includes, 'orderby' => $orderBy, 'order' => 'ASC']);
          }

Спасибо, это очень полезно, попробуйте это как строку в соответствии с вашим ответом, например, $orderBy = 'post__in'.$ga_order_by; и отредактировав его в соответствии с моей ситуацией, сделал свою работу

YeshDev 07.02.2019 16:34

Привет, Кейтлин, теперь я застрял в улучшении скорости прокрутки... Я добавил здесь больше кода, чтобы быть конкретным stackoverflow.com/questions/54583343/…. Любые идеи о том, как справиться с этой ситуацией? Спасибо

YeshDev 07.02.2019 23:36

Поскольку публиковать все в одном посте слишком долго, я разделил его на два поста. Пожалуйста, обратите внимание на это тоже stackoverflow.com/questions/54282847/…. и дайте мне знать ваше мнение. Спасибо

YeshDev 07.02.2019 23:55

Другие вопросы по теме