Фильтр товаров wordpress своими руками

Добавил пользователь Алексей Ф.
Обновлено: 18.09.2024

Выведя дополнительные столбцы в админке, хотелось бы иметь возможность фильтрации по этим полям. Как это делать, покажу на примере фильтрации по мета-полю публикации.

Если вы читаете данный гайд, то уже знаете :

Если нет, восполните сначала данные пробелы, чтобы двигаться дальше.

Итак, мы создали свой кастомный тип публикации, в котором храним описания филиалов нашей розничной сети. При регистрации данного типа материала (filials), я указал, что буду использовать meta-поля (custom_fields).

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

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

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

Быстрое обновление

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

И затем во всем содержимом мы рассмотрели, как именно этот шаблон реализован в WordPress. Мы говорили о том, как мы можем это использовать, а затем, как мы можем реализовать наши собственные действия.

Мы также признали тонкое различие:

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

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

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

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

Начинаем

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

  • WordPress 4.5.2
  • Предпочитаемый вами IDE
  • Веб-сервер
  • Копия PHP
  • база данных

Для многих Apache, PHP и MySQL могут быть легко установлены. Если вы более продвинутый, вы можете использовать что-то вроде Nginx и альтернативной базы данных. Если это так, это нормально, но для целей этого урока я предполагаю, что у вас есть первый.

И если у вас нет такой настройки окружения, тогда не стоит беспокоиться: мы для вас написали урок. Этот учебник предоставит вам все необходимое для начала работы с WordPress на локальном компьютере.

Как только вы настроитесь, мы будем готовы продолжить.

Понимание фильтров WordPress

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

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

Но если вы ищете полный список доступных фильтров в WordPress, обязательно обратитесь к этой странице (и закладите) в Codex. Он имеет фильтры примерно за 20 секунд, многие из которых связаны со своей страницей документации.

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

Слово о приоритете и параметрах

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

Возьмем, к примеру, следующую строку кода:

Она говорит нам о четырех вещах:

  1. Имя фильтра, в который мы подключаемся
  2. Имя функции, которая должна быть вызвана
  3. Приоритет, когда функция должна быть вызвана
  4. Сколько параметров должна принимать функция

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

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

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

Работа с фильтрами

Чтобы начать работу с фильтрами, давайте создадим наш собственный файл в корне каталога twentysixteen. Мы будем вызывать файл tutsplus-filters.php . Затем, в functions.php twentysixteen, мы добавим следующую строку кода:

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

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

Чтобы зарегистрировать наш фильтр, нам нужны две части информации:

  1. Имя фильтра, к которому мы собираемся подключить нашу функцию
  2. Функция, которая будет отвечать за фильтрацию данных

Поскольку мы собираемся модифицировать контент для публикации, мы можем воспользоваться фильтром the_content . Суть функции заключается в следующем:

Назовем нашу пользовательскую функцию tutsplus_the_content и затем зарегистрируем ее в WordPress.

На самом фундаментальном уровне это и должно выглядеть так. Конечно, она мало что дает сейчас. Она просто возвращает содержимое, которое передается в нее.

2. Изменение содержимого

Давайте немного изменим данные. В частности, давайте сделаем это:

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

Вот как должен выглядеть код. Обратите внимание также на комментарии к коду:

Для этого мы использовали следующий код:

Внедрите этот код, сохраните его, а затем откройте любой пост в своей установке WordPress.

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

Вот как может выглядеть конечный результат:

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

Определение пользовательских фильтров

Тем не менее, легко воспользоваться уже существующими фильтрами. Как упоминалось ранее, на самом деле довольно просто вызвать add_filter , указав имя фильтра, а затем передав имя функции, которую мы хотим вызвать для фильтрации данных.

Понимание apply_filters

Здесь мы начинаем интересоваться apply_filters . Эта функция - функция, принимающая два аргумента:

  1. Тег, который идентифицирует имя хука фильтра
  2. Значение, которое ссылается на значение, на которое применяются фильтры

Если вы посмотрите пример, скажем, get_the_content в ядре WordPress, вы заметите, что он передает указанное значение через the_content_more_link через apply_filters .

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

Добавление собственных фильтров

Добавить свои фильтры очень просто. Нам нужно указать те же четыре вещи, которые мы изложили выше:

  1. Имя фильтра
  2. Функция, которую должен вызывать фильтр
  3. Приоритет функции
  4. Количество аргументов, которые оно должно принять

Начнем с простого примера.

Строчные буквы

Во-первых, мы хотим определить фильтр с приоритетом 10. Мы знаем, что он будет принимать только один аргумент - контент, поэтому мы передадим номер 1 при добавлении нашего фильтра:

Далее мы определим простой функциональный объект, который использует функцию strtolower PHP для того, чтобы передать ему все значения, и мы вернем его.

Окончательная версия кода будет выглядеть так:

Достаточно просто для понимания, не так ли? Давайте рассмотрим еще один пример, основанный на некоторой функциональности, которую мы уже написали.

Удалить все гласные

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

Вот фильтр, и он вызывается по своему усмотрению:

И затем это - то, как Вы можете вызвать его от в рамках начального хука.

Вызываем все вместе

Наконец, можно вызвать apply_filters несколько раз:

Обратите внимание, что это приводит к такому же результату, что и в предыдущих случаях, но делает это путем сложения их в одну строку кода. Есть и другие способы, как это можно было написать, но цель этого учебника - рассказать вам о том, как писать свои собственные фильтры и как использовать в своих работах apply_filters .

Заключение

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

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

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

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

Помните, что вы можете просмотреть все мои курсы и учебные материалы на моей странице в профиле, и вы можете следить за мной в моем блоге и/или Twitter в @tommcfarlin, где я рассказываю о различных практиках разработки программного обеспечения и о том, как мы можем использовать их в WordPress.

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

Статья о том, как добавлять дополнительные фильтры для списков записей (таблица записей в админ-панели), для списка комментариев (таблица комментов) или для списка пользователей (таблица пользователей). В статье теория и примеры.

Вспомните таблицу постов в админке - над таблицей есть два выпадающих списка: по дате и по рубрикам. Речь идет о таких фильтрах. Ниже показано как добавить свои фильтры (выпадающие списки) и затем обработать запрос, урезав список записей до значений фильтра.

  • Все хуки для вставки HTML фильтров
  • Записи (включая вложения)
  • Комментарии
  • Пользователи
  • Таксономии
  • Параметр $which
  • Примеры
  • Фильтр в таблице записей
  • Фильтр в таблице комментариев
  • Фильтр в таблице пользователей
  • Фильтр в таблице терминов (таксономий)

Все хуки для вставки HTML фильтров

Фильтры в таблицу списка записей можно добавить для любого типа записи, комментариев или пользователей. Все это делается через нужный хук. Логика везде одна: добавляем HTML код выпадающего списка - поле формы '; // для динамического построения селекта, можно использовать wp_dropdown_categories() > // Фильтрация: обработка запроса add_action( 'pre_get_posts', 'add_event_table_filters_handler' ); function add_event_table_filters_handler( $query )< $cs = function_exists('get_current_screen') ? get_current_screen() : null; // убедимся что мы на нужной странице админки if( ! is_admin() || empty($cs->post_type) || $cs->post_type != 'event' || $cs->id != 'edit-event' ) return; // сезон if( @ $_GET['sel_season'] != -1 )< $selected_id = @ $_GET['sel_season'] ?: 20; $query->set( 'tax_query', array([ 'taxonomy'=>'season', 'terms'=>$selected_id ]) ); > //if( empty($_GET['orderby']) && @ $_GET['sel_season'] != -1 )< // $query->set( 'orderby', 'menu_order date' ); //> >

Получим рабочий фильтр:

Добавление фильтров в таблицу списка записей wordpress

меню

Фильтр в таблице комментариев

Условия: для комментарие устанавливается статус, который записывается в метаполе комментария. Нам нужно в таблице комментариев сделать возможность фильтровать список по статусу. У нас есть 3 статуса: question (Вопрос), thanks (Спасибо), useful (Полезный).

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