Легко принесите все расширенные пользовательские поля (ACF) внутри Corcel.
Этот плагин Corcel позволяет получить пользовательские поля WordPress, созданные плагином ACF, используя тот же синтаксис красноречивого, из Laravel Framework. Вы можете использовать красноречивые модели и коллекции, чтобы улучшить свою разработку, используя бэкэнд WordPress с любым приложением PHP.
Для получения дополнительной информации о том, как работает Corcel, посетите репозиторий.
Корсел | Ларавел | PHP |
---|---|---|
^4.0 | 7.x. | >=7.2 |
^5.0 | 8.x. | >=7.3 |
Чтобы установить плагин ACF для Corcel легко:
composer require corcel/acf
Corcel требуется для этого плагина, но не волнуйтесь, если он пропустит, он также будет установлен.
Это версия разработки, поэтому использование может измениться дальше. Желаемое поведение этого плагина состоит в том, чтобы позволить это:
$ post = Post :: find ( 1 );
echo $ post -> acf -> url ; // returns the url custom field created using ACF
При использовании чего-то вроде $post->acf->url
плагин должен сделать несколько дополнительных запросов SQL, чтобы получить тип поля в соответствии с подходом ACF. Таким образом, мы создали другой способ получить это, не делая этих дополнительных запросов. У вас есть только плагин, что такое тип поста, как функция:
// Extra queries way
echo $ post -> acf -> author_username ; // it's a User field
// Without extra queries
echo $ post -> acf -> user ( ' author_username ' );
PS: имена методов должны быть записаны в формате
camelCase()
. Так, например, для поля типаdate_picker
вы должны написать$post->acf->datePicker('fieldName')
. Плагин делает переоборудование изcamelCase
вsnake_case
для вас.
Использование по умолчанию $post->meta->field_name
в Corcel возвращает значение столбца meta_value
в таблице wp_postmeta
. Это может быть строка, целое число или даже сериализованное массив. Проблема в том, что когда вы используете ACF, это значение может быть больше, чем это. Например, если у вас есть целое число, это может быть post id
, user id
или даже массив posts ids
.
ACF должен сделать 2 (два) SQL -запроса, чтобы узнать тип поля, поэтому в соответствии с типом он имеет различное поведение с meta_value
. Например, если значение составляет 45
, а post type
- post_object
, значение 45
- это пост с ID 45
. Таким образом, в этом случае Corcel должен вернуть экземпляр CorcelPost
вместо всего целого числа.
Сначала ACF получает meta_value
в таблице wp_postmeta
, где meta_key
- что -то вроде _field_name
, а идентификатор сообщения - это идентификатор поста, который вы хотите, пользовательское поле. Возвращенное значение - это field key
, и оно выглядит так, как это field_57f421a2b81bd
. С помощью этого ключа он получает соответствующий пост в wp_posts
, где post_name = 'field_57f421a2b81bd'
. С результатами он получает значение post_content
, сериализованный массив, десериализуйте его и получает контент на ключке type
. Это тип поля. Согласно этому ACF (а также этот плагин) делает правильные вещи.
field key
value
работает с основной логикой внутри Corcel CorcelAcfFieldFactory
CorcelAcfFieldBasicField
Abstr. В соответствии с типом поля, поэтому, если тип поля является post_object
, он возвращает экземпляр CorcelAcfFieldPostObject
, и он вернется в методе get()
экземпляр CorcelPost
.
Сначала мы должны создать классы полей и тестовые примеры. После того, как мы должны настроить, как Corcel будет работать с плагином corcel/acf
, возвращая пользовательское значение поля в формате $post->meta->field
или, возможно, $post->acf->field
имеющего другое поведение (сделано! )
Repeater
;Flexible Content
с модульными тестами (сделано!);whereIn()
.Некоторые поля все еще отсутствуют (проверьте таблицу ниже и внесите свой вклад).
Поле | Статус | Разработчик | Возврат |
---|---|---|---|
Текст | хорошо | @jgrossi | string |
Textarea | хорошо | @jgrossi | string |
Число | хорошо | @jgrossi | number |
Электронная почта | хорошо | @jgrossi | string |
URL | хорошо | @jgrossi | string |
Пароль | хорошо | @jgrossi | string |
Wysiwyg (редактор) | хорошо | @jgrossi | string |
уэмбл | хорошо | @jgrossi | string |
Изображение | хорошо | @jgrossi | CorcelAcfFieldImage |
Файл | хорошо | @jgrossi | CorcelAcfFieldFile |
Галерея | хорошо | @jgrossi | CorcelAcfFieldGallery |
Выбирать | хорошо | @jgrossi | string или array |
Флажок | хорошо | @jgrossi | string или array |
Радио | хорошо | @jgrossi | string |
Верно/Неверно | хорошо | @jgrossi | boolean |
Post object | хорошо | @jgrossi | CorcelPost |
Ссылка страницы | хорошо | @jgrossi | string |
Отношение | хорошо | @jgrossi | CorcelPost или Collection Post |
Таксономия | хорошо | @jgrossi | CorcelTerm или Collection Term |
Пользователь | хорошо | @jgrossi | CorcelUser |
Карта Google | отсутствующий | ||
Пикер даты | хорошо | @jgrossi | CarbonCarbon |
Дата времени выбора | хорошо | @jgrossi | CarbonCarbon |
Время сборщика | хорошо | @jgrossi | CarbonCarbon |
Цветовой сборщик | хорошо | @jgrossi | string |
Ретранслятор | хорошо | @jgrossi | Collection полей |
Гибкий контент | хорошо | @marcoboom | Collection |
Все взносы приветствуются. Перед тем, как отправить ваш запрос на привлечение, посмотрите на следующие рекомендации:
develop
Branch: git checkout -b my-fix-branch develop
;phpunit
, чтобы облегчить задание о утверждении;corcel/acf:develop
, всегда . Не отправляйте PR в нашу master
филиал! Мы призываем вас использовать рабочий процесс git flow
(https://github.com/petervanderdoes/gitflow-avh), чтобы упростить вашу жизнь. Это не обязательно, но это также будет хорошо для вашей карьеры по развитию;PSR-2
(http://www.php-fig.org/psr/psr-2/). Чтобы запустить тесты phpunit, выполните phpunit
(если у вас есть глобальный исполняемый файл phpunit) или попробуйте следующую команду:
./vendor/bin/phpunit
Вы должны импортировать файл database.sql
в базу данных внутри вашей локальной среды, чтобы сделать тесты. Просто разкаплите файл tests/config/database.sql.zip
и установите поля базы данных, пользователя и пароля в tests/config/bootstrap.php
.
Если вы хотите получить доступ к панели администратора WordPress, просто используйте имя пользователя в качестве
admin
и пароля123456
.
Лицензия MIT © Junior Grossi