Как в carbon fields сохранить запись?
чего я хочу - мне нужно, чтоб я мог на сайт добавлять новые записи ( посты), но не через стандартный способ, а через carbon fields т.к я хочу внести поля, картинки и тд, которые для каждого поста надо будет заполнять и через него это будет делать удобно, но я что-то не так делаю и у меня не публикуются записи.
Вкладка появляется, там поля есть, писать в них могу, но после сохранения, новой записи нет
<?php use Carbon_FieldsContainer; use Carbon_FieldsField; add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' ); function crb_attach_theme_options() { Container::make( 'theme_options', __( 'Добавление статьи', 'crb' ) ) ->add_fields( array( Field::make( 'text', 'crb_text', 'Название статьи' ), Field::make( 'text', 'crb_additional_field1', 'Описание для SEO' ), Field::make( 'text', 'crb_additional_field2', 'Об статье' ), ) ); } add_action( 'after_setup_theme', 'crb_load' ); function crb_load() { require_once( dirname( dirname( dirname( __DIR__ ) ) ) . '/vendor/autoload.php' ); Carbon_FieldsCarbon_Fields::boot(); } add_action( 'carbon_fields_after_save', 'crb_after_save' ); function crb_after_save() { ?> <?php $post_id = wp_insert_post( array( 'post_title' => wp_strip_all_tags( carbon_get_theme_option( 'crb_text' ) ), 'post_content' => '', 'post_status' => 'publish', 'post_type' => 'post', ) ); if ( $post_id ) { update_post_meta( $post_id, 'additional_field1', wp_strip_all_tags( carbon_get_theme_option( 'crb_additional_field1' ) ) ); update_post_meta( $post_id, 'additional_field2', wp_strip_all_tags( carbon_get_theme_option( 'crb_additional_field2' ) ) ); } } function enqueue_custom_styles() { wp_enqueue_style( 'custom-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_script( 'header-script', get_template_directory_uri() . '/assets/js/header.js', array(), null, true ); } add_action( 'wp_enqueue_scripts', 'enqueue_custom_styles' ); add_filter( 'show_admin_bar', '__return_false' ); ?> |
<?php use Carbon_FieldsContainer; use Carbon_FieldsField; add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' ); function crb_attach_theme_options() { Container::make( 'theme_options', __( 'Добавление статьи', 'crb' ) ) ->add_fields( array( Field::make( 'text', 'crb_text', 'Название статьи' ), Field::make( 'text', 'crb_additional_field1', 'Описание для SEO' ), Field::make( 'text', 'crb_additional_field2', 'Об статье' ), ) ); } add_action( 'after_setup_theme', 'crb_load' ); function crb_load() { require_once( dirname( dirname( dirname( __DIR__ ) ) ) . '/vendor/autoload.php' ); Carbon_FieldsCarbon_Fields::boot(); } add_action( 'carbon_fields_after_save', 'crb_after_save' ); function crb_after_save() { ?> <?php $post_id = wp_insert_post( array( 'post_title' => wp_strip_all_tags( carbon_get_theme_option( 'crb_text' ) ), 'post_content' => '', 'post_status' => 'publish', 'post_type' => 'post', ) ); if ( $post_id ) { update_post_meta( $post_id, 'additional_field1', wp_strip_all_tags( carbon_get_theme_option( 'crb_additional_field1' ) ) ); update_post_meta( $post_id, 'additional_field2', wp_strip_all_tags( carbon_get_theme_option( 'crb_additional_field2' ) ) ); } } function enqueue_custom_styles() { wp_enqueue_style( 'custom-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_script( 'header-script', get_template_directory_uri() . '/assets/js/header.js', array(), null, true ); } add_action( 'wp_enqueue_scripts', 'enqueue_custom_styles' ); add_filter( 'show_admin_bar', '__return_false' ); ?>
Дополнительно:
если я правильно понял, то нужно вместо theme_options указывать post_meta: https://docs.carbonfields.net/learn/containers/usa...
ПС. карбоновые поля не использую, но знаю как делаются дополнительные поля
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Carbon Fields сам по себе не создаёт записи из
theme_options. Вы сделали страницу настроек, на которой можно сохранять значения в options, но это не форма создания поста. Поэтому после сохранения “новой записи” нет: Вы сохраняете настройки темы, а не вызываетеwp_insert_post().Есть два разных сценария.
Первый: Вы хотите удобные поля при редактировании обычной записи. Тогда Carbon Fields нужно привязать к post meta:
use Carbon_FieldsContainer; use Carbon_FieldsField; add_action('carbon_fields_register_fields', function () { Container::make('post_meta', 'Поля статьи') ->where('post_type', '=', 'post') ->add_fields([ Field::make('text', 'crb_seo_description', 'Описание для SEO'), Field::make('textarea', 'crb_about', 'О статье'), Field::make('image', 'crb_image', 'Картинка'), ]); });
В этом варианте запись создаётся стандартной кнопкой WordPress “Добавить запись”, а Carbon Fields добавляет к ней дополнительные поля.
Второй: Вы хотите отдельную страницу “Добавить статью” в настройках. Тогда при сохранении нужно вручную обработать данные и создать пост:
$post_id = wp_insert_post([ 'post_type' => 'post', 'post_status' => 'draft', 'post_title' => sanitize_text_field($title), 'post_content'=> wp_kses_post($content), ]);
Но так делать сложнее: нужны nonce, проверка прав, валидация, обработка ошибок и загрузка изображений. Для большинства задач правильнее использовать стандартный экран записей + Carbon Fields post_meta.
Итог:
theme_options— это настройки, а не конструктор записей. Если нужны поля у постов, используйтеContainer::make('post_meta'). Если нужна кастомная форма создания, отдельно пишите обработчик сwp_insert_post().