Skip to content

Instantly share code, notes, and snippets.

@amorkovin
Last active August 7, 2020 12:41
Show Gist options
  • Save amorkovin/32a8f6a7ed608a4104a08d7f27ef83df to your computer and use it in GitHub Desktop.
Save amorkovin/32a8f6a7ed608a4104a08d7f27ef83df to your computer and use it in GitHub Desktop.
Carbon carbonfields
<?php
//Подключение
# carbon-fields plugin
add_action('after_setup_theme', 'crb_load');
function crb_load() {
require_once( 'inc/carbon-fields/vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
}
# carbon-fields my fields
add_action('carbon_fields_register_fields', 'crb_register_custom_fields');
function crb_register_custom_fields() {
require_once __DIR__ . '/inc/custom-fields/fields.php';
}
//Получить опции темы
$home_title = carbon_get_theme_option('rz_page_home_title');
//Получить поле для записи
carbon_get_post_meta(843, 'crb_weight');
//Получить значение для текущей записи
carbon_get_the_post_meta( $name )
//Обновить значение (https://carbonfields.net/docs/advanced-topics-updating-values/)
carbon_set_post_meta( 10, 'crb_text', 'Hello World!' );
// Если надо вывести контент из визуального редактора
$home_text = apply_filters( 'the_content', carbon_get_theme_option('rz_page_home_text') );
//------Поля на странице пользователя https://carbonfields.net/docs/containers-user-meta/?crb_version=2-2-0 -------
# Users fields
Container::make('user_meta', 'Дополнительная информация')
->add_fields( [
Field::make('image', 'rz_author_img', 'Картинка')
->set_value_type( 'url' ),
Field::make('text', 'rz_author_prof', 'Профессия'),
Field::make('radio', 'rz_author_show', 'Вывод автора на главной странице')
->add_options( [
'yes' => 'Да',
'no' => 'Нет',
] )
] );
//Получение значения поля
$phone_numbers = carbon_get_user_meta( get_the_author_meta( 'ID' ), 'crb_phone_numbers' );
//------/Поля на странице пользователя-------
//--------- Выбор рубрики и записи --------------
# Site categories list
$rz_categories = get_categories();
$rz_cats = [];
$rz_cats['0'] = 'Не выбрано';
if($rz_categories) {
foreach ($rz_categories as $rz_categories_item) {
$rz_cats[$rz_categories_item->term_id] = $rz_categories_item->name;
}
}
# Site pages list
$rz_pages = get_pages();
$rz_pages_select = array();
$rz_pages_select['0'] = 'Не выбрано';
if( count($rz_pages) ) {
foreach ($rz_pages as $rz_page_item) {
$rz_pages_select[$rz_page_item->ID] = $rz_page_item->post_title;
}
}
$basic_options_container = Container::make('theme_options', 'theme_settings', 'Настройки темы')
->set_icon('dashicons-carrot')
->add_fields( [
Field::make('textarea', 'rz_footer_text', 'Текст в подвале'),
Field::make('select', 'rz_cat_preparations', 'Рубрика препаратов')
->add_options($rz_cats),
Field::make('select', 'rz_home_page', 'Страница для главной')
->add_options($rz_pages_select),
] );
global $rz_cat_preparations;
$rz_cat_preparations = (int)carbon_get_theme_option('rz_cat_preparations');
// ---------- /Выбор рубрики -------------
//----- Опции на странцие рубрики (https://carbonfields.net/docs/containers-term-meta/?crb_version=2-2-0) -----
Container::make( 'term_meta', 'Category Properties' )
->where( 'term_taxonomy', '=', 'category' )
->add_fields( array(
Field::make( 'text', 'rz_popular_ids_for_cat', 'ID популярных (через запятую)' ),
) );
//Вывод опции
$rz_popular_ids_for_cat = carbon_get_term_meta( $cur_cat, 'rz_popular_ids_for_cat' );
//----- /Опции на странцие рубрики-----
# --------- Menu ---------
Container::make('nav_menu_item', 'Мои настройки меню')
->add_fields( [
Field::make('image', 'rz_menu_image', 'Иконка')
->set_value_type('url'),
Field::make('image', 'rz_menu_image_hover', 'Иконка при наведении')
->set_value_type('url'),
] );
# walker header menu (можно добавить functions.php)
class rz_walker_two_images extends Walker_Nav_Menu {
public function start_el( &$output, $item, $depth = 0, $args = [], $id = 0 ) {
if ( isset( $args->item_spacing ) && 'discard' === $args->item_spacing ) {
$t = '';
$n = '';
} else {
$t = "\t";
$n = "\n";
}
$indent = ( $depth ) ? str_repeat( $t, $depth ) : '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;
$args = apply_filters( 'nav_menu_item_args', $args, $item, $depth );
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) );
$class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';
$id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args, $depth );
$id = $id ? ' id="' . esc_attr( $id ) . '"' : '';
$output .= $indent . '<li' . $id . $class_names .'>';
$atts = [];
$atts['title'] = ! empty( $item->attr_title ) ? $item->attr_title : '';
$atts['target'] = ! empty( $item->target ) ? $item->target : '';
$atts['rel'] = ! empty( $item->xfn ) ? $item->xfn : '';
$atts['href'] = ! empty( $item->url ) ? $item->url : '';
$atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args, $depth );
$attributes = '';
foreach ( $atts as $attr => $value ) {
if ( ! empty( $value ) ) {
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
$attributes .= ' ' . $attr . '="' . $value . '"';
}
}
$title = apply_filters( 'the_title', $item->title, $item->ID );
$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );
$rz_menu_image = carbon_get_nav_menu_item_meta( $item->ID, 'rz_menu_image' );
$rz_menu_image_hover = carbon_get_nav_menu_item_meta( $item->ID, 'rz_menu_image_hover' );
if($rz_menu_image) {
$rz_menu_image_result = '<span class="menu-img">';
$rz_menu_image_result .= '<img src="'.$rz_menu_image.'" class="menu-img__first" alt="'.$title.'">';
if($rz_menu_image_hover) {
$rz_menu_image_result .= '<img src="'.$rz_menu_image_hover.'" class="menu-img__second" alt="'.$title.'">';
}
$rz_menu_image_result .= '</span>';
}
$item_output = $args->before;
if($rz_menu_image) $item_output .= $rz_menu_image_result;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . $title . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
}
// Вывод меню с изображением
$nav = wp_nav_menu(
[
'theme_location' =>'nav_1',
'container' => false,
'items_wrap' => '<nav class="menu-1-box"><ul class="menu-1">%3$s</ul></nav>',
'fallback_cb' => false,
'depth' => 1,
'walker' => new rz_walker_two_images(),
'echo' => false,
]
);
if($nav) {
$nav = preg_replace('%(current-menu-item[^>]+>)(<span[^>]+><img[^>]+><img[^>]+><\/span>)<a[^>]+>([^<]+)<\/a>%', '$1$2<span class="current">$3</span>', $nav);
echo $nav;
}
# --------- / Menu ---------
// ------- Вывод мультиселекта на странице поста -------
Container::make( 'post_meta', __( 'Подбор диеты', 'crb' ) )
->where( 'post_type', '=', 'post' )
->add_fields( array(
Field::make( 'multiselect', 'crb_weight', 'Вес' )
->add_options( array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
) ),
) );
// ------- /Вывод мультиселекта на странице поста -------
# ------- Показывать поля только для выбранной рубрики-------
$rz_credit_cards = (int)carbon_get_theme_option('rz_credit_cards'); # Кредитные карты
if ($rz_credit_cards) {
$cat_credit_cards_info = get_category($rz_credit_cards);
$cat_credit_cards_slug = $cat_credit_cards_info->slug;
Container::make('post_meta', 'Информация - кредитные карты')
->show_on_post_type('post')
->show_on_category($cat_credit_cards_slug)
->add_fields( [
Field::make('complex', 'rz_cards_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->set_classes('rz-complex-no-btn')
->add_fields( [
Field::make('text', 'rz_cards_bank_name', 'Название банка (в заголовке)'),
Field::make('text', 'rz_cards_limit', 'Кредитный лимит (до ... гривен)'),
Field::make('text', 'rz_cards_limit_without_reference', 'Лимит без справки (до ... гривен)'),
Field::make('text', 'rz_cards_period', 'Льготный период (до ... дней)'),
Field::make('text', 'rz_cards_service', 'Обслуживание (... гривен в месяц)'),
Field::make('text', 'rz_cards_percent', 'Процентная ставка (... % в месяц)'),
Field::make('text', 'rz_cards_link', 'Url ссылки заказать карту'),
] )
] )
->add_fields( [
Field::make('complex', 'rz_cards_info', 'Дополнительная информация (Например: Карта оформляется в разных валютах бесплатно)')
->setup_labels($employees_label)
->add_fields( [
Field::make('text', 'rz_cards_info_item', 'Введите значение')
] )
] );
}
//Или так
if ($cat_franchise_id) {
$employees_labels = [
'plural_name' => '',
'singular_name' => 'поля',
];
Container::make('post_meta', 'Информация по франшизе')
->show_on_post_type('post')
->set_context('side')
->or_where( function( $condition ) {
global $cat_franchise_id;
$sj_cats_franchise = [];
$sj_cats_franchise_info = get_categories( [
'child_of' => $cat_franchise_id
] );
foreach ($sj_cats_franchise_info as $info_item) {
$sj_cats_franchise[] = $info_item->term_id;
}
$sj_cats_franchise[] = $cat_franchise_id;
if ($sj_cats_franchise) {
foreach ($sj_cats_franchise as $item) {
$condition->or_where('post_term', '=', ['field' => 'id', 'value' => $item, 'taxonomy' => 'category']);
}
}
} )
->add_fields( [
Field::make('complex', 'sj_franchise_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'sj_franchise_year', 'Год основания компании'),
Field::make('text', 'sj_franchise_open_our', 'Открыто собственных'),
Field::make('text', 'sj_franchise_opened', 'Открыто по франшизе'),
Field::make('text', 'sj_franchise_site_title', 'Сайт домен'),
Field::make('text', 'sj_franchise_site_url', 'Сайт url'),
Field::make('text', 'sj_inv_min', 'Инвестиции от (руб.)'),
Field::make('text', 'sj_inv_max', 'Инвестиции до (руб.)'),
Field::make('text', 'sj_franchise_contribution', 'Паушальный взнос (руб.)'),
Field::make('text', 'sj_franchise_royalty', 'Роялти (руб.)'),
Field::make('text', 'sj_franchise_email', 'Email франчайзера'),
] )
] );
}
# ------- /Показывать поля только для выбранной рубрики-------
#------- Показать поля только для выбранной рубрики при клике на чекбокс ----------
//Получаю ID рубрики «Каталог»
$select_cat = carbon_get_theme_option('select_cat');
if ($select_cat) {
// отбор рубрик каталога с учетом родителя
$cat_credit_cards_info = get_category($select_cat);
$cat_credit_cards_slug = $cat_credit_cards_info->slug;
$categories = get_categories( array(
'child_of' => $select_cat,
));
$cat_slugs[] = $cat_credit_cards_slug;
$cat_ids[] = $select_cat;
foreach ($categories as $category) {
$cat_slugs[] = $category->slug;
$cat_ids[] = $category->term_id;
}
// выборка всех рубрик кроме рубрики каталога и ее дочерних
$cat_ids_str = implode(",", $cat_ids);
$child_args = ['exclude' => $cat_ids_str, 'hide_empty' => '0'];
$child_categories = get_categories($child_args);
if( count($child_categories) ) {
foreach ($child_categories as $item) {
$cat_of_array[] = $item->slug;
}
}
// вывод контейнера Верхняя часть публикации кроме рубрик каталога
$container_img = Container::make('post_meta', 'post_information', 'Верхняя часть публикации')
->show_on_post_type('post')
->add_fields( [
Field::make('image', 'rz_single_top_img', 'Картинка')
->set_value_type( 'url' ),
] );
foreach ($cat_slugs as $cat_slug_not) {
$result = $container_img->where( 'post_term', '!=', array(
'field' => 'slug',
'value' => $cat_slug_not,
'taxonomy' => 'category',
) );
}
// вывод контейнера Информация об организации публикации только в рубриках каталога и ее дочерних рубрик
$container_post_info = Container::make('post_meta', 'post_information_cat', 'Информация об организации')
->show_on_post_type('post')
->add_tab( __('Profile'), array(
Field::make('text', 'ib_cat_pries_go', 'Стоимость поездки'),
Field::make('text', 'ib_cat_pries_wait', 'Стоимость ожидания'),
Field::make('rich_text', 'ib_cat_desc', 'Описание компании'),
Field::make('text', 'ib_cat_link', 'Ссылка для кнопки попробовать'),
) )
->add_tab( __('Контакты'), array(
Field::make( 'text', 'ib_cat_tel', 'Телефон' ),
Field::make( 'text', 'ib_cat_mail', 'Email' ),
Field::make( 'text', 'ib_cat_site', 'Сайт' ),
) )
->add_tab( __('Транспорт'), array(
Field::make( 'complex', 'transport_info', '' )
->set_layout( 'tabbed-horizontal' )
->add_fields( array(
Field::make( 'text', 'transpot_id', 'ID транспорта' ),
Field::make( 'text', 'transport_desc', 'Текст' ),
) )
) );
foreach ($cat_of_array as $cat_slug_in) {
$result = $container_post_info ->where( 'post_term', '!=', array(
'field' => 'slug',
'value' => $cat_slug_in,
'taxonomy' => 'category',
) );
}
}
// Пример использования
use Carbon_Fields\Container;
use Carbon_Fields\Field;
# Site categories list
$rz_categories = get_categories();
$rz_cats = [];
$rz_cats['0'] = 'Не выбрано';
if($rz_categories) {
foreach ($rz_categories as $rz_categories_item) {
$rz_cats[$rz_categories_item->term_id] = $rz_categories_item->name;
}
}
# Site pages list
$rz_pages_info = get_pages();
$rz_pages = [];
$rz_pages['0'] = 'Не выбрано';
if($rz_pages_info) {
foreach ($rz_pages_info as $rz_pages_info_item) {
$rz_pages[$rz_pages_info_item->ID] = $rz_pages_info_item->post_title;
}
}
# Theme options
$basic_options_container = Container::make('theme_options', 'Настройки темы')
->set_icon('dashicons-carrot')
->add_fields( [
Field::make('text', 'rz_page_home_title', 'Заголовок для описания главной страницы'),
Field::make('rich_text', 'rz_page_home_text', 'Текст для описания главной страницы'),
Field::make('text', 'bread_crumbs_home', 'Текст первой хлебной крошки')
->set_default_value('Главная'),
Field::make('text', 'rz_posts_per_home', 'Сколько постов выводить на главной')
->set_default_value(3),
Field::make("select", "rz_anounce_text", "Что выводить в анонсе поста")
->add_options( [
'1' => 'Отрывок',
'2' => 'Описание из плагина Yoast SEO',
] )
->set_default_value('1'),
Field::make("select", "rz_site_search", "Поиск по сайту")
->add_options( [
'1' => 'Вордпресс',
'2' => 'Яндекс',
] ),
Field::make("select", "rz_loan_card", "Кредит на карту")
->add_options($rz_cats),
Field::make("select", "rz_loan_cash", "Кредит наличными")
->add_options($rz_cats),
Field::make("select", "rz_credit_cards", "Кредитные карты")
->add_options($rz_cats),
Field::make("select", "rz_banks", "Банки")
->add_options($rz_cats),
Field::make("select", "page_filter_id", "Страница с результатами фильтра")
->add_options($rz_pages),
] );
# soc
Container::make('theme_options', 'Социальные сети')
->set_page_parent($basic_options_container)
->add_fields( [
Field::make('text', 'social_vk', 'Вконтакте'),
Field::make('text', 'social_fb', 'Facebook'),
Field::make('text', 'social_tw', 'Twitter'),
Field::make('text', 'social_in', 'Instagram'),
Field::make('text', 'social_yt', 'YouTube'),
Field::make('text', 'social_tel', 'Telegram'),
Field::make('text', 'social_ok', 'Однокласники'),
] );
# Author (задает фотографию для автора в том числе)
Container::make('theme_options', 'expert_information', 'Информация об эксперте')
->set_page_parent($basic_options_container)
->add_fields( [
Field::make('image', 'rz_main_author_img', 'Картинка')
->set_value_type( 'url' ),
Field::make('text', 'rz_main_author_name', 'ФИО'),
Field::make('text', 'rz_main_author_prof', 'Опыт работы'),
Field::make('rich_text', 'rz_main_author_descr', 'Текст'),
] );
# Menu
Container::make('nav_menu_item', 'Мои настройки меню')
->add_fields( [
Field::make('image', 'rz_menu_image', 'Иконка')
->set_value_type('url'),
Field::make('image', 'rz_menu_image_hover', 'Иконка при наведении')
->set_value_type('url'),
] );
# Entry img
Container::make('post_meta', 'Картинка под заголовком')
->show_on_post_type('post')
->add_fields( [
Field::make('image', 'rz_single_top_img', '')
->set_value_type( 'url' ),
] );
# Global varebles
global $excerpt_or_content, $rz_site_search, $rz_loan_card, $rz_loan_cash, $rz_credit_cards, $rz_banks, $posts_per_home;
# Count of posts on main page
$posts_per_home = carbon_get_theme_option('rz_posts_per_home');
if(!$posts_per_home) $posts_per_home = 3;
# Site search
$rz_site_search = carbon_get_theme_option('rz_site_search');
# Post announce setup
$excerpt_or_content = carbon_get_theme_option('rz_anounce_text');
# Additional categories
$rz_loan_card = (int)carbon_get_theme_option('rz_loan_card'); # Кредит на карту
$rz_loan_cash = (int)carbon_get_theme_option('rz_loan_cash'); # Кредит наличными
$rz_credit_cards = (int)carbon_get_theme_option('rz_credit_cards'); # Кредитные карты
$rz_banks = (int)carbon_get_theme_option('rz_banks'); # Банки
# Имена меток для комплексных полей
$employees_labels = [
'plural_name' => '',
'singular_name' => 'поля',
];
$employees_label = [
'plural_name' => '',
'singular_name' => 'поле',
];
# Поля для рубрики кредитные карты
if ($rz_credit_cards) {
$cat_credit_cards_info = get_category($rz_credit_cards);
$cat_credit_cards_slug = $cat_credit_cards_info->slug;
Container::make('post_meta', 'Информация - кредитные карты')
->show_on_post_type('post')
->show_on_category($cat_credit_cards_slug)
->add_fields( [
Field::make('complex', 'rz_cards_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->set_classes('rz-complex-no-btn')
->add_fields( [
Field::make('text', 'rz_cards_bank_name', 'Название банка (в заголовке)'),
Field::make('text', 'rz_cards_limit', 'Кредитный лимит (до ... гривен)'),
Field::make('text', 'rz_cards_limit_without_reference', 'Лимит без справки (до ... гривен)'),
Field::make('text', 'rz_cards_period', 'Льготный период (до ... дней)'),
Field::make('text', 'rz_cards_service', 'Обслуживание (... гривен в месяц)'),
Field::make('text', 'rz_cards_percent', 'Процентная ставка (... % в месяц)'),
Field::make('text', 'rz_cards_link', 'Url ссылки заказать карту'),
] )
] )
->add_fields( [
Field::make('complex', 'rz_cards_info', 'Дополнительная информация (Например: Карта оформляется в разных валютах бесплатно)')
->setup_labels($employees_label)
->add_fields( [
Field::make('text', 'rz_cards_info_item', 'Введите значение')
] )
] );
}
# Поля для рубрики банки
if ($rz_banks) {
$cat_banks_info = get_category($rz_banks);
$cat_banks_slug = $cat_banks_info->slug;
Container::make('post_meta', 'Информация - банки')
->show_on_post_type('post')
->show_on_category($cat_banks_slug)
->set_classes('rz-complex-no-btn')
->add_fields( [
Field::make('complex', 'rz_banks_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'rz_banks_max_summ', 'Максимальная сумма (... гривен)'),
Field::make('text', 'rz_banks_percent', 'Процентная ставка (...% годовых)'),
Field::make('text', 'rz_banks_time', 'Срок кредита (... дней)'),
Field::make( 'checkbox', 'rz_banks_kind_cash', 'Наличными' ),
Field::make( 'checkbox', 'rz_banks_kind_card', 'На карту' ),
Field::make('text', 'rz_banks_docs', 'Необходимые документы (через запятую)'),
Field::make('text', 'rz_banks_region', 'Регион (через запятую)'),
Field::make('text', 'rz_banks_link', 'Url ссылки заявка'),
Field::make("select", "rz_banks_pledge", "Без залога")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
Field::make("select", "rz_banks_guarantor", "Без поручителей")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
] )
] );
}
# Поля для рубрик кредит на карту, кредит наличными
if ($rz_loan_card || $rz_loan_cash) {
$cat_loan_card = get_category($rz_loan_card);
$cat_loan_card_slug = $cat_loan_card->slug;
$cat_loan_cash = get_category($rz_loan_cash);
$cat_loan_cash_slug = $cat_loan_cash->slug;
Container::make('post_meta', 'Информация - кредит на карту/кредит наличными')
->show_on_post_type('post')
->set_classes('rz-complex-no-btn')
->where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_loan_card_slug,
'taxonomy' => 'category',
] )
->or_where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_loan_cash_slug,
'taxonomy' => 'category',
] )
->add_fields( [
Field::make('complex', 'rz_loan_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'rz_loan_link', 'Url оформить кредит'),
Field::make( 'checkbox', 'rz_loan_kind_cash', 'Наличными' ),
Field::make( 'checkbox', 'rz_loan_kind_card', 'На карту' ),
Field::make('text', 'rz_loan_max_summ', 'Максимальная сумма (... гривен)'),
Field::make('text', 'rz_loan_percent', 'Процентная ставка (...% годовых)'),
Field::make('text', 'rz_loan_time', 'Срок кредита (... дней)'),
// Field::make('text', 'rz_loan_back', 'Сумма к возврату (... гривен)'),
Field::make('text', 'rz_loan_summ_text', 'Текст внутри поля сумма'),
Field::make('text', 'rz_loan_percent_text', 'Текст внутри поля ставка'),
Field::make('complex', 'rz_loan_fields_add_info', 'Дополнительная информация')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'rz_loan_age', 'Возраст (от ... лет)'),
Field::make('text', 'rz_loan_age_till', 'Возраст (до ... лет)'),
Field::make('text', 'rz_loan_docs', 'Необходимые документы (через запятую)'),
Field::make('text', 'rz_loan_desicion', 'Решение (за ... минут)'),
Field::make("select", "rz_loan_prolongation", "Пролонгация")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
Field::make("select", "rz_loan_without_percent", "Без процентов")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
Field::make("select", "rz_loan_bad_history", "С плохой кредитной историей")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
Field::make("select", "rz_loan_round_the_clock", "Круглосуточно")
->add_options( [
'0' => 'Не выводить',
'1' => 'Да',
'2' => 'Нет',
] )
->set_default_value('0'),
Field::make('text', 'rz_loan_get', 'Когда можно получить'),
] )
] ),
] );
}
# Поля для рубрик кредит на карту, кредит наличными, кредитные карты, банки (поля в сайдбаре)
if ($rz_loan_card || $rz_loan_cash || $rz_credit_cards || $rz_banks) {
$cat_loan_card = get_category($rz_loan_card);
$cat_loan_card_slug = $cat_loan_card->slug;
$cat_loan_cash = get_category($rz_loan_cash);
$cat_loan_cash_slug = $cat_loan_cash->slug;
$cat_credit_cards = get_category($rz_credit_cards);
$cat_credit_cards_slug = $cat_credit_cards->slug;
$cat_banks = get_category($rz_banks);
$cat_banks_slug = $cat_banks->slug;
Container::make('post_meta', 'Информация в сайдбаре')
->show_on_post_type('post')
->set_classes('rz-complex-no-btn')
->where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_loan_card_slug,
'taxonomy' => 'category',
] )
->or_where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_loan_cash_slug,
'taxonomy' => 'category',
] )
->or_where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_credit_cards_slug,
'taxonomy' => 'category',
] )
->or_where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_banks_slug,
'taxonomy' => 'category',
] )
->add_fields( [
Field::make('complex', 'rz_sidebar_info', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'rz_site', 'Официальный сайт'),
Field::make('text', 'rz_mail', 'Почта'),
Field::make('text', 'rz_phone', 'Телефоны (через запятую)'),
Field::make('text', 'rz_url', 'Url оформить кредит'),
] )
] );
}
//Еще один пример с кучей всего
use Carbon_Fields\Container;
use Carbon_Fields\Field;
# Site categories list
$rz_categories = get_categories();
$rz_cats = [];
$rz_cats['0'] = 'Не выбрано';
if($rz_categories) {
foreach ($rz_categories as $rz_categories_item) {
$rz_cats[$rz_categories_item->term_id] = $rz_categories_item->name;
}
}
# Site pages list
$rz_pages_info = get_pages();
$rz_pages = [];
$rz_pages['0'] = 'Не выбрано';
if($rz_pages_info) {
foreach ($rz_pages_info as $rz_pages_info_item) {
$rz_pages[$rz_pages_info_item->ID] = $rz_pages_info_item->post_title;
}
}
# Theme options
$basic_options_container = Container::make('theme_options', 'Настройки темы')
->set_icon('dashicons-carrot')
->add_fields( [
Field::make('text', 'rz_page_home_title', 'Заголовок для описания главной страницы'),
Field::make('rich_text', 'rz_page_home_text', 'Текст для описания главной страницы'),
Field::make('text', 'rz_posts_per_home', 'Сколько постов выводить на главной')
->set_default_value(12),
Field::make('text', 'bread_crumbs_home', 'Текст первой хлебной крошки')
->set_default_value('Главная'),
Field::make("select", "rz_anounce_text", "Что выводить в анонсе поста")
->add_options( [
'1' => 'Отрывок',
'2' => 'Описание из плагина Yoast SEO',
] )
->set_default_value('1'),
Field::make("select", "rz_site_search", "Поиск по сайту")
->add_options( [
'1' => 'Вордпресс',
'2' => 'Яндекс',
] )
->set_default_value('1'),
Field::make("select", "rz_question", "Рубрика вопросы")
->add_options($rz_cats),
Field::make("select", "page_filter_id", "Страница с результатами фильтра")
->add_options($rz_pages),
] );
# soc
Container::make('theme_options', 'social_networks', 'Социальные сети')
->set_page_parent($basic_options_container)
->add_fields( [
Field::make('text', 'social_fb', 'Facebook'),
Field::make('text', 'social_tw', 'Twitter'),
Field::make('text', 'social_vk', 'Вконтакте'),
Field::make('text', 'social_yt', 'YouTube'),
Field::make('text', 'social_tel', 'Telegram'),
Field::make('text', 'social_ok', 'Однокласники'),
Field::make('text', 'social_in', 'Instagram'),
] );
# Author
Container::make('theme_options', 'expert_information', 'Информация об эксперте')
->set_page_parent($basic_options_container)
->add_fields( [
Field::make('image', 'rz_main_author_img', 'Картинка')
->set_value_type( 'url' ),
Field::make('text', 'rz_main_author_name', 'ФИО'),
Field::make('text', 'rz_main_author_prof', 'Опыт работы'),
Field::make('rich_text', 'rz_main_author_descr', 'Текст'),
] );
# Entry img
Container::make('post_meta', 'Картинка под заголовком')
->show_on_post_type('post')
->add_fields( [
Field::make('image', 'rz_single_top_img', '')
->set_value_type( 'url' ),
Field::make('textarea', 'rz_single_top_text', 'Текст на картинке'),
] );
$rz_single_top_img = carbon_get_post_meta( get_the_ID(), 'rz_single_top_img' );
# Menu
Container::make('nav_menu_item', 'Мои настройки меню')
->add_fields( [
Field::make('image', 'rz_menu_image', 'Иконка')
->set_value_type('url'),
Field::make('image', 'rz_menu_image_hover', 'Иконка при наведении')
->set_value_type('url'),
] );
# Category img
Container::make('term_meta', 'Category settings')
->where('term_taxonomy', '=', 'category')
->add_fields( [
Field::make('image', 'rz_cat_img', 'Иконка для категории')
->set_value_type('url'),
] );
$cat_img = carbon_get_term_meta($category_info_item->cat_ID, 'rz_cat_img');
if ($cat_img) {
echo '<img src="'.$cat_img.'" class="cat-children__item-img" alt="'.$category_info_item->cat_name.'">';
}
# Users fields
Container::make('user_meta', 'Дополнительная информация')
->add_fields( [
Field::make('image', 'rz_author_img', 'Картинка')
->set_value_type( 'url' ),
Field::make('text', 'rz_author_prof', 'Профессия'),
Field::make('radio', 'rz_author_show', 'Вывод автора на главной странице')
->add_options( [
'yes' => 'Да',
'no' => 'Нет',
] )
] );
# Author
Container::make('theme_options', 'Информация об эксперте')
->set_page_parent($basic_options_container)
->add_fields( [
Field::make('image', 'rz_main_author_img', 'Картинка')
->set_value_type( 'url' ),
Field::make('text', 'rz_main_author_name', 'ФИО'),
Field::make('text', 'rz_main_author_prof', 'Опыт работы'),
Field::make('rich_text', 'rz_main_author_descr', 'Текст'),
] );
# Author image
$rz_main_author_img = carbon_get_theme_option('rz_main_author_img');
# Author name
$rz_main_author_name = carbon_get_theme_option('rz_main_author_name');
if(!$rz_main_author_name) $rz_main_author_name = 'Майоров Антон';
# Author profession
$rz_main_author_prof = carbon_get_theme_option('rz_main_author_prof');
if(!$rz_main_author_prof) $rz_main_author_prof = 'Опыт работы архитектором 7 лет';
# Author description
$rz_main_author_descr = carbon_get_theme_option('rz_main_author_descr');
# Fields products (доп поля для продуктов) - можно добавлять в записи, страницы и т.д.
Container::make('post_meta', 'Дополнительные параметры')
->show_on_post_type('product')
->add_fields( [
Field::make('text', 'crb_subtitle', 'Ссылка на товар'),
->help_text('<p><b>Какое настроение</b> у Вас было при написании <i>этой статьи?</i></p>') //текст справки
] );
# Бесконечно добавляющиеся поля Комплексные поля (при клике добавить еще одно) (получаем его как обычное //$product_price = carbon_get_post_meta( get_the_ID(), 'rz_product_price' ); только результатом будет массив)
$assistants_labels = [
'plural_name' => 'слайды',
'singular_name' => 'слайд',
];
Container::make('post_meta', 'Слайдер отзывов')
->show_on_post_type('post')
->add_fields( [
Field::make( 'complex', 'rz_single_slider', 'Слайд' )
->setup_labels( $assistants_labels )
->add_fields( [
Field::make( 'text', 'rz_slide_title', 'Заголовок отзыва' )->set_width( 33 ),
Field::make( 'textarea', 'rz_slide_text', 'Текст отзыва' )->set_width( 33 ),
] )
] );
# получить комплексное поле
$rz_cards_fields = carbon_get_post_meta(get_the_ID(), 'rz_single_slider');
var_dump($rz_single_slider);
# Global varebles
global $question, $solution, $excerpt_or_content, $posts_per_home, $rz_site_search, $rz_main_author_img, $rz_main_author_name, $rz_main_author_prof, $rz_main_author_descr, $post_views_cat_test;
# Count of posts on main page
$posts_per_home = carbon_get_theme_option('rz_posts_per_home');
if(!$posts_per_home) $posts_per_home = 6;
# Site search
$rz_site_search = carbon_get_theme_option('rz_site_search');
# Post announce setup
$excerpt_or_content = carbon_get_theme_option('rz_anounce_text');
# Additional categories
$question = (int)carbon_get_theme_option('rz_question');
# Fields for cat cats
$cat_info = get_category($cats);
$cat_product_slug = $cat_info->slug;
Container::make('post_meta', 'Параметры продукта')
->show_on_category($cat_product_slug)
->add_fields(array(
Field::make('text', 'rz_product_price', 'Цена'),
Field::make('text', 'rz_product_buy', 'Ссылка на товар'),
Field::make('text', 'rz_product_more', 'Ссылка подробнее'),
Field::make('text', 'rz_product_reviews', 'Ссылка отзывы'),
));
//$product_price = carbon_get_post_meta( get_the_ID(), 'rz_product_price' );
# Сделать комплексные поля для записей определенной рубрики - полем будет выбор записи тоже из указанной рубрики
if ($disease) {
$args = array(
'posts_per_page' => -1,
'category' => $disease,
);
$rz_posts_info = get_posts($args);
$rz_posts = [];
$rz_posts['0'] = 'Не выбрано';
if($rz_posts_info) {
foreach ($rz_posts_info as $rz_posts_info_item) {
$rz_posts[$rz_posts_info_item->ID] = $rz_posts_info_item->post_title;
}
}
$cat_product_info = get_category($product);
$cat_product_slug = $cat_product_info->slug;
$assistants_labels = array(
'plural_name' => 'записи',
'singular_name' => 'запись',
);
Container::make('post_meta', 'Помогает при заболеваниях (ссылки на записи - заболевания)')
->show_on_category($cat_product_slug)
->add_fields( [
Field::make( 'complex', 'rz_disease', 'Добавить заболевание' )
->setup_labels($assistants_labels)
->add_fields( [
Field::make("select", "rz_disease_post", "Выбрать статью")
->add_options($rz_posts),
] )
] );
}
->set_context('side') где показывать в адмике в (сайдбаре)
# Поля для записей из рубрик кредит на карту, кредит наличными / поля сразу для двух рубрик(или большего количества)
if ($rz_loan_card || $rz_loan_cash) {
$cat_loan_card = get_category($rz_loan_card);
$cat_loan_card_slug = $cat_loan_card->slug;
$cat_loan_cash = get_category($rz_loan_cash);
$cat_loan_cash_slug = $cat_loan_cash->slug;
Container::make('post_meta', 'Информация - кредит на карту/кредит наличными')
->show_on_post_type('post')
->where( 'post_term', '=', [
'field' => 'slug', //'field' => 'id',
'value' => $cat_loan_card_slug,
'taxonomy' => 'category',
] )
->or_where( 'post_term', '=', [
'field' => 'slug',
'value' => $cat_loan_cash_slug,
'taxonomy' => 'category',
] )
->set_context('side')
->add_fields( [
Field::make('complex', 'rz_banks_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'rz_banks_max_summ', 'Максимальная сумма (... гривен)'),
Field::make('text', 'rz_banks_percent', 'Процентная ставка (...% годовых)'),
Field::make('text', 'rz_banks_time', 'Срок кредита (... лет)'),
Field::make( 'checkbox', 'rz_banks_kind_cash', 'Наличными' ),
Field::make( 'checkbox', 'rz_banks_kind_card', 'На карту' ),
// ->set_option_value( 'yes' ),
Field::make('text', 'rz_banks_timed', 'Необходимые документы (через запятую)'),
Field::make('text', 'rz_banks_timedd', 'Регион (через запятую)'),
Field::make('text', 'rz_banks_link', 'Url ссылки заявка'),
] )
] );
}
# Добавить поля только для определенных рубрик /массива рубрик
if ($cat_franchise_id) {
$employees_labels = [
'plural_name' => '',
'singular_name' => 'поля',
];
Container::make('post_meta', 'Информация по франшизе')
->show_on_post_type('post')
->set_context('side')
// есть условие where - оно работает как оператор && , а есть условие or_where - оно работает как оператор ||
->or_where( function( $condition ) {
global $cat_franchise_id;
$sj_cats_franchise = [];
$sj_cats_franchise_info = get_categories( [
'child_of' => $cat_franchise_id
] );
foreach ($sj_cats_franchise_info as $info_item) {
$sj_cats_franchise[] = $info_item->term_id;
}
$sj_cats_franchise[] = $cat_franchise_id;
if ($sj_cats_franchise) {
foreach ($sj_cats_franchise as $item) {
$condition->or_where('post_term', '=', ['field' => 'id', 'value' => $item, 'taxonomy' => 'category']);
}
}
} )
->add_fields( [
Field::make('complex', 'sj_franchise_fields', '')
->set_duplicate_groups_allowed(false)
->setup_labels($employees_labels)
->add_fields( [
Field::make('text', 'sj_franchise_year', 'Год основания компании'),
] )
] );
}
// Дополнительное поле на странице тегов
Container::make( 'term_meta', __( 'Category Properties' ) )
->where( 'term_taxonomy', '=', 'post_tag' )
->add_fields( array(
Field::make('text', 'rz_short_tag_title', 'Короткое название'),
) );
//Комплексные поля. Добавляются без ограничения новые поля
Container::make( 'post_meta', 'График динамиик развития сети' )
->where( function( $condition ) {
global $cat_franchise_id;
$sj_cats_franchise = [];
$sj_cats_franchise_info = get_categories( [
'child_of' => $cat_franchise_id
] );
foreach ($sj_cats_franchise_info as $info_item) {
$sj_cats_franchise[] = $info_item->term_id;
}
$sj_cats_franchise[] = $cat_franchise_id;
if ($sj_cats_franchise) {
foreach ($sj_cats_franchise as $item) {
$condition->or_where('post_term', '=', ['field' => 'id', 'value' => $item, 'taxonomy' => 'category']);
}
}
} )
->add_fields( array(
Field::make( 'complex', 'rz_chart_single_franch', 'Точки графика' )
->setup_labels( array('plural_name' => 'точки', 'singular_name' => 'точку') )
->add_fields( array(
Field::make( 'text', 'rz_year', 'Год' )->set_width( 50 ),
Field::make( 'text', 'rz_value', 'Значение' )->set_width( 50 ),
)),
));
// Загрузка файла
Field::make( 'file', 'man_xml_zip_goods_file_id', 'Файл импорта (.zip)' ),
// Потом можно получить путь к файлу
$man_xml_zip_goods_file_id = carbon_get_theme_option('man_xml_zip_goods_file_id');
get_attached_file($man_xml_zip_goods_file_id);
# автор
Container::make( 'user_meta', 'Additional' )
->add_fields( [
Field::make( 'text', 'specialization', 'Specialization' ),
Field::make( 'select', 'answer_questions', 'Answers questions' )
->add_options( [
'no' => 'No',
'yes' => 'Yes',
] ),
] );
// Получение значения дополнительных полей пользователя
$bloger_position = carbon_get_user_meta( $user->ID, 'bloger-position' );
// Вывожу авторов, которые имеют значение селекта «Answers questions» равное "yes"
$users = get_users( [
'meta_key' => '_answer_questions',
'meta_value' => 'yes',
'meta_compare' => '=',
'orderby' => 'login',
'order' => 'ASC',
] );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment