Carbon Fields — неочевидные вещи

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    07.03.2020
  • Категория
    Wordpress
Задача:Рассказать о возможных подводных камнях при использовании carbon fields

Большой заказ! Гос программа! Все здорово… но пользоваться коммерческими расширениями нельзя. Используем только OpenSource. И Вот что я могу сказать про Carbon Fields…

Первый 2-3 дня я был просто доволен решением. Удобно, хранится не в бд… т.е. можно накидать полей и просто добавлять их в functions.php. Более того — можно писать данные по умолчанию и т.д. — очень здорово!

Плюсы:

  • Поле «повторитель» бесплатно
  • Поле ассоциатив бесплатно

Минусы:

Документация! Плагин умеет очень много всего! Но документации единой нет! Что-то находишь в доке от версии 2.2,что-то лежит в доке от версии 1.6, а что-то и в последней. По итогу — не очень удобно.

За неделю активной работы я нашел несколько серьезных проблем:

У вас, наверняка будет ошибка js, если вы будете использовать ассоциативное поле вместе с повторителем (association и repeater). Проблема массовая, однако решение найти тяжело, во всех источниках, которых мог — я отписался, напишу и здесь — обязательно ставьте приоритеты загрузки!

Текст ошибки: Call to a member function get_thumbnail_by_type() on null

А вот если указать приоритет:

add_action('carbon_fields_register_fields', 'postsCustomFields', 1);

Проблема исчезает

Второй момент — когда необходимо сделать WP_Query по ID ассоциативного поля. Этот вопрос найти в интернете уже проще.

$reverse_results = new WP_Query( array(
    'post_type' => 'location',
    'meta_query' => array(
        array(
            'key' => 'location_related_people',
            'carbon_field_property' => 'id',
            'compare' => '==',
            'value' => get_the_ID(),
        ),
    ),
) );

Если метод выше не работает, можно сделать так:

$items = carbon_get_the_post_meta('detail_service_fifth_items');
$ids = wp_list_pluck( $items, 'id' );
$args = array(
	'post_type' => 'post',
	'post__in' => $ids,
	);
$query = new WP_Query($args);
if ( $query->have_posts() ) {
	while ( $query->have_posts() ) { $query->the_post();

		get_template_part('partials/portfolioImageItem');
	}
}
wp_reset_postdata();

В остальном же — все упирается в документацию. Буду ли я работать с плагином? — однозначно буду — мне понравилось. Можно создавать кучу настроек для админки и легко тиражировать все поля. Все лежит в functions.php.

Более того — все легально и бесплатно.

3 Комментариев
  • muzanaka
    2021-12-30 11:40:22

    Согласен, именно так и сделали в нашем решении https://devstages.ru/chistyj-shablon-dlya-wordpress/.

  • Дмитрий Сергеевич Дьячков
    2021-12-24 18:48:21

    Я для полей создал отдельный файл и подключил в function.php. Так удобнее возвращаться к редактированию полей.

  • TheJema
    2020-10-29 22:55:59

    Однозначно плюсов у этого решения больше) Уже несколько лет использую для своих проектов =)

Оформить заказ в Devstages