Как в carbon fields сохранить запись?

Ссылка скопирована
1 ответ

чего я хочу - мне нужно, чтоб я мог на сайт добавлять новые записи ( посты), но не через стандартный способ, а через 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' ); ?>

Дополнительно:

Как в carbon fields сохранить запись?

если я правильно понял, то нужно вместо theme_options указывать post_meta: https://docs.carbonfields.net/learn/containers/usa...

ПС. карбоновые поля не использую, но знаю как делаются дополнительные поля

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Павел Админов Ответ

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', 'Картинка'),
        ]);
});

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),
]);

$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().

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно