✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Загальний приклад шаблону сховища в WordPress

41

З мого досвіду, те, як ми спочатку взаємодіємо з шаблоном дизайну сховища, часто впливає на те, як ми думаємо про шаблон. (Перші враження залишаються незабутніми, чи не так?)

Мета цієї публікації — показати, як це можна реалізувати у WordPress, зокрема під час написання об’єктно-орієнтованих плагінів для читання даних (запис даних може бути розглянуто в іншій публікації), але перед тим, як це зробити, я спробував подумати про кілька узгодженостей між варіанти візерунка, які я бачив.

Загалом, це те, що, на мою думку, повинен робити шаблон сховища:

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

Це означає, що все, що вам потрібно отримати з програми, можна отримати з бази даних. Але те, як його витягли, можна вважати чорною скринькою. Це залежить від розробника, який реалізує шаблон.

І у випадку тих, хто читає цей пост, це, швидше за все, ми.

Шаблон сховища в WordPress

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

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

Читаючи це, слід пам’ятати про дві речі:

  1. з точки зору користувача, базове сховище даних не має значення,
  2. З точки зору розробника, шаблон дозволяє нам працювати з кількома джерелами даних, а також макетувати зразкове сховище даних, щоб ми могли проводити модульне тестування даних.

При реалізації шаблону не має значення, звідки надходять дані. Принаймні до тих пір, поки ви є розробником або клієнтським об’єктом, який звертається до нього. Сховищем даних може бути база даних, набір функцій API або комбінація обох.

Тоді припустімо, що ви працюєте з користувацьким типом публікації для подій, і ви також працюєте з метаданими публікації та параметрами, пов’язаними з чимось на зразок подій.

Ви можете зробити щось на кшталт:

  • отримати назву події,
  • знайти інформацію про місце проведення заходу,
  • отримати перший тип публікації та статус, упорядкований за її ідентифікатором

Уся ця інформація може бути розкидана в різних місцях, і спосіб її отримання може відрізнятися.

1 Отримання назви події

Якщо ми працюємо з користувальницьким типом публікації, і нам потрібно отримати назву події, ми можемо використати для цього ідентифікатор публікації та одну з функцій API WordPress.

<?php

/**
 * Retrieves the title of the Event, a custom post type.
 *
 * @param  int    $eventId the ID of the event post type
 * @return string          the title of the post.
 */
public function getName(int $eventId): string
{
  return get_the_title($eventId);
}

Це один випадок, коли сховище даних все ще абстраговано від нас і натомість використовує існуючий API WordPress.

2 Отримання місця події

У цьому випадку ми можемо припустити, що місце події було введено вручну або, можливо, отримано стороннім API. А оскільки місцезнаходження пов’язане з конкретною подією, воно може бути в таблиці метаданих публікації.

Загальний приклад шаблону сховища в WordPress

Знову ж таки, ми можемо отримати його за допомогою вже існуючих функцій API; однак у подібних ситуаціях має сенс мати допоміжну функцію, тому що ми, ймовірно, матимемо доступ і до інших метаданих.

Отже, спочатку помічник :

<?php 
/**
 * A helper function for easily retrieving post meta data for a given Event.
 *
 * @param int    $id  the ID of the event
 * @param string $key the key for the post meta data for which we're retrieveing the data
 *
 * @return string the result of retrieiving the meta data
 */
private function get(int $id, string $key): string
{
    return get_post_meta($id, $key, true);
}

А потім функція, яка використовує помічник для отримання розташування :

<?php
/**
 * @param  int    $eventID the ID of the event
 * @return string          the name of the event of an empty string
 */
public function getLocationName($eventId): string
{
    return $this->get($eventId, 'ymc-event-location-name');
}

Але в цих двох прикладах ми все ще використовуємо наявні функції API. А як щодо випадку, коли нам потрібно спілкуватися з базою даних?

3 Отримання URL-адреси однієї публікації

У цьому випадку ми будемо спілкуватися безпосередньо з базою даних WordPress. Якщо ви знайомі з об’єктом $wpdb і SQL, то це не буде великою проблемою.

Загальний приклад шаблону сховища в WordPress

Якщо ви ні, я рекомендую прочитати про функцію підготовки, а також про функцію get_results.

Враховуючи це, ми можемо написати запит, який виконуватиме наступне:

  1. захопити всі публікації, де ідентифікатор відповідає певному значенню, тип публікації та статус публікації є певним значенням, і ми впорядкуємо результати за зростанням значення ідентифікатора,
  2. потім ми використаємо результати цього запиту, щоб отримати одне значення.

І ми можемо зробити це, отримавши доступ до бази даних і написавши вкладений запит:

<?php

/**
 * @return string the URL to the event next to the current event.
 */
public function getNextEventUrl()
{
    global $wpdb;
    $results = $wpdb->get_results(
        $wpdb->prepare(
            "
            SELECT *
            FROM $wpdb->posts
            WHERE ID > (SELECT ID
                FROM $wpdb->posts
                WHERE ID = %d
                AND post_type = '%s'
                AND post_status = '%s'
                ORDER BY ID ASC) AND post_type = '%s'
            AND post_status = '%s'
            ORDER BY ID ASC
            LIMIT 1
        ",
            get_the_ID(),
            'ymc-events',
            'publish',
            'ymc-events',
            'publish') );

  $result = (isset($result[0]))? $result[0]: '';

  return $result;
}

І тоді все це можна інкапсулювати в один клас, який буде, скажімо, репозиторієм подій (або EventRepository ).

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

Репозиторій визначено

Перш за все майте на увазі:

Шаблон репозиторію маскує спосіб отримання даних, але забезпечує послідовний спосіб отримання даних, з якими вони пов’язані.

Хтось також може додати, як його можна отримати та як це можна написати, але, можливо, я обговорю це в іншій публікації.

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі