Вопрос или проблема
Здравствуйте, сообщество WordPress,
Я работаю над проектом, в котором мне нужно создать настраиваемый тип записи, используя Advanced Custom Fields (ACF), и запрашивать его через WPGraphQL для интеграции с Headless Next.js. Конкретно, я хочу достичь следующего:
-
Единичный экземпляр настраиваемого типа записи: я хочу создать настраиваемый тип записи под названием “Главная страница”, который позволит существовать только одному экземпляру. Этот единственный экземпляр будет представлять главную страницу сайта.
-
Ограниченные варианты модулей: в пределах этого настраиваемого типа записи “Главная страница” я хотел бы ограничить редактора возможностью добавления только заранее определенного набора модулей (например, секция героя, избранные записи, галерея и т.д.). Цель состоит в том, чтобы предоставить структурированный и контролируемый опыт редактирования.
-
Интеграция с WPGraphQL: как только настраиваемый тип записи “Главная страница” будет настроен с ограниченными вариантами модулей, я намерен запрашивать эти
данные с помощью WPGraphQL, чтобы извлечь и отобразить их в Headless
Next.js фронтенде.
Я уже зарегистрировал настраиваемый тип записи с помощью ACF, но не уверен, как обеспечить ограничение на единичный экземпляр и ограничить варианты модулей для редактора. Кроме того, буду признателен за любые рекомендации о том, как эффективно запрашивать данные этого настраиваемого типа записи через WPGraphQL для бесшовной интеграции с Next.js.
Буду очень признателен за любые советы, примеры кода или ресурсы, касающиеся достижения этих целей!
Заранее спасибо за вашу помощь.
С наилучшими пожеланиями,
J
Настраиваемые типы записей просто не работают так, как вы хотите. Типы “постов” по своей сути являются повторяющимися типами. Моя рекомендация — использовать существующий тип записи “Страница” для создания главной страницы. Вот несколько основных шагов:
- Создайте страницу “Главная” в разделе “Страницы”
- В настройках “Чтение” вашего сайта выберите эту страницу в качестве “Главной страницы”
- Создайте группу полей ACF, которая будет применяться только к этой странице.
Если это не сработает для вас, попробуйте создать “Страницу параметров” с ACF (требуется Pro). Это неповторяющийся тип с единственным экземпляром.
Ответ или решение
Здравствуйте, сообщество WordPress!
Я понимаю вашу задачу по созданию пользовательского поста типа "Homepage" с использованием Advanced Custom Fields (ACF) и WPGraphQL, а также о необходимости интеграции с Headless Next.js. Позвольте мне предоставить вам полное решение для достижения ваших целей.
Создание пользовательского поста типа "Homepage" с ограниченной возможностью
-
Регистрация пользовательского поста типа:
Вы можете зарегистрировать свой пользовательский пост типа "Homepage" в файле функции вашего шаблона (обычно этоfunctions.php
). Вот пример кода:function create_custom_post_type() { register_post_type('homepage', array( 'labels' => array( 'name' => __('Homepage'), 'singular_name' => __('Homepage') ), 'public' => true, 'has_archive' => false, 'rewrite' => array('slug' => 'homepage'), 'supports' => array('title', 'editor', 'custom-fields'), 'show_in_graphql' => true, 'graphql_single_name' => 'Homepage', 'graphql_plural_name' => 'Homepages', ) ); } add_action('init', 'create_custom_post_type');
-
Ограничение на единственный экземпляр:
Чтобы убедиться, что вы можете создать только один экземпляр этого пользовательского поста, вы можете дополнительно добавить следующий код, который будет проверять наличие существующего поста и предотвращать создание нового:function limit_homepage_instance($post_id) { if (get_post_type($post_id) != 'homepage') { return; } $existing_homepage = get_posts(array( 'post_type' => 'homepage', 'numberposts' => 1, 'post_status' => 'publish', )); if (count($existing_homepage) > 0 && $existing_homepage[0]->ID != $post_id) { wp_delete_post($post_id, true); } } add_action('wp_insert_post', 'limit_homepage_instance');
-
Настройка полей ACF:
В интерфейсе ACF создайте группу полей, которая будет относиться исключительно к типу поста "Homepage". Например, вы можете добавить такие поля, как "Герой", "Избранные посты" и "Галерея". Чтобы сделать это:- Перейдите в ACF и создайте новую группу полей.
- Убедитесь, что условия отображения установлены на "Тип поста равен Homepage".
-
Интеграция с WPGraphQL:
После того как вы зарегистрировали пользовательский пост и настроили ACF, вы сможете получить доступ к этому посту через WPGraphQL. Для этого убедитесь, что вашshow_in_graphql
установлен вtrue
при регистрации пользовательского поста.Вы можете запрашивать данные из GraphQL следующим образом:
{ homepage { title content customFieldGroup { hero { image { sourceUrl } title } featuredPosts { title excerpt } } } }
Резюме
- Мы зарегистрировали пользовательский пост типа "Homepage".
- Мы ограничили создание нового экземпляра этого поста.
- Мы создали поле ACF, привязанное к этому типу поста.
- Мы настроили WPGraphQL для доступа к этим данным.
Если вам не требуется именно тип пользовательского поста, вы можете рассмотреть возможность использования стандартного типа страницы (Page) и назначить его как домашнюю страницу через настройки чтения.
Надеюсь, эта информация оказалась полезной для вас. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться!
С наилучшими пожеланиями,
[Ваше Имя]