Как сделать фильтрацию в wordpress

Добавил пользователь Skiper
Обновлено: 04.10.2024

Наличие на сайте поискового механизма позитивно сказывается на его посещении. Ведь таким образом посетитель может быстрее найти необходимую ему информацию даже в том случае, если присутствует хорошая навигация или карта сайта.

Среди стандартных инструментов WordPress имеется необходимая система поиска, которую в принципе можно вывести в любой части сайта. Безусловно, это очень удобно, так как эта гибкость может быть использована при разработке любой темы. Но тут есть один момент. Стандартный поисковый механизм не позволяет как-либо фильтровать результаты поиска. Но было бы неплохо иметь такую возможность, особенно если на сайте много категорий или меток.

Как в WordPress добавить фильтр в поиске?

Одним из способов решения этой задачи является использование бесплатного WordPress-плагина Search & Filter.

Плагин Search & Filter

Следует отметить, что плагин не добавляет поисковые фильтры на сайт в автоматическом режиме. Для этого он предлагает специальные шорткоды, которые принимают разные параметры для отображения параметров фильтрации. Вы можете использовать их любом месте сайте, включая виджеты, что обеспечивает гибкость в отображении и настройке.

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

Для вставки его в любое место WordPress-шаблона используют служебную команду do_shortcode(), которая отображает на странице содержимое шорткода. Она будет иметь вид:

Если добавить этот код в файл search.php, то страница поиска будет выглядеть так:

Рассмотрим другой пример, включающий включающий категории, теги, типы записей и дату.

Теперь вместо использования выпадающего поля выбора Вы также можете использовать флажки и добавлять метки для каждого поля. Для этого нужно добавить еще два параметра в наш шорткод.

Если Вы используете несколько полей, типов и заголовков, то нужно убедиться, что элементы находятся в одном порядке для каждого параметра.

Давайте посмотрим другой пример. На этот раз мы добавим поля категорий, тегов и почтовых полей с разными заголовками и типами полей формы.

Также эти шорткоды можно использовать в виджетах.

Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.

Фильтры и события — это то, что позволяет темам и плагинам изменять поведение ядра, не изменяя исходные файлы самого ядра WordPress. В этой статье мы расскажем вам о том, как работают фильтры и события в WordPress и как ими пользоваться в ваших темах и плагинах.

События

События или действия (actions) в WordPress очень похожи на события в JavaScript. Событие выполняется вызовом функции do_action() , а добавить функцию к любому событию можно с помощью функции add_action() .

При выполнении события или действия, выполняются все функции, добавленные к событию в определенном порядке. Это легче всего понять с помощью простого примера. Определяем три функции, которые будут выводить 1, 2 и 3 соответственно:

Добавляем функции к событию foo с помощью функции add_action() :

И выполняем наше событие с помощью функции do_action() :

Первый аргумент к функциям — это строка foo — название события. Название может быть любым, но во избежание конфликтов с другими плагинами и темами в собственных событиях лучше использовать префикс, например myplugin_foo , где myplugin это название вашего плагина.

Второй аргумент к функции add_action() — это функция, которая вызывается в момент выполнения события. Функции в рамках одного события выполняются в том же порядке, в котором они были добавлены к событию, за исключением когда функция добавляется к событию с повышенным или пониженным приоритетом. О приоритетах чуть позже.

Итак, наш пример вызовет функции one() , two() и three() по порядку, что выведет на экран 123. Конечно мы могли самостоятельно вызвать эти функции в этом же порядке на месте do_action() , что дало бы тот же самый результат. Так зачем использовать события?

Зачем использовать события

Любой другой плагин или тема смогут легко добавить или удалить функции из вашего события без необходимости изменять код вашего плагина. Такой подход делает ваш плагин более гибким. Например:

Таким образом, когда дело дойдет до вызова события foo в вашем плагине, на экран выведется уже не 123, а 124, поскольку другой плагин удалил функцию three() из вашего события с помощью функции remove_action() , и добавил на ее место новую функцию four() .

Пример с выводом чисел не самый полезный. На практике достаточно легко придумать события в вашей теме или в плагине, которые могли бы быть полезными для других плагинов, например:

Стоит так же отметить, что в самом ядре WordPress есть более 1500 фильтров и событий, которые можно использовать в темах и плагинах.

Фильтры

Фильтры в WordPress очень похожи на события. Главным отличием является то, что у фильтров есть значение, которое они передают каждой привязанной функции, соответственно каждая функция должна вернуть это же или измененное значение. Рассмотрим простой пример:

Эта функция принимает один аргумент, добавляет к нему единицу и возвращает результат. Добавим нашу функцию к новому фильтру с помощью add_filter() :

В функцию apply_filters() вторым аргументом мы передаем фильтруемое значение. Оно может быть любым и оно будет передаваться каждой функции привязанной к фильтру, при этом любой фильтр может это значение изменить.

В данном случае на экран выведется значение 6, поскольку значение 5 было пропущено через функцию plus_one() , которая изменила оригинальную переменную. Если убрать функцию у фильтра с помощью remove_filter() , то наш код выведет первоначальное значение 5:

Так же как и события, функции к фильтрам могут добавляться в любом другом плагине или в теме, и выполняются эти функции в том порядке, в котором они были добавлены к фильтру, за исключением повышенного или пониженного приоритетов.

Пример хорошего фильтра

Рассмотрим более интересный пример: создадим массив, который будет содержать ссылки на наши профили в социальных сетях и выводить эти ссылки в шапке нашей темы WordPress. В functions.php:

Возвращаемый массив можно использовать в цикле в нашем файле header.php:

Данный код выведет ссылки на Twitter и Facebook в шапке нашей темы. Для того чтобы добавить новую ссылку в список, нам придется изменять саму тему, или же создать новый фильтр в функции get_my_social_profiles() :

Таким образом любой плагин или дочерняя тема смогут легко управлять списком социальных профилей, не трогая оригинальную тему. Например, убрать ссылку на Twitter и добавить ссылку на Google+ можно с помощью следующего кода в плагине:

Фильтры и события в ядре WordPress

Как мы уже упомянули, в WordPress есть более 2000 фильтров и событий, которыми можно воспользоваться в плагинах или темах для того, чтобы изменить поведение ядра. Рассмотрим несколько интересных примеров.

Отключить комментирование

Отключить комментирование на всем сайте, на зависимо от настроек в параметрах можно с помощью следующего кода:

Фильтр comments_open используется в ядре WordPress каждый раз для того, чтобы проверить открыты ли комментарии к той или иной статье. Наша функция всегда возвращает значение false для этого фильтра, поэтому комментарии будут закрыты везде.

Кстати, ядро WordPress определяет несколько вспомогательных функций для работы с подобными фильтрами:

  • __return_true() — возвращает true
  • __return_false() — возвращает false
  • __return_zero() — возвращает 0
  • __return_empty_string() — возвращает пустую строку
  • __return_empty_array() — возвращает пустой массив
  • __return_null() — возвращает null

То есть наш фильтр на comments_open можно переписать в одну строку:

Изменить длину автоматических цитат

За длину автоматических цитат отвечает фильтр excerpt_length :

С помощью фильтра excerpt_more можно изменить текст, который который ставится в конце автоматический цитаты, по умолчанию это [. ] :

Добавить баннер к содержимому каждой статьи

Баннер с помощью фильтра the_content

Добавить favicon.ico в раздел

В разделе в каждой теме выполняется событие wp_head . Во время этого события можно вывести ссылку на файл favicon.ico, вставить произвольный код JavaScript или CSS и многое другое:

Учтите, что если вам необходимо подключить внешние .js или .css файлы, делать это стоит с помощью функций wp_enqueue_script() и wp_enqueue_style() во время события wp_enqueue_scripts , а не напрямую в wp_head .

Приоритеты

Функции добавленные к фильтрам и событиям выполняются в том же порядке, в котором они были добавлены, но порядок легко изменить с помощью приоритетов. Приоритет указывается третьим аргументом к функциям add_action() и add_filter() .

Без указания этого аргумента функции к фильтрам и событиям добавляются по умолчанию с приоритетом 10. Функции выполняются от меньшего приоритета к большему, т.е. чем меньше приоритет, тем раньше выполняется функция.

Вернемся к примеру с цифрами:

Если изменить приоритет выполнения функции three() на 9, то она выполнится раньше остальных:

Подобным образом, указав приоритет 11 для функции one() , она выполнится позднее всех остальных, несмотря на то, что она была добавлена первой с помощью add_action() :

Дополнительные параметры

В каждую функцию, привязанную к фильтру или событию, легко передать дополнительные параметры. Делается это при вызове функций do_action() или apply_filters() , например:

Ключевым моментом является то, что при добавлении функции к фильтру или событию нам необходимо указать количество принимаемых аргументов, за это отвечает четвертый параметр функций add_action() и add_filter() .

Например, если в функции к событию foo мы хотим принять все три аргумента, необходимо указать 3 в качестве четвертого параметра к add_action() :

Подобным образом, если в функции добавленной к фильтру мы хотим принять только $arg1 в качестве дополнительного аргумента, то просим add_filter() передать всего два аргумента — первый аргумент $value , и второй дополнительный аргумент $arg1 :

Пример

Хорошим примером передачи дополнительных аргументов является фильтр allow_password_reset , с помощью которого можно запретить сброс пароля для пользователей:

Это запретит сброс пароля для всех пользователей на сайте, но если нам необходимо запретить сброс пароля только супер-администраторам в сети мультисайт (в целях безопасности), мы можем воспользоваться дополнительным аргументом:

Запрет восстановления пароля с помощью фильтра

Запрет восстановления пароля с помощью фильтра

Учтите, что функции привязанные к фильтрам могут изменять только первый аргумент, передаваемый в фильтр. То есть функция приведенная выше может изменить только аргумент $allow , но не $user_id .

Для того, чтобы дать функциям возможно изменять более одного передаваемого аргумента, фильтры (и события) могут воспользоваться передачей переменных и объектов по ссылке в PHP, как это делает например событие pre_get_posts .

ООП, классы, объекты и анонимные функции

Разработчики тем и плагинов WordPress часто предпочитают объектно-ориентированный стиль программирования, где большая часть кода выполняется внутри объекта, а не в глобальном пространстве. Если функциям add_action() и add_filter() необходимо передать не функцию для вызова, а метод объекта, его необходимо передать в специальном формате массивом:

Похожим образом можно передать статический метод класса:

Фильтры и события поддерживают и анонимные функции, например:

Пользоваться анонимными функциями с фильтрами и событиями в WordPress мы не рекомендуем, поскольку их сложно отлаживать (например с помощью плагина Debug Bar Slow Actions) а функция create_function() не кэшируется на уровне байт-кода, например в APC.

Заключение

Фильтры и события лежат в основе самого WordPress, и работу с ними следует освоить каждому разработчику тем и плагинов, ведь именно фильтры и события позволяют расширять ядро популярной системы.

Разработчикам тем и плагинов для WordPress так же не следует забывать о фильтрах и событиях внутри их собственных продуктов для того, чтобы делать их более модульными, гибкими и легко изменяемыми с помощью стороннего кода.

Если у вас возникнут вопросы о фильтрах и событиях в WordPress, оставьте комментарий и мы обязательно вам ответим.

Константин Ковшенин 17.02.2014 02.09.2014

Подписаться на рассылку

Dynamically activate the selected plugins for each page. Response will be faster by filtering plugins.

Blog Filter — Post Filters Post Portfolio Gallery

Blog filter Plugin For WordPress with a power full filtering on post or blog. Blog…

Beautiful taxonomy filters

Supercharge your custom post type archives by letting visitors filter posts by their terms/categories. This…

Фильтр метаданных и таксономий WordPress (MDTF)

Основная идея плагина — сделать так, чтобы содержимое вашего сайта WordPress было фильтруемым и доступным…

WP Ultimate Post Grid

Easily create filterable responsive grids for your posts, pages or custom post types

WooCommerce Filter Orders by Product

This plugin lets you filter the WooCommerce orders by any specific product

Simply Show Hooks

Simply Show Hooks helps theme and plugin developers to quickly see where all the action…

Random Post Plugin — Redirect URL to Post

Automatically redirect to your latest, oldest, random, or other post through a custom URL

Remove Redundant Links

Replaces links to the currently seen page.

Post Category Filter

Filter post categories and taxonomies live in the WordPress admin area

Anti-Captcha (anti-spam botblocker)

Anti-Captcha is a transparent spam solution that does not require any end-user interaction.

Users by Date Registered

Allows you to see the dates users registered on and filter the users by date.

Filter Page by Template

See list of pages or any type of posts by filtering based on used template,…

wpautop control

Adds a global setting to turn the wpautop filter on and off. It also allows…

Rowan Rodrik van der Molen, Jesse Jacobsen . 2 000+ активных установок Протестирован с 4.2.31 Обновлен 7 лет назад

Назначьте данные постам

Работа с виджетами MDTF

Работа с шорткодами MDTF

  1. Плагин имеет 2 шорткода - [mdf_search_form] и [mdf_search_button]. Все они здесь создают в одном месте:
  2. Принцип их работы такой же, как и в виджетах MDTF: выберите категорию-фильтр, для появившихся html-элементов используйте перетаскивание или даже скрытие по разделам или по элементам:
  3. Остальные варианты такие же, как и в виджетах MDTF.
  4. В шорткодах есть одна особенность - скины, вы можете выбрать, как ваш шорткод будет отображаться на фронте сайта.
  5. Но вопрос - где взять эти скины? По умолчанию в плагине есть несколько скинов, если вы хотите больше - вы можете создать его самостоятельно, если знаете CSS, или заказать его на любом сайте для фрилансеров. Я могу описать здесь технологию, как ее создать.
  6. Сначала ты должен пойти сюда
  7. В папке скинов вы найдете несколько скинов. Скопируйте и вставьте в тот же каталог по умолчанию скин и переименуйте его, например, в темно , без пробелов!
  8. Введите в свой темный скин файл styles.css: Измените все классы css skin_default в skin_dark. Сохраните файл, перейдите к любому шорткоду поиска и выберите свой новый скин, вставьте этот шорткод куда-нибудь, например в редактор содержимого публикации. сохраните и посмотрите его вид на сайте.
  9. Теперь поиграйте с кодом CSS, как хотите
  10. Шорткоды - очень удобная функция, их можно вставлять в любом месте сайта и для них не нужны боковые панели. Вот пример шорткода, вставленного в файл header.php:
  11. Кнопка шорткода - это волшебный шорткод для поиска! Вот пример его использования:
  12. Нажми на кнопку: - откроется оранжевое всплывающее окно с формой поиска MDTF. Для таких шорткодов используйте скин 'всплывающее окно'
  13. Шорткод кнопки полезен вашим клиентам, когда они ищут что-то на вашем сайте, например, на отдельных страницах.
  14. Одно замечание о шорткодах: если вы вставили новый html-элемент в секцию фильтра, он не появится сразу в шорткоде. Чтобы отобразить его там, вы должны перейти в этот бэкэнд шорткода и повторно выбрать там категорию фильтра, а затем нажать 'Обновитькнопка.
  15. Это все о шорткодах.

Работа с маркетинговыми ссылками

Послесловие

Теперь вы достаточно знаете о функциональности плагинов. Я могу порекомендовать вас, если у вас есть вопросы, загляните сюда FAQ или в плагине CODEX чтобы получить информацию о шорткодах, функциях, хуках и подсказках MDTF! + Вы всегда можете прочитать плагин статьи документации. Смотреть РЕКОМЕНДУЕМЫЕ ПЛАГИНЫ, они могут помочь вам в некоторых задачах, например, в создании пользовательских таксономий или в отображении виджетов MDTF только на тех страницах, где вы хотите использовать особые условия. И, конечно же, если у вас очень большой фильтр, всегда используйте любой плагин кеширования для WordPress.

Также смотрите видео-уроки про создание каких-либо фильтров и функций MDTF.

Читайте также: