name = 'block_type';
$this->plural = 'block_types';
$this->setting = 'modules/block_types';
$this->settings = 'modules.block_types';
$this->register = 'acfe/init';
$this->post_type = 'acfe-dbt';
$this->args = array(
'label' => __('Block Types', 'acfe'),
'show_in_menu' => 'edit.php?post_type=acf-field-group',
'labels' => array(
'name' => __('Block Types', 'acfe'),
'singular_name' => __('Block Type', 'acfe'),
'menu_name' => __('Block Types', 'acfe'),
'edit_item' => __('Edit Block Type', 'acfe'),
'add_new_item' => __('New Block Type', 'acfe'),
'enter_title' => __('Block Type Title', 'acfe'),
),
);
$this->messages = array(
'export_title' => __('Export Block Types', 'acfe'),
'export_description' => __('Export Block Types', 'acfe'),
'export_select' => __('Select Block Types', 'acfe'),
'export_not_found' => __('No block type available.', 'acfe'),
'export_not_selected' => __('No block types selected', 'acfe'),
'export_success_single' => __('1 block type exported', 'acfe'),
'export_success_multiple' => __('%s block types exported', 'acfe'),
'export_instructions' => sprintf(__('It is recommended to include this code within the acf/init hook (see documentation).', 'acfe'), esc_url('https://www.advancedcustomfields.com/resources/acf_register_block_type/')),
'import_title' => __('Import Block Types', 'acfe'),
'import_description' => __('Import Block Types', 'acfe'),
'import_success_single' => __('1 block type imported', 'acfe'),
'import_success_multiple' => __('%s block types imported', 'acfe'),
);
$this->export_files = array(
'single' => 'block-type',
'multiple' => 'block-types',
);
$this->validate = array('name');
$this->columns = array(
'acfe-name' => __('Name', 'acfe'),
'acfe-category' => __('Category', 'acfe'),
'acfe-post-types' => __('Posts', 'acfe'),
);
$this->item = array(
'name' => '',
'title' => '',
'active' => true,
'description' => '',
'category' => 'common',
'icon' => '',
'keywords' => array(),
'post_types' => array(),
'mode' => 'preview',
'align' => '',
'align_text' => '',
'align_content' => 'top',
'render_template' => '',
'render_callback' => '',
'enqueue_style' => '',
'enqueue_script' => '',
'enqueue_assets' => '',
'supports' => array(
'anchor' => false,
'align' => true,
'align_text' => false,
'align_content' => false,
'full_height' => false,
'mode' => true,
'multiple' => true,
'example' => array(),
'jsx' => false,
),
);
$this->alias = array(
'title' => 'label',
);
$this->l10n = array('title', 'description');
// register variations
acf_add_filter_variations('acfe/block_type/prepend/template', array('name'), 1);
acf_add_filter_variations('acfe/block_type/prepend/style', array('name'), 1);
acf_add_filter_variations('acfe/block_type/prepend/script', array('name'), 1);
}
/**
* register_item_args
*
* acfe/module/register_item_args
*
* @param $item
*
* @return mixed
*/
function register_item_args($item){
// template
if($item['render_template']){
$template = acfe_locate_file_path($item['render_template']);
if(!empty($template)){
$item['render_template'] = $template;
}
}
// style
if($item['enqueue_style']){
$style = acfe_locate_file_url($item['enqueue_style']);
if(!empty($style)){
$item['enqueue_style'] = $style;
}
}
// script
if($item['enqueue_script']){
$script = acfe_locate_file_url($item['enqueue_script']);
if(!empty($script)){
$item['enqueue_script'] = $script;
}
}
return $item;
}
/**
* register_item
*
* acfe/module/register_item
*
* @param $item
*/
function register_item($item){
// validate
if(!empty($item['name']) && !acf_has_block_type("acf/{$item['name']}")){
acf_register_block_type($item);
}
}
/**
* load_post
*
* acfe/module/load_post
*/
function load_post(){
global $item;
$prepend = acfe_get_setting('theme_folder') ? trailingslashit(acfe_get_setting('theme_folder')) : '';
$template = apply_filters('acfe/block_type/prepend/template', $prepend, $item);
$style = apply_filters('acfe/block_type/prepend/style', $prepend, $item);
$script = apply_filters('acfe/block_type/prepend/script', $prepend, $item);
add_filter('acf/prepare_field/name=render_template', function($field) use($template){
$field['prepend'] = $template;
return $field;
});
add_filter('acf/prepare_field/name=enqueue_style', function($field) use($style){
$field['prepend'] = $style;
return $field;
});
add_filter('acf/prepare_field/name=enqueue_script', function($field) use($script){
$field['prepend'] = $script;
return $field;
});
$field_groups = acf_get_field_groups(array(
'block' => "acf/{$item['name']}"
));
if($field_groups){
acfe_add_field_groups_metabox(array(
'id' => 'acfe-field-groups',
'title' => __('Field Groups', 'acf'),
'screen' => $this->post_type,
'field_groups' => $field_groups,
));
}
}
/**
* validate_name
*
* @param $value
* @param $item
*
* @return false|string
*/
function validate_name($value, $item){
// editing current block type
if($item['name'] === $value){
return false;
}
// check sibiling post types (could be disabled)
$sibiling_item = $this->get_item($value);
if($sibiling_item && $sibiling_item['ID'] !== $item['ID']){
return __('This block type already exists', 'acfe');
}
// existing block types
if(acf_has_block_type("acf/{$value}")){
return __('This block type already exists', 'acfe');
}
// return
return false;
}
/**
* prepare_load_item
*
* acfe/module/prepare_load_item
*
* @param $item
*
* @return mixed
*/
function prepare_load_item($item){
// supports
$supports = array('anchor', 'jsx', 'align', 'align_text', 'align_content', 'full_height', 'mode', 'multiple');
// loop supports
foreach($supports as $key){
$item["supports_$key"] = $item['supports'][ $key ];
}
$item['supports_align_content'] = acfe_unparse_types($item['supports_align_content']);
// supports: align arguments
if($item['supports']['align'] && is_array($item['supports']['align'])){
$item['supports_align_args'] = acf_encode_choices($item['supports']['align'], false);
$item['supports_align'] = true;
}
// icon
if($item['icon'] && is_string($item['icon'])){
$item['icon_type'] = 'simple';
$item['icon_text'] = $item['icon'];
}elseif($item['icon'] && is_array($item['icon'])){
$item['icon_type'] = 'colors';
$item['icon_background'] = acfe_get($item['icon'], 'background');
$item['icon_foreground'] = acfe_get($item['icon'], 'foreground');
$item['icon_src'] = acfe_get($item['icon'], 'src');
}
return $item;
}
/**
* prepare_save_item
*
* acfe/module/prepare_save_item
*
* @param $item
*
* @return mixed
*/
function prepare_save_item($item){
// general: post types
$item['post_types'] = acfe_as_array($item['post_types']);
// supports
$supports = array('anchor', 'jsx', 'align', 'align_text', 'align_content', 'full_height', 'mode', 'multiple');
// loop supports
foreach($supports as $key){
$item['supports'][ $key ] = $item["supports_$key"];
}
// supports: align arguments
if(!empty($item['supports_align_args'])){
$item['supports']['align'] = $item['supports_align_args'];
}
// icon
if($item['icon_type'] === 'simple'){
$item['icon'] = $item['icon_text'];
}elseif($item['icon_type'] === 'colors'){
$item['icon'] = array(
'background' => $item['icon_background'],
'foreground' => $item['icon_foreground'],
'src' => $item['icon_src'],
);
}
// return
return $item;
}
/**
* edit_column_acfe_name
*
* @param $item
*/
function edit_column_acfe_name($item){
echo '' . $item['name'] . '';
}
/**
* edit_column_acfe_category
*
* @param $item
*/
function edit_column_acfe_category($item){
if(empty($item['category'])){
echo '—';
return;
}
echo ucfirst($item['category']);
}
/**
* edit_column_acfe_post_types
*
* @param $item
*/
function edit_column_acfe_post_types($item){
$text = '—';
if(empty($item['post_types'])){
echo $text;
return;
}
$post_types = array();
foreach($item['post_types'] as $post_type){
if(post_type_exists($post_type)){
$post_types[] = $post_type;
}
}
if($post_types){
$labels = acf_get_pretty_post_types($post_types);
if(!empty($labels)){
$output = array();
foreach($labels as $post_type => $label){
$output[] = '' . $label . '';
}
$text = implode(', ', $output);
}
}
echo $text;
}
/**
* export_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_code($code, $args){
return "acf_register_block_type({$code});";
}
/**
* export_item_local_code
*
* acfe/module/export_item_local_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_local_code($code, $args){
return "acfe_register_block_type({$code});";
}
}
acfe_register_module('acfe_module_block_type');
endif;
function acfe_register_block_type($item){
acfe_get_module('block_type')->add_local_item($item);
}