Додайте настроюване подання до екрана «Усі публікації».
TL;DR: Я збираюся працювати над серією, яка розглядає, як виконати корисне завдання з таксономіями, імовірними категоріями, а потім переробити це в об’єктно-орієнтований плагін, який слугуватиме службовим плагіном для таксономій загалом .
Коротка історія ООП повідомлень
Деякий час тому я зробив довгу серію про принципи об’єктно-орієнтованого програмування (і спробував поділитися пристойною інформацією про те, як досягти певних речей у контексті WordPress).
За ці роки я також написав купу статей про всю парадигму для тих, кому цікаво наздогнати деякі з цих статей.
І я був би помилковим, якби не поділився, що мій хороший друг також буквально написав книгу на цю тему.
І тому, коли я думав про різні теми для написання (після того, як правда, взяв довшу відпустку, ніж я планував), подумав, що, можливо, варто поговорити про практичні речі, які ми можемо робити за допомогою звичайних API і хуків, а потім переробити це в тип плагіна утиліти.
Додайте спеціальний перегляд
З метою роботи, якою я збираюся поділитися в цій демонстрації, я використовую наступне:
- Локальний від Flywheel з
https://sandbox.localдоменом - TablePlus для доступу до бази даних
- Код Visual Studio як моя IDE
- І стандарти кодування WDS PHP для всього PHP, який ви збираєтеся побачити.
Якщо ви хочете слідкувати за тим, що я маю на увазі, використовуйте все вищезазначене (я не знаю, чи поділюся всім, але якщо ви побачите знімки екрана та фрагменти коду, ви знатимете, звідки це взято) ).
З цим, ось короткий екскурс viewsу WordPress (і це не так, як Views у сенсі MVC або MVVM ).
Перегляди WordPress
На момент написання цієї статті, здається, не було чіткого, короткого твердження щодо того, що таке представлення WordPress. З точки зору доступного хука, ми маємо views_edit-post.
Отже, якщо ми візьмемо цей конкретний гачок і те, що він робить, можливо, чогось подібного буде достатньо:
Перегляд WordPress – це сторінка, де ми можемо переглядати всі публікації, які відповідають набору визначених критеріїв.
Цей критерій зазвичай включає такі публікації, як:
- Опубліковано,
- Чернетки,
- сміття,
- за розкладом,
- І так далі.
Але що, якщо у вас є інша публікація з іншими критеріями, за якими ви хочете відфільтрувати? Звичайно, ви можете фільтрувати за випадаючим меню, яке є на екрані (скажімо, за категорією), і це добре, але що, якщо ви хочете використовувати спеціальні критерії для [будь-якої причини]?
Наприклад, що, якщо ви не хочете клацати певний елемент, потім фільтрувати, а потім переглядати повідомлення? Натомість ви хочете побачити посилання на критерії, кількість публікацій, які відповідають критеріям, а потім відфільтрувати їх?
Ось тут і вступає в дію можливість редагувати перегляди.
І для цілей цієї публікації я збираюся розповісти, як представити новий якір у верхній частині сторінки, який буде вказувати кількість публікацій для вказаної категорії.
Який наш погляд?
У цьому випадку ми будемо використовувати без категорії, оскільки стандартна інсталяція вже має доступну публікацію без категорії, і ми можемо легко налаштувати певні зміни навколо цього.
Для цього ми напишемо mu-pluginтак, щоб його було розміщено в mu-pluginsкаталозі. Якщо у вашій установці його немає, додайте каталог, а потім додайте add-custom-view.phpдо каталогу:
Звідси вихідний файл плагіна може виглядати приблизно так:
Спочатку ми робимо наступне:
- Встановлення простору імен,
- Додавання фільтра,
- Потім налаштуйте функцію, яка прийматиме набір за замовчуванням
$viewsі повертатиме масив$viewsпісля того, як їх буде змінено.
Отже, що нам потрібно робити звідси?
Набір вимог
Щоб досягти бажаного, ми повинні вміти:
- Вкажіть назву категорії,
- Додайте посилання на категорію разом із кількістю публікацій із цією категорією до списку переглядів,
- Можливість визначити, чи ми знаходимося на сторінці категорії, щоб правильно стилізувати список
- Можливість фільтрації за типом публікації,
- І спосіб перевірити це.
Усе вищезазначене буде розглянуто в коді далі в статті, але п’ятий крок вимагає, щоб ви вручну створили категорію, щоб ми могли легко перевірити, чи працює решта коду.
Тож зробіть це. Категорію можна назвати як завгодно (я використав Зразок категорії). Після цього давайте напишемо код із решти плагіна.
Визначте наш погляд
По-перше, я збираюся поділитися функцією, яка визначатиме, на якій сторінці ми перебуваємо, і виконуватиме одну з двох речей:
- Якщо ми перебуваємо на сторінці, яка має той самий параметр рядка запиту для ідентифікатора нашої категорії, я вкажу назву класу; інакше ми повернемо порожній рядок.
Для цього функція повинна:
- Прийняти назву категорії,
- Ініціалізація змінної для атрибутів,
- Порівняйте змінні рядка запиту
- Визначте, чи збігаються назва та ідентифікатор категорії,
- І повернути належне значення, якщо ні.
Ось так виглядає моя функція:
Це також можна спростити за допомогою потрійного оператора, але щоб він був максимально читабельним, я поки що залишаю його як є.
Визначте назву категорії
Ця конкретна функція насправді дуже проста, і хоча ми звикли приймати інформацію від користувачів у багатьох справах, ми збираємося жорстко закодувати це значення.
Для цього ми просто збираємося зберегти це в змінній, яка передається в решту коду.
Ви бачили змінну, яку раніше передавали у наведену вище функцію, і також побачите її використання в остаточній версії вихідного коду.
Отримати результати публікацій із категорією
Для цього нам потрібно зробити дві речі:
- Отримати всі
object_idзаписи, які мають ідентифікатор цієї категорії, - Відфільтруйте вміст, який не підходить для цих публікацій.
Є кілька речей, які я хочу тут згадати: по-перше, ми будемо використовувати get_cat_IDфункцію, яку надає WordPress. Це отримує ідентифікатор категорії на основі вхідного імені.
По-друге, я використовую дві функції, одна з яких є циклом, щоб перевірити статус публікації елемента. Це не найефективніший спосіб зробити це. Замість цього ми могли б використовувати більш елегантний запит для отримання лише повідомлень; однак перша ітерація цього має на меті показати, як це зробити не лише з нуля, але й для аудиторії, яка може бути не такою зручною з іншими аспектами написання коду.
Ось як ми отримуємо всі записи в WordPress, позначені як Без категорії.
І разом з цим ми беремо результати та надсилаємо їх у цю функцію, яка повертатиме кількість елементів, які є лише публікаціями.
Таким чином, ми маємо більшість того, що нам потрібно, щоб розпочати складання нашого якоря перегляду.
Створіть прив’язку перегляду
Тепер, коли у нас є всі функції, необхідні для генерації прив’язки перегляду, нам потрібно об’єднати їх замість sprintfдля безпечного форматування рядка.
Мета полягає в тому, щоб створити якір, який:
- Схоже на решта якорів,
- Показує кількість публікацій,
- Виділяється жирним, коли ви переглядаєте зазначені дописи.
Для цього нам потрібно створити посилання та додати відповідні аргументи рядка запиту. Це означає, що ми встановимо посилання edit.phpз аргументами для:
- ID категорії,
- тип поста,
- і всі публікації, які мають цю категорію.
Далі нам потрібно включити:
- будь-які атрибути для стилізації посилання,
- назва категорії,
- і лише зміст публікації
post_type.
Для цього ми можемо використати таку функцію:
Це робить кілька речей:
- Приймає стандартний масив
$viewsіз WordPress, - Додає нашу спеціальну прив’язку, як зазначено вище,
- Заштовхує його в
$viewsмасив, - Повертає його до WordPress для візуалізації.
І це все!
Тестування
Щоб перевірити це, завантажте свій веб-переглядач, і ви побачите нове посилання без категорії поруч із рештою прив’язок, наприклад Усі, Опубліковано, Моє, Кошик, Заплановано тощо.
Після цього змініть категорію дописів і видаліть «Без категорії», а потім знову перегляньте або оновіть сторінку «Усі дописи», і ви побачите, що посилання активне та оформлене залежно від того, як ви його переглядаєте, і містить кількість дописів, які категоризовано як такий теж.
Тепер до GitHub
Я завантажив першу ітерацію цього плагіна на GitHub, щоб ви могли завантажити його та розмістити у своєму mu-pluginsкаталозі для тестування.
У наступних публікаціях я хотів би почати зі зміни цієї парадигми на об’єктно-орієнтовану, щоб це були зміни, які відбудуться в плагіні та вмісті в майбутніх публікаціях.






