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();

Выборка элементов по checkbox:

            $args = array(
                'posts_per_page' => carbon_get_theme_option('second_section_num'),
                'post_type' => 'diseases',
                'meta_query'=>array(
                    array(
                        'key'     => 'disease_show_on_front',
                        'value'   => 'yes',
                    ),
                ),
            );

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

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

4 Комментариев
  • Feodoraxis
    2024-03-19 13:53:22

    Вот еще решение, как устранить ошибку с get_thumbnail_by_type(): придумывайте составные названия для полей. Например, если у вас ассоциативное поле в поле complex, называется "category" - то это может вызвать ошибку. Но если назвать, например, "catalog_category" - то часто это может помочь решить проблему. Я работаю с CF с 2018, очень люблю эту библиотеку, но все время он странно ведет себя с названиями полей. Ладно-бы это были явные дубли, но ведь поле внутри complex должно быть изолировано от остальных, потому что не имеет отношения к ним.

  • 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