Фильтр страниц wordpress. Beautiful Taxonomy Filters: фильтры таксономий для произвольных типов записей в WordPress. Фильтр записей по произвольным полям

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

Есть замечательная функция в wordpress, которая изменяет стандартный запрос при прохождении циклом по базе. Это функция query_posts() , она принимает очень много параметров, влияющих на запрос, и как следствие вывод записей на страницу. Мне нужно указать категорию которую не нужно выводить. Для этих целей есть несколько вариантов:

  • параметр category__not_in - записи, не входящие в указанную категорию;
  • параметр cat - id категории.

Выберу ту что короче.

Запишем функцию для нашего случая:

query_posts(array(‘cat’ => -1));

Указывать значения рубрик, которые не будут входить в вывод нужно через запятую. Располагаете этот код выше цикла wordpress на главной странице «index.php» и записи из указанных категорий выводится не будут.

-1, -5));?>

Этот код отфильтрует категории 1 и 5, которые не будут выводится на главной странице.
Запускаем, проверяем.

Все работает - записи указанных категорий в выводе не обнаружены. Но есть одно НО!

Внизу страницы под записями находится постраничная навигация. В админ-панели можно ограничить количество выводимых записей на странице, и чтоб увидеть остальные записи придется воспользоваться этой навигацией. Только не вышло у меня этого сделать, кликаю по ссылкам навигации, а статьи все те-же. Начался квест, в финале которого приз - решение проблемы с постраничной навигацией. Я сразу не догадался от чего такое поведение. Часа два поисков и оказывается этот самый вызов функции query_posts() , причина такого поведения постраничной навигации. Но мне очень нужно убрать из вывода категории со справочной информацией и … Квест продолжается.

Долго ли, коротко ли…. Думал уже отложить поиск решения. Как зацепился за параметр ‘paged’ . Он отвечает за постраничную навигацию и для нормализации работы навигации нужно задать этому параметру значение get_query_var(‘paged’), что указывает на текущий номер страницы в постраничной навигации.

В итоге получаем функцию, которая переопределяет 2 параметра:

-1, "paged" => get_query_var("paged")));?>

Закрываем для вывода первую категорию и задаем параметр ‘paged’ .
Теперь код работает, как хотелось.

(Всего посетителей: 1 134, сегодня: 1)

Всем привет, сегодня хочу продолжить тему поиска по WordPress. На этот раз я расскажу вам как сделать поиск по полям wordpress (имеется ввиду произвольным полям, пользовательским, дополнительным полям они же custom fields).

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

Зачем нужен wordpress поиск по дополнительным полям

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

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

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

Поиск по произвольным полям wordpress позволяет:

  • выводить более релевантные результаты;
  • манипулировать с поиском WP;
  • показывать результаты, в которых не встречается поисковая фраза (например указывать слова с ошибкой и тому подобное).

Как организовать поиск по полям wordpress

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

Поиск по полям на Relevanssi

Отличный плагин, который позволяет по мимо прочего делать поиск по полям вордпрес. Весь процесс настройки очень простой и интуитивно понятный.

Имеется русский язык интерфейса и многое другое.

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

Чтобы сделать поиск по произвольным полям wordpress вам нужно:


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

Поиск по произвольным полям на Search Everything

Второй плагин для поиска по дополнительным полям, который я хочу порекомендовать, - Search Everything. Он имеет меньше настроек чем предыдущий, но это не мешает ему хорошо делать поиск по полям wordpress.

Чтобы подключить поиск по произвольным полям вам нужно:


Beautiful Taxonomy Filters – новый плагин, который добавляет фильтры к вашим архивам произвольных типов записей на основе таксономии (термы, рубрики, метки). Он позволяет посетителям фильтровать произвольные типы записей по нескольким термам во фронтэнде.

Плагин автоматически добавляет правила перезаписи для создания симпатичных отфильтрованных URL без использования JS. Beautiful Taxonomy Filters был создан шведским разработчиком плагинов Jonathan de Jong. При создании плагина он использовал WordPress Plugin Boilerplate для организации кодовой базы посредством стандартизированного объектно-ориентированного подхода.

Плагин использует select2 для замены уродливых полей выбора элементов на привлекательные, дружественные к пользователям выпадающие списки. Если JS не поддерживается, то эти списки будут деградировать до стандартных полей выбора. Ниже приведен пример, основанный на моих тестах; я применил плагин к произвольному типу данных портфолио:

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

Beautiful Taxonomy Filters имеет страницу настроек в панели администратора для активации типов записей, простого исключения таксономий, включения ссылки «очистить все», отключения заголовков для активных фильтров, изменения дизайна, а также добавления произвольных CSS-стилей.

Возможности плагина следующие:

  • Активация фильтрации для любого зарегистрированного публичного типа записей
  • Исключение таксономий, для которых не требуется фильтрация
  • Создание красивых URL. Вы не будете видеть уродливые /posttype/?taxonomy1=term. Вместо этого вы увидите /posttype/taxonomy/term.
  • Включает полностью функциональный фильтр для размещения в вашей теме
  • Возможность вывода вашим посетителям информации о текущей активной фильтрации
  • Позволяет включать произвольные GET-параметры, что дает возможность расширения фильтрации.
  • Многочисленные фильтры и действия для изменения поведения плагина.

В данный момент Beautiful Taxonomy Filters не поддерживает выбор многочисленных термов из одной и той же таксономии. Эта возможность заложена в дорожную карту разработки. Автор плагина отмечает, что он надеется реализовать эту опцию в будущей версии вместе с красивыми постоянными ссылками. Если постоянные ссылки не получится прикрутить, то в таком случае автор планирует добавить возможность выбора красивых ссылок, чтобы раскрыть для себя всю мощь фильтрации многочисленных термов.

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

Плагин предлагает простой способ добавления многочисленных фильтров таксономий к архивам произвольных типов записей. Он очень удобен, и его легко можно расширить при помощи разных фильтров и действий. Я протестировал его и нашел, что плагин работает именно так, как задумано. Плагин Beautiful Taxonomy Filters можно скачать с сайта WordPress.org.

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

В основе этого способа лежат хуки — фильтры и действия WordPress . Без них мы не сможем воспользоваться расширяемостью WordPress в полной мере. В этой серии статей мы остановимся на фильтрах для WP — одном из лучших методов настройки для этой CMS . Серия состоит из семи частей. В них все наше внимание мы сосредоточим на следующем:

  • определим понятия WordPress -фильтра;
  • рассмотрим методы их внедрения в систему;
  • приведем примеры использования (в статье, которую вы читаете сейчас );
  • изучим 50 WordPress – фильтров (по десять в каждой статье ) с примерами;
  • и напишем итоговую статью, в которой резюмируем проведенную работу.

Есть буквально сотни WordPress -фильтров в ядре и эти 50 примеров только малая часть из них (около 10% ), так что вы сами можете добавить что-то из того списка и предложить примеры использования новых фильтров.

В любом случае, время для введения в WordPress -фильтры настало. Давайте начнем!

Что такое WordPress — фильтр

В Кодексе WordPress фильтрам дано следующее определение:

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

Итак, фильтр это функция на php , которая записывается в стек вызовов встроенной системы фильтров WordPress . Но в себе она может содержать сторонние функции и другие конструкции. Фильтр является одним из двух видов хуков (hooks ) в WordPress . Второй — действие (action ), но это предмет для другой серии статей.

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

Используем фильтры в WordPress

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

В этой статье мы собираемся проделать четыре вещи:

  • Создадим функцию фильтра;
  • Сделать из нее хук;
  • Убрать функцию из фильтра;
  • Создать свой собственный фильтр.

Создаем функцию и прикрепляем ее к фильтру

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

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

Сложно? На самом деле, нет. В приведенном ниже примере, мы напишем код функции, которая удаляет гласные во всем тексте:

Функция берет строку заголовка $title , удаляет гласные и возвращает строку. Довольно просто, верно? Теперь прыгнем на уровень выше, сделаем хук, и прицепим его к фильтру:

Заметили новую функцию? Взглянем на add_filter():

  • $tag (обязательный параметр ) – имя фильтра;
  • $function_to_add (обязательный параметр ) – имя функции для хука;
  • $priority (опция ) – Целое число для определения момента исполнения функции. По умолчанию равно 10: Функция сработает раньше, если вы снизите значение, и позже, если вы повысите его;
  • $accepted_args (опция ) — Значение, нужное чтобы определить количество аргументов, которые пропускает фильтр. Значение по умолчанию равно1.

Удаляем фильтр

Конечно же, мы также можем убрать функцию, прикрепленную к фильтру. Для этого используем функцию remove_filter() . И смотрим, как она работает:

Параметры такие же, как и в случае с add_filter() :

  • $tag (обязательный параметр ) – имя фильтра;
  • $function_to_remove (обязательный параметр ) – имя функции для удаления;
  • $priority (опция ) — приоритет функции (определено при первом подключении функции ).

Еще одна функция, remove_all_filters() , у которой всего лишь два параметра ($tag и $priority ), в которых указываются имя функции и приоритет. Имя функции говорит само за себя. Она отключает все функции, прицепленные к фильтру.

Создаем свой собственный фильтр

Хотите знать, как создаются фильтры? Для этого существует специальная функция apply_filters() , находящаяся в ядре. Конечно же, ее можно использовать и вне ядра, и это означает то, что мы можем создавать фильтры внутри наших плагинов.
Посмотрим, как это работает на практике:

  • $tag (обязательный параметр ) – имя привязываемой функции;
  • $value (обязательный параметр ) — значение, которое будет меняться функцией, подключенной к фильтру через add_filter();
  • $var1, $var2 и так далее (опционально ) – параметры фильтра (столько, сколько потребуется). Функция фильтра может использовать эти параметры, но они не смогут быть возвращены функциями.

Подумаем над таким примером: Представьте, что вы пишите функцию, которая возвращает только известную цитату Питера Гриффина:

Если вы хотите дать возможность пользователю отфильтровать эту цитату (не трогая код вашего плагина ), вам нужно использовать функцию apply_filters() следующим образом:

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

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

Заключение

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

  • login_errors;
  • comment_post_redirect;
  • allowed_redirect_hosts;
  • body_class;
  • locale;
  • sanitize_user;
  • the_content;
  • the_password_form;
  • the_terms;
  • wp_mail_from.

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

Мало кто знает, но в WordPress имеется очень хорошая возможность назначить произвольные поля (более известные как мета-данные) к любой записи. По сути, это самый мощный компонент постов и типов контента в WordPress, который редко применяется начинающими пользователями. Благодаря этой инструкции, вы сможете лучше понять, как можно использовать произвольные поля в WordPress.

Что такое произвольные поля для записей в WordPress

Произвольные поля — это мета-данные, которые задаются как пары ключ / значение, где «ключ» — имя, идентифицирующее конкретное поле.

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

Использование произвольных полей в WordPress

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

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

Поскольку это очень простой пример, мы будем использовать самый простой способ отображения этой информации. Допустим, что вы хотите показать свое настроение перед тем, как человек прочитает ваш пост. Для этого, перейдите в редактор внешнего вида и откройте файл «single.php». Найдите там цикл «loop», начинающийся с

while (have_posts()) : the_post();

и добавьте перед ним следующий код:

Теперь, на странице со статьей будет отображаться что-то вроде этого:

Сегодняшнее настроение: Счастлив

Этот способ отображения удобен, когда у вас есть только одно поле, но если у вас их 5, и вы хотите показать их в 5 разных местах? Тогда проще использовать хук «get_post_meta». Допустим, вы хотите отобразить только одно поле мета-данных в отдельном месте темы. Вам нужно добавить следующий код перед циклом «loop»:

ID, "Сегодняшнее настроение" , true); ?>

А что делать, если у вас есть дополнительные мета-данные, например, для песен, которые вы слушали во время написания поста? В таком случае, вы можете создать несколько ключей «Песни», имеющих различные значения. А затем, вставить перед циклом подобный код:

ID, "Песни", false); ?>
Этот пост вдохновлен музыкой:


    echo "
  • ".$track."
  • ";
    } ?>

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

Расширенные возможности произвольных полей в WordPress

Использование мета-данных может выходить далеко за рамки показа настроения и песни. Например, некоторые популярные плагины, такие как Yoast’s WordPress SEO и WP-Post Ratings, а также многие другие, используют мета-данные для реализации своих функциональных возможностей.

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

Фильтр записей по произвольным полям

В WordPress есть очень хорошая функция «query_posts», которая, кроме всего прочего, имеет параметр для пользовательских полей. Таким образом, мы может использовать ее, чтобы создать своеобразный фильтр для отображения записей с определенным ключом / значением. Все, что вам нужно сделать, это вставить тег «query_posts» выше оператора цикла «loop».

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

query_posts("meta_key=Песни");

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

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

query_posts("meta_key=Песни&meta_value=Metallica");

Поиск записей по произвольным полям

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

К сожалению, стандартный поиск ВордПресс не учитывает дополнительные данные, а только заголовок и содержание поста. Но эту проблему можно решить, улучшив поиск, с помощью плагина Custom Fields Search by BestWebSoft. Этот плагин позволяет добавить любое пользовательское поле в стандартный поиск ВордПресс. Все, что вам нужно, это выбрать те поля, которые поиск должен пропускать через фильтр.

Использовать этот плагин достаточно просто. Как только вы установите и активируете его, в меню административной панели появится пункт «BWS Plugins», открывающий страницу настроек плагина. На этой странице будет отображен список всех мета-данных, созданных на вашем сайте. Вам остается только выбрать нужные поля, чтобы стандартный поиск их учитывал, и сохранить результат.

Скрытие области для добавления полей

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

Удалить их достаточно просто. Вам нужно только открыть файл «functions.php» своей темы и добавить туда следующие строки:

add_action("admin_init","remove_custom_meta_boxes");
function remove_custom_meta_boxes() {
remove_meta_box("postcustom","post","normal");
remove_meta_box("postcustom","page","normal");
}

Заключение

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




Top