Bret Cameron
Совместите силу реагированного интерфейса с самым популярным CMS Интернета
Хотите преимущества современного реагирования SPA, но нуждаются в спине, который чувствует себя знакомым? В этой статье мы пройдем, как настроить API WordPress REST, включая пользовательские типы и поля постов, и как получить эти данные внутри реагирования.
Недавно я работал над приложением React для клиента, когда они возникли на мне этот вопрос: «Можем ли мы использовать его С WordPress ? ‘
С конца 2015 года ответ на этот вопрос был да. Но шаги, необходимые для создания рабочего отделенного сайта, могут казаться простыми, особенно для тех, кто не знаком с обоими WordPress и Реагировать.
В моем путешествии, чтобы создать рабочее приложение, я столкнулся с горсткой хитрых препятствий, и в этой статье я объясню, как их избежать. Я также поделись несколькими советами и трюками, которые я узнал по пути!
Содержание
Часть 1: справочная информация
- Что такое безголовый CMS?
- Что я должен знать, чтобы следовать?
- Клавичные аббревиатуры
- Где я могу видеть данные JSON WordPress?
Часть 2: WordPress
- Добавление пользовательского типа поста
- Изменение названного текста заполнителя
- Добавление пользовательского поля на ваш пользовательский тип поста
- Делать пользовательские поля доступны как JSON
- Ограничение видимых данных JSON
Часть 3: Реагировать
Рабочий пример в реакции
Заключение
Часть 1: справочная информация
Что такое безголовый CMS?
В прошлом, используя CMS, как WordPress, означал, что вы должны были построить свой интерфейс, используя PHP.
Теперь, с безголовым CMS, вы можете построить свой передний конец любыми технологиями, которые вам нравятся; Это из-за разделения интерфейса и заднего конца через API. Если вы хотите создать спа (одностраничное приложение), используя RECT, угловые или Vue, и контролировать контент, используя CMS, как WordPress, вы можете!
Что я должен знать, чтобы следовать?
Вы получите максимум из этой статьи, если у вас есть:
- Некоторые знания о том, как работает CMS, как WordPress, немного PHP и представление о том, как настроить основной проект WordPress на вашем компьютере;
- Понимание JavaScript, включая языковые функции ES6 + и синтаксис класса Ract Class.
Клавичные аббревиатуры
Программирование полоно жаргона, но он делает его намного быстрее, чтобы обсудить некоторые концепции в этой статье. Вот быстрый пересчет терминов, которые мы будем использовать:
- CMS – система управления контентом. Думаю WordPress, Drupal, Joomla, Magneto.
- SPA – одностраничное приложение. Вместо того, чтобы возобновить каждую страницу во всей своей полноте, приложение SPA загружает контент динамически. Фундаментальный код (HTML, CSS и JavaScript) сайта загружен только один раз. Думаю реагировать, Vue, угловой.
- API – интерфейс программирования приложений. Простые термины, серия определений, что сервис предоставляет позволить вам принимать и использовать его данные. Google Maps имеет один Отказ Среда имеет один Отказ А теперь Каждый сайт WordPress поставляется с API встроенным Отказ
- Отдых – репрезентативный государственный перевод. Стиль веб-архитектуры на основе методов запроса HTTP:
Получить,Поставить,ПОЧТАиУдалитьОтказ Встроенный API WordPress – это отдых или «спокойный» API. - HTTP – гипертекстовый протокол передачи. Набор правил, используемых для передачи данных через Интернет. Указано в начале URL AS
httpилиHTTPS.(безопасная версия). - JSON – Обзор объекта JavaScript. Несмотря на то, что из JavaScript это независимый от языка формат для хранения и передачи данных.
В этой статье мы используем WordPress в качестве нашей CMS. Это означает программирование нашего заднего конца в PHP и использование API WordPress для доставки данных JSON на наш интерфейс.
Где я могу видеть данные JSON WordPress?
Прежде чем добраться до хорошего, быстрое замечание о где Вы можете найти данные JSON на вашем сайте WordPress. В наше время каждый веб-сайт WordPress имеет доступные данные JSON (если владелец сайта не будет отключен или ограничен доступом к нему). Вы посмотрите на главную JSON из сайта WordPress, добавив /wp-json до доменного имени корня.
Так, например, вы можете взглянуть на JSON для WordPress.org, посетив https://wordpress.org/wp-json. . Или, если вы используете сайт WordPress локально, вы можете увидеть его JSON, следуя localhost/YourSitename/WP-JSON Отказ
Чтобы получить доступ к данным для ваших постов, введите localhost/YourSitename/WP-JSON/WP/V2/посты Отказ Для пользовательского формата почтового сообщения, своп в новом формате (например, фильмы ) вместо Сообщения Отказ Что теперь выглядит как нечитаемый блок текста, это именно то, что позволит нам использовать WordPress в качестве безголовой CMS!
Часть 2: WordPress
Чтобы настроить ваш отдых API, большинство из того, что вам нужно сделать, произойдет в вашем Функции .php файл. Я полагаю, вы знаете, как настроить проект WordPress и получить доступ к нему, используя localhost , но если вы хотите помочь с этим, я рекомендую Эта статья (Это то, что я привык получать программирование с WordPress).
Для большинства проектов вы захотите использовать пользовательский тип сообщения, поэтому давайте начнем с настройки одного.
Добавление пользовательского типа поста
Допустим, наш сайт о фильмах, и мы хотим, чтобы тип сообщения под названием «фильмы». Во-первых, мы хотим убедиться, что наши «фильмы» нагружаются как можно скорее, поэтому мы приложим его к в этом Крюк, используя add_action .:
add_action( 'init', 'movies_post_type' );
Я использую fire_post_type () , но вы можете назвать вашу функцию то, что вы хотите.
Далее мы хотим зарегистрировать «фильмы» в качестве типа сообщения, используя register_post_type () функция.
Следующий кусок кода может выглядеть подавляющим, но относительно простой: наша функция требует много встроенных аргументов для контроля функциональности вашего нового типа поста, и большинство из них являются самоуверенностью. Мы будем хранить эти аргументы в нашем $ args множество.
Один из наших аргументов, этикетки , может занять все свои разные аргументы, поэтому мы разбили это в отдельный массив, $ этикетки давая нам:
Два из самых важных аргументов «Поддерживает» и «Тамонисты» Поскольку эти контроль, какой из местных полей полей будет доступен в нашем новом типе записи.
В приведенном выше коде мы выбрали всего три «Поддерживает» :
«Название»– название каждого поста.«редактор»– основной текстовый редактор, который мы будем использовать для нашего описания.«Миниатюра»– Почтовое изображение.
Чтобы увидеть полный список того, что доступно, нажмите здесь для поддержки и здесь для таксономии Отказ
Генерация WordPress также имеет Удобный инструмент, который поможет вам кодировать пользовательские типы постов , что может сделать процесс намного быстрее.
Изменение названного текста заполнителя
Если на титуле текст заполнителя «введите название здесь» может быть немного вводит в заблуждение для вашего пользовательского типа поста, вы можете редактировать это в отдельной функции:
Добавление пользовательского поля на ваш пользовательский тип поста
Что делать, если вы хотите поле, которое не приходит заранее определено WordPress? Например, скажем, мы хотим специальное поле под названием «Жанр». В этом случае вам нужно будет использовать add_meta_boxes () Отказ
Ибо нам нужно приложить новую функцию для WordPress’s add_meta_boxes. крюк:
add_action( 'add_meta_boxes', 'genre_meta_box' );
Внутри нашей новой функции нам нужно позвонить в WordPress’s add_meta_box () Функция, как так:
function genre_meta_box() { add_meta_box( 'global-notice', __( 'Genre', 'sitepoint' ), 'genre_meta_box_callback', 'movies', 'side', 'low' );}Вы можете узнать больше об аргументах этой функции здесь Отказ Для наших целей наиболее важной частью является функция обратного вызова, которую мы назвали genre_meta_box_callback. . Это определяет фактическое содержимое на мета-коробке. Нам нужен просто простой текстовый ввод, поэтому мы можем использовать:
function genre_meta_box_callback() { global $post; $custom = get_post_custom($post->ID); $genre = $custom["genre"][0]; ?> Наконец, наша нестандартная область не сохранит свою ценность, если мы не скажем это. Для этого мы можем определить новую функцию Save_genre () и приложите его к WordPress’s Save_post крюк:
function save_genre(){ global $post; update_post_meta($post->ID, "printer_category", $_POST["printer_category"]);};add_action( 'save_post', 'save_genre' );
Вместе код, используемый для создания пользовательского поля, должен выглядеть что-то подобное:
Делать пользовательские поля доступны как JSON
Наши пользовательские посты автоматически доступны как JSON. Для наших «кино» типа сообщения наши данные JSON можно найти в Localhost/YourSitename/WP-JSON/WP/V2/фильмы Отказ
Однако наши пользовательские поля не являются автоматическими частью этого, и поэтому нам нужно добавить функцию, чтобы убедиться, что они также доступны через API для отдыха.
Во-первых, нам нужно приложить новую функцию для REST_API_INIT крюк:
add_action( 'rest_api_init', 'register_genre_as_rest_field' );
Затем мы можем использовать встроенные register_rest_field () Функция, как так:
function register_genre_as_rest_field() { register_rest_field( 'movies', 'genre', array( 'get_callback' => 'get_genre_meta_field', 'update_callback' => null, 'schema' => null, ) );};Эта функция принимает массив с Получить и Обновление Перезвоните. Для более простого использования подобного использования нам следует только указать 'get_callback' :
function get_genre_meta_field( $object, $field_name, $value ) { return get_post_meta($object['id'])[$field_name][0];};В целом, вот код, необходимый для регистрации пользовательского поля.
Изготовление изображений URL доступны как JSON
API WordPress WordPress WordPress не включает URL для ваших изображений. Чтобы облегчить доступ к этому, вы можете использовать следующий код:
Фильтр WordPress REST_PREPARE_POSTS Динамичен, поэтому мы можем поменять в наш пользовательский тип поста вместо «постов», таких как REST_PREPARE_MOVIES Отказ
Ограничение видимых данных JSON
Мы почти готовы начать тянуть данные в наше приложение React, но есть еще одна быстрая оптимизация, которую мы можем сделать, ограничивая данные данные.
Некоторые данные поставляются как стандарт, который вам никогда не понадобится в вашем интерфейсе и – если это так – мы можем удалить его, используя фильтр, как этот. Вы можете найти имена типов данных, глядя на ваш /wp-json/wp/v2/фильмы Часть вашего сайта.
С помощью этого, как только вы добавили несколько фильмов, используя бэкэнд WordPress, и у нас есть все, что нам нужно, чтобы начать приносить данные в React!
Часть 3: Реагировать
Чтобы получить внешние данные в JavaScript, вам нужно использовать обещания. Это, вероятно, будет иметь последствия для того, как вы хотите структурировать свои элементы реагирования, и в моем случае (преобразование существующего проекта React Project), я должен был повторно написать справедливое количество кода.
Обещания в JavaScript
Обещания в JavaScript используются для обработки асинхронных действий – вещей, которые происходят за пределами обычного пошагового или «синхронного» порядка исполнения (после подъема).
Хорошая новость заключается в том, что асинхронный JavaScript намного проще, чем раньше. До ES6 мы зависели от функций обратного вызова. Если бы необходимы несколько обратных вызовов (и они часто были), вложение приведет к коду, которое было очень трудно прочитать, масштабировать и отлаживать – явление, иногда известное как обратный ад, или пирамида гибели!
Обещания были введены в ES6 (или ES2015), чтобы решить эту проблему, а ES8 (или ES2018) увидели введение Async ... Ждите два ключевых слова, которые дополнительно упрощают асинхронные функциональные возможности. Но для наших целей наиболее критическим методом на основе обещания является fetch () Отказ
Метод извлечения
Этот метод был доступен, поскольку Chrome 40, и это легче использовать альтернативу Xmlhttprequest () Отказ
fetch () Возвращает обещание, и поэтому «тогда», означает, что вы можете использовать тогда () метод обработки результата.
Вы можете добавить извлечение в метод внутри вашего компонента RACT CLASS, например:
fetchPostData() { fetch(`http://localhost/yoursitename/wp-json/wp/v2/movies?per_page=100`) .then(response => response.json()) .then(myJSON => { // Logic goes here});}В вышеупомянутой, две вещи важны:
- Во-первых, мы называем URL с фильтром
? per_page = 100.Прилагается на конец. По умолчанию WordPress показывает только 10 элементов на странице, и я часто нахожусь, желая увеличить этот предел. - Во-вторых, перед обработкой наших данных мы используем
.json ()метод. Этот метод используется в основном по отношению кfetch ()и возвращает данные как обещание и анализируют текст тела как JSON.
В большинстве случаев мы захочем запустить эту функцию, как только наш комментарий React Compont установлен, и мы можем указать это, используя ComponentDidMount () Метод:
componentDidMount() { this.fetchPostData();}Обработка обещаний
После того, как вы вернули обещание, вы должны быть осторожны с этим в правильном контексте.
Когда я впервые попытался использовать обещания, я провел некоторое время, пытаясь пройти эти данные для переменных за пределами объема обещания. Вот несколько правил большого пальца:
- В реакции лучший способ использовать обещания – это состояние. Вы можете использовать
this.setState ()пройти данные обещания в состояние вашего компонента. - Лучше всего обрабатывать, сортировать и повторно достроить ваши данные в серии
тогда ()Методы после начальногоfetch ()Отказ После завершения какая-либо обработка лучшая практика добавить данные в состояние в пределах вашего окончательноготогда ()метод. - Если вы хотите назвать любые дополнительные функции для обработки вашего обещания (в том числе внутри
Render ()) Хорошая практика, чтобы предотвратить работу функции, пока обещание не решено. - Так, например, если вы передаете свое обещание
this.state.data, вы можете включить условное в организме любых функций, которые зависят от него, как ниже. Это может предотвратить раздражающее нежелательное поведение!
myPromiseMethod() { if (this.state.data) { // process promise here } else { // what to do before the fetch is successful }}Рабочий пример в реакции
Допустим, мы хотим тянуть в имя , описание , featured_image и Жанр пользовательского типа сообщения WordPress, который мы определили в части 1.
В следующем примере мы принесем эти четыре элемента для каждого фильма и визуализировать их.
Таким образом, с учетом React Reactorials, следующий блок кода может выглядеть запутанным, но я надеюсь, что это будет намного проще, когда мы сломаем его.
Конструктор (реквизит)
В этом методе мы называем Супер (реквизит) Определите наше начальное состояние (пустой данные объект) и связывают три новых метода:
fetchpostdata ()Rendermovies ()populatepageafterfetch ()
componentdidmount ()
Мы хотим получить наши данные, как только компонент установлен, поэтому мы позвоним fetchpostdata () здесь.
fetchpostdata ()
Мы принесем Json от нашего URL, проезжая .json () В первом .тогда () метод.
Во втором .then () Метод, мы извлекаем четыре значения, которые мы хотим для каждой записи фильма, которую мы выбыли, а затем добавьте их на наш Ньюстата объект.
Затем мы используем this.setState (NewState) Чтобы добавить эту информацию в this.state.data.data. .
Rendermovies ()
Условный Если (the.state.data) означает, что функция будет работать только после получения данных.
Здесь мы принимаем массив всех наших привлеченных фильмов из this.state.data и передать его на функцию PopulatePageafterfetch () Отказ
populatepageafterfetch ()
В этой функции мы готовим данные для каждого фильма. Это должно выглядеть простым для всех, кто использовал JSX, с одним потенциальным камнеющим блоком.
Значение movie.description не является простой текстом, а HTML Markup. Чтобы отобразить это, мы можем использовать dangerylysetinnerhtml = {{__ html: movie.description}} Отказ
Примечание: Причина, по которой это потенциально «опасно», заключается в том, что если ваши данные были угнаны, чтобы содержать вредоносные XSS-скрипты, они тоже будут проанализированы. Как мы используем наш собственный сервер/CMS в этой статье, нам не нужно беспокоиться. Но если вы хотите продемонстрировать свой HTML, посмотрите на Dompurify Отказ
оказывать()
Наконец, мы контролируем, где наши представленные данные появятся, вызывая Rendermovies () Метод в нашем выбранном < D IV> Метки. Теперь мы успешно выявили данные с вашего сайта WordPress и отображать его!
Заключение
В целом, я надеюсь, что эта статья делает процесс подключения фронта реагирования к спине WordPress, максимально безболезненно.
Как так много в программировании, что может выглядеть пугающим, чтобы начать с быстрое становится второй природой с практикой!
Я был бы очень заинтересован, чтобы услышать о своем собственном опыте, используя WordPress как безголовую CMS, и я рад ответить на любые вопросы в комментариях.
Оригинал: “https://www.freecodecamp.org/news/wordpress-react-how-to-create-a-modern-web-app-using-wordpress-ef6cc6be0cd0/”