За последние 24 часа нас посетили 24593 программиста и 1675 роботов. Сейчас ищут 1557 программистов ...

WP_Query и фасетный поиск

Тема в разделе "Wordpress", создана пользователем Sentim, 17 июн 2017.

  1. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте. Ответьте на несколько вопросов, если есть такая возможность. Спасибо.

    Хочу реализовать фасетный поиск(сортировка) на своем сайте - в пример беру яндекс маркет и шикимори - но столкнулся с непониманием того, как такой поиск устроен в wordpress и вне его, например, если мы реализуем подобный поиск через фреймворк или на чистом php.

    1) Какой смысл использовать WP_query, если все нужные нам записи мы можем получить подставив get параметры в url, которые можем получать из полей фильтра? (наверное, идиотский вопрос, но я крайне хочу услышать на него ответ)

    Дополнение к вопросу:
    К примеру, если я на своем сайте вручную пропишу wordpress/?category_name=films, то wp выдаст посты которые относятся к категории 'films', из этого у меня возник вопрос: зачем использовать WP_Query, если я из li могу передавать get параметр и уже в функции строить необходимый url и возвращать его.

    2) У нас есть пять полей, которые реализованы с помощью чекбоксов(соответственно изначально они не выбраны), после юзер выбирает один из них, страница перезагружается и выводит записи отсортированные по выбранному полю. на перезагруженной странице мы так же имеем 5 полей, но одно из которых уже выбрано(в состоянии актив), и т.д . Почему чекбокс остается в состоянии актив, а не сбрасывается?

    Каким образом запоминаются выбранные пользователем поля даже после перезагрузки страницы?
     
  2. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте. Ответьте на несколько вопросов, если есть такая возможность. Спасибо.

    Хочу реализовать фасетный поиск(сортировка) на своем сайте - в пример беру яндекс маркет и шикимори - но столкнулся с непониманием того, как такой поиск устроен в wordpress и вне его, например, если мы реализуем подобный поиск через фреймворк или на чистом php.

    1) Какой смысл использовать WP_query, если все нужные нам записи мы можем получить подставив get параметры в url, которые можем получать из полей фильтра? (наверное, идиотский вопрос, но я крайне хочу услышать на него ответ)

    Дополнение к вопросу:
    К примеру, если я на своем сайте вручную пропишу wordpress/?category_name=films, то wp выдаст посты которые относятся к категории 'films', из этого у меня возник вопрос: зачем использовать WP_Query, если я из li могу передавать get параметр и уже в функции строить необходимый url и возвращать его.

    2) У нас есть пять полей, которые реализованы с помощью чекбоксов(соответственно изначально они не выбраны), после юзер выбирает один из них, страница перезагружается и выводит записи отсортированные по выбранному полю. на перезагруженной странице мы так же имеем 5 полей, но одно из которых уже выбрано(в состоянии актив), и т.д . Почему чекбокс остается в состоянии актив, а не сбрасывается?

    Каким образом запоминаются выбранные пользователем поля даже после перезагрузки страницы?
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    А через что, ты думаешь, это в WordPress реализовано? :) WP_Query. Но иногда же хочется вывести, к примеру, на главную страницу, на верх, какие-нибудь 5 последних записей, написанный Васей Пупкином в категории "Особенности высших приматов", а вниз - 10 записей Маши Пересветовой в категории "Всё про одноклеточных". Вот тогда соответствующие WP_Query создаются самостоятельно.

    Видимо потому, что кто-то умный так спрограммировал :)
     
    Sentim нравится это.
  4. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    То есть, я могу реализовать фильтр сортировки записей с помощью передачи get параметров из li либо input и уже в функции строить необходимый url адрес и возвращать его? Разве это правильный подход?

    Вопрос был в другом, а именно о том как этого добиться.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Какие ещё url? Если тебе нужно где-то в любом месте запросить посты (типа тех примеров, что я привёл), независимо от того, что там передали в url, пишешь
    PHP:
    1. $query = new WP_Query(/* сюда нужные параметры */);
    2. while ($query->have_post()) {
    3.   /* Чего-то вывести */
    4. }
    Вопрос не был "как этого добиться"
    У меня с русским языком пока всё нормально.

    Как добиться - при выводе чекбокса проверить наличие нужного get-параметра, и поставить checked, если надо.
    --- Добавлено ---
    Из li параметры не передаются, могут передаваться через <a>
    --- Добавлено ---
    Ну посмотри, как у умных людей реализовано
    Видишь, я пощёлкал фильтр - и всё в get-параметрах. Так и надо делать
     
    Sentim нравится это.
  6. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    Если нужно заведомо или посредством ajax вывести в определенной части страницы записи, то вопрос сразу отпадает, т.к без wp_query не обойтись. Но я пытаюсь реализовать полноценную страницу фильтра сортировки записей, отсюда и возник вопрос.

    Мы же можем отлавливать значения, например, из класса li посредством jquery и их передавать в функцию, которая будет с ними работать.
    К примеру, если нам нужно отсортировать записи по рейтингу и мы не хотим использовать чекбоксы, то делаем так:
    HTML:
    1. <li class="order-by-ranked">По рейтингу</li>
    То есть, пользователь выбирает определенный чекбокс, чекбокс переходит в состояние active и передает get параметр, мы этот get параметр ловим в функции и на его основе с помощью wp_query выводим записи. Я правильно понимаю?
    Опять же, что делать, если мы не используем форму, передавать параметры через js или как?
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Ну если нужно без перезагрузки - ajax в помощь
    --- Добавлено ---
    С помощью javascript можем. Ну послать на ajax, а там уже смотреть - сможет wordpress это без нас обработать, или ему помочь надо.
     
    Sentim нравится это.
  8. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    С помощью javascript можем. Ну послать на ajax, а там уже смотреть - сможет wordpress это без нас обработать, или ему помочь надо.[/QUOTE]

    Так а как строить url, если мы передаем параметры для wp_query без формы или через ajax?
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Ну просто передать в урл соответствующие параметры, какая разница? Другое дело, что если параметры нестандартные, тут надо повозиться порядочно. Я в плагине, который делал, этому много строк посвятил кода. Надо хуки ловить, объяснять wordPress-у, как изменить SQL запрос.
    query_vars,
    posts_join,
    posts_where,
    posts_orderby

    А стандартные - ну в принципе, те, что в WP_Query возможно строкой передать, они и сработают.
     
    Sentim нравится это.
  10. Sentim

    Sentim Новичок

    С нами с:
    17 июн 2017
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за помощь.