Last active
August 7, 2020 12:41
-
-
Save amorkovin/32a8f6a7ed608a4104a08d7f27ef83df to your computer and use it in GitHub Desktop.
Carbon carbonfields
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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