name = 'post_type';
$this->plural = 'post_types';
$this->setting = 'modules/post_types';
$this->settings = 'modules.post_types';
$this->view = 'edit.php?post_type=%s';
$this->register = 'init';
$this->post_type = 'acfe-dpt';
$this->args = array(
'label' => __('Post Types', 'acfe'),
'show_in_menu' => 'tools.php',
'labels' => array(
'name' => __('Post Types', 'acfe'),
'singular_name' => __('Post Type', 'acfe'),
'menu_name' => __('Post Types', 'acfe'),
'edit_item' => __('Edit Post Type', 'acfe'),
'add_new_item' => __('New Post Type', 'acfe'),
'enter_title' => __('Post Type Label', 'acfe'),
),
);
$this->messages = array(
'export_title' => __('Export Post Types', 'acfe'),
'export_description' => __('Export Post Types', 'acfe'),
'export_select' => __('Select Post Types', 'acfe'),
'export_not_found' => __('No post type available.', 'acfe'),
'export_not_selected' => __('No post types selected', 'acfe'),
'export_success_single' => __('1 post type exported', 'acfe'),
'export_success_multiple' => __('%s post types exported', 'acfe'),
'export_instructions' => sprintf(__('It is recommended to include this code within the init hook (see documentation).', 'acfe'), esc_url('https://developer.wordpress.org/reference/functions/register_post_type/')),
'import_title' => __('Import Post Types', 'acfe'),
'import_description' => __('Import Post Types', 'acfe'),
'import_success_single' => __('1 post type imported', 'acfe'),
'import_success_multiple' => __('%s post types imported', 'acfe'),
);
$this->export_files = array(
'single' => 'post-type',
'multiple' => 'post-types',
);
$this->validate = array('name');
$this->columns = array(
'acfe-name' => __('Name', 'acfe'),
'acfe-taxonomies' => __('Taxonomies', 'acfe'),
'acfe-posts' => __('Posts', 'acfe'),
);
$this->item = array(
'name' => '',
'label' => '',
'active' => true,
'description' => '',
'hierarchical' => false,
'supports' => array('title', 'editor'),
'taxonomies' => array(),
'public' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'can_export' => true,
'delete_with_user' => null,
'labels' => array(),
'menu_position' => null,
'menu_icon' => 'dashicons-admin-post',
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'has_archive' => true,
'rewrite' => true,
'capability_type' => 'post',
'capabilities' => array(),
'map_meta_cap' => null,
'show_in_rest' => false,
'rest_base' => null,
'rest_controller_class' => 'WP_REST_Posts_Controller',
'acfe_archive_template' => null,
'acfe_archive_ppp' => 10,
'acfe_archive_orderby' => 'date',
'acfe_archive_order' => 'DESC',
'acfe_archive_meta_key' => '',
'acfe_archive_meta_type'=> '',
'acfe_single_template' => null,
'acfe_admin_archive' => false,
'acfe_admin_ppp' => 10,
'acfe_admin_orderby' => 'date',
'acfe_admin_order' => 'DESC',
'acfe_admin_meta_key' => '',
'acfe_admin_meta_type' => '',
);
$this->l10n = array('label', 'description', 'labels');
}
/**
* register_item
*
* acfe/module/register_item
*
* @param $item
*/
function register_item($item){
// validate
if(!empty($item['name']) && !post_type_exists($item['name'])){
register_post_type($item['name'], $item);
}
}
/**
* load_post
*
* acfe/module/load_post
*/
function load_post(){
flush_rewrite_rules(false);
}
/**
* imported_item
*
* acfe/module/imported_item
*
* @param $item
*/
function imported_item($item){
flush_rewrite_rules(false);
}
/**
* trashed_item
*
* acfe/module/trashed_item
*
* @param $id
*/
function trashed_item($id){
flush_rewrite_rules(false);
}
/**
* untrashed_item
*
* acfe/module/untrashed_item
*
* @param $id
*/
function untrashed_item($id){
flush_rewrite_rules(false);
}
/**
* validate_name
*
* @param $value
* @param $item
*
* @return false|string
*/
function validate_name($value, $item){
// editing current post type
if($item['name'] === $value){
return true;
}
// check sibiling post types (could be disabled)
$sibiling_item = $this->get_item($value);
if($sibiling_item && $sibiling_item['ID'] !== $item['ID']){
return __('This post type already exists', 'acfe');
}
// reserved wp post types
// see: https://codex.wordpress.org/Function_Reference/register_post_type#Reserved_Post_Types
$exclude = array('post', 'posts', 'page', 'attachment', 'revision', 'nav_menu_item', 'custom_css', 'customize_changeset', 'oembed_cache', 'user_request', 'wp_block', 'action', 'author', 'order', 'theme');
$exclude = array_merge($exclude, acfe_get_setting('reserved_post_types', array()));
// check if reserved name
if(in_array($value, $exclude)){
return __('This post type is reserved', 'acfe');
}
// check existing post types
global $wp_post_types;
foreach((array) $wp_post_types as $post_type){
// post type already exists
if($value === $post_type->name){
return __('This post type already exists', 'acfe');
}
}
return true;
}
/**
* prepare_load_item
*
* acfe/module/prepare_load_item
*
* @param $item
*
* @return mixed
*/
function prepare_load_item($item){
// menu: show in menu
if($item['show_in_menu'] && is_string($item['show_in_menu'])){
$item['show_in_menu_text'] = $item['show_in_menu'];
$item['show_in_menu'] = true;
}
// archive: has archive
if($item['has_archive'] && is_string($item['has_archive'])){
$item['has_archive_slug'] = $item['has_archive'];
$item['has_archive'] = true;
}
// single: rewrite
if($item['rewrite'] && is_array($item['rewrite'])){
$item['rewrite_args'] = $item['rewrite'];
$item['rewrite'] = true;
$item['rewrite_args_select'] = true;
}
return $item;
}
/**
* prepare_save_item
*
* acfe/module/prepare_save_item
*
* @param $item
*
* @return mixed
*/
function prepare_save_item($item){
// general: taxonomies
$item['taxonomies'] = acfe_as_array($item['taxonomies']);
// general: supports
if(empty($item['supports'])){
$item['supports'] = false;
}
// menu: menu position
if(!acf_is_empty($item['menu_position'])){
$item['menu_position'] = (int) $item['menu_position'];
}
// menu: show in menu
if($item['show_in_menu'] && !empty($item['show_in_menu_text'])){
$item['show_in_menu'] = $item['show_in_menu_text'];
}
// archive: has archive
if($item['has_archive'] && $item['has_archive_slug']){
$item['has_archive'] = $item['has_archive_slug'];
}
// single: rewrite
if($item['rewrite'] && $item['rewrite_args_select']){
$item['rewrite'] = $item['rewrite_args'];
}
if(is_array($item['capability_type']) && count($item['capability_type']) === 1){
$item['capability_type'] = current($item['capability_type']);
}
// return
return $item;
}
/**
* edit_column_acfe_name
*
* @param $item
*/
function edit_column_acfe_name($item){
echo '' . $item['name'] . '';
}
/**
* edit_column_acfe_taxonomies
*
* @param $item
*/
function edit_column_acfe_taxonomies($item){
$text = '—';
if(empty($item['taxonomies'])){
echo $text;
return;
}
$taxonomies = array();
foreach($item['taxonomies'] as $taxonomy){
if(taxonomy_exists($taxonomy)){
$taxonomies[] = $taxonomy;
}
}
if($taxonomies){
$labels = acf_get_taxonomy_labels($taxonomies);
if(!empty($labels)){
$text = implode(', ', $labels);
}
}
echo $text;
}
/**
* edit_column_acfe_posts
*
* @param $item
*/
function edit_column_acfe_posts($item){
// vars
$text = '—';
if(!post_type_exists($item['name'])){
echo $text;
return;
}
$count = wp_count_posts($item['name']);
if(!empty($count) && isset($count->publish)){
$count_publish = $count->publish;
$text = '' . $count_publish . '';
}
echo $text;
}
/**
* export_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_code($code, $args){
return "register_post_type('{$args['name']}', {$code});";
}
/**
* export_local_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_local_code($code, $args){
return "acfe_register_post_type({$code});";
}
}
acfe_register_module('acfe_module_post_type');
endif;
function acfe_register_post_type($item){
acfe_get_module('post_type')->add_local_item($item);
}