✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Добавить пользовательский вид на экран всех сообщений

25

TL;DR: я собираюсь работать над серией, в которой рассматривается, как выполнить полезную задачу с таксономиями, вероятными категориями, а затем преобразовать их в объектно-ориентированный плагин, который будет служить служебным плагином для таксономий в целом. .


Краткая история ООП-постов

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

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

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

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

Добавить пользовательский вид

Для работы, которой я собираюсь поделиться в этой демонстрации, я использую следующее:

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

При этом небольшой экскурс viewsв WordPress (и это не похоже на Views в смысле MVC или MVVM ).

Просмотры WordPress

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

Итак, если мы возьмем этот конкретный хук и то, что он делает, возможно, будет достаточно чего-то вроде этого:

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

Из коробки этот критерий обычно включает такие посты, как:

  • Опубликовано,
  • Черновики,
  • Мусор,
  • Запланированное,
  • И так далее.

Но что, если у вас есть другой пост с другими критериями, по которым вы хотите отфильтровать? Конечно, вы можете фильтровать по раскрывающемуся списку, который присутствует на экране (скажем, по категории), и это нормально, но что, если вы хотите использовать настраиваемые критерии для [любой заданной причины]?

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

Здесь в игру вступает возможность редактирования представлений.

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

Какова наша точка зрения?

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

Для этого мы собираемся написать mu-pluginтак, чтобы он был помещен в mu-pluginsкаталог. Если в вашей установке его нет, добавьте каталог, а затем добавьте add-custom-view.phpв каталог:

Добавить пользовательский вид на экран всех сообщений

Оттуда исходный файл плагина может выглядеть примерно так:

Добавить пользовательский вид на экран всех сообщений

Изначально делаем следующее:

  1. Установка пространства имен,
  2. Добавление фильтра,
  3. Затем настройте функцию, которая будет принимать набор по умолчанию $viewsи возвращать массив $viewsпосле того, как они были изменены.

Итак, что нам нужно делать отсюда?

Набор требований

Чтобы достичь того, чего мы хотим, мы должны быть в состоянии:

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

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

Так что давай, сделай это. Категория может называться как угодно (я использовал Sample Category). После этого давайте напишем код из остальной части плагина.

Определите наше мнение

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

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

Для этого функция должна:

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

Вот как выглядит моя функция:

Добавить пользовательский вид на экран всех сообщений

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

Определите название категории

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

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

Добавить пользовательский вид на экран всех сообщений

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

Получить результаты сообщений с категорией

Для этого нам нужно сделать две вещи:

  1. Получить все object_idзаписи, которые имеют идентификатор этой категории,
  2. Отфильтруйте контент, который не подходит для этих сообщений.

Здесь я хочу упомянуть пару вещей: во-первых, мы будем использовать get_cat_IDфункцию, которую предоставляет WordPress. Это извлекает идентификатор категории на основе входящего имени.

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

Вот как мы получаем все записи в WordPress, которые помечены как «Без категории».

Добавить пользовательский вид на экран всех сообщений

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

Добавить пользовательский вид на экран всех сообщений

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

Создание привязки представления

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

Цель состоит в том, чтобы создать якорь, который:

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

Для этого нам нужно построить ссылку и добавить правильные аргументы строки запроса. Это означает, что мы создадим ссылку edit.phpс аргументами для:

  • идентификатор категории,
  • тип поста,
  • и все сообщения, которые имеют эту категорию.

Далее нам нужно включить:

  • любые атрибуты для оформления ссылки,
  • название категории,
  • и только содержание поста post_type.

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

Добавить пользовательский вид на экран всех сообщений

Это делает несколько вещей:

  1. Принимает стандартный массив $viewsиз WordPress,
  2. Добавляет наш пользовательский якорь, как описано выше,
  3. Подталкивает его в $viewsмассив,
  4. Возвращает его в WordPress для рендеринга.

Вот и все!

Тестирование

Чтобы проверить это, загрузите браузер, и вы должны увидеть новую ссылку «Без категории» рядом с остальными якорями, такими как «Все», «Опубликовано», «Мое», «Корзина», «Запланировано» и т. д.

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

Теперь на GitHub

Я загрузил первую версию этого плагина на GitHub, чтобы вы могли загрузить его и поместить в свой mu-pluginsкаталог для тестирования.

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

Источник записи: tommcfarlin.com

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