web/wp-content/plugins/acf-extended/includes/modules/taxonomy/module-taxonomy.php (202 lines of code) (raw):
<?php
if(!defined('ABSPATH')){
exit;
}
if(!class_exists('acfe_module_taxonomy')):
class acfe_module_taxonomy extends acfe_module{
/**
* initialize
*/
function initialize(){
$this->name = 'taxonomy';
$this->plural = 'taxonomies';
$this->setting = 'modules/taxonomies';
$this->settings = 'modules.taxonomies';
$this->view = 'edit-tags.php?taxonomy=%s';
$this->register = 'init';
$this->post_type = 'acfe-dt';
$this->args = array(
'label' => __('Taxonomies', 'acfe'),
'show_in_menu' => 'tools.php',
'labels' => array(
'name' => __('Taxonomies', 'acfe'),
'singular_name' => __('Taxonomy', 'acfe'),
'menu_name' => __('Taxonomies', 'acfe'),
'edit_item' => __('Edit Taxonomy', 'acfe'),
'add_new_item' => __('New Taxonomy', 'acfe'),
'enter_title' => __('Taxonomy Label', 'acfe'),
),
);
$this->messages = array(
'export_title' => __('Export Taxonomies', 'acfe'),
'export_description' => __('Export Taxonomies', 'acfe'),
'export_select' => __('Select Taxonomies', 'acfe'),
'export_not_found' => __('No taxonomy available.', 'acfe'),
'export_not_selected' => __('No taxonomies selected', 'acfe'),
'export_success_single' => __('1 taxonomy exported', 'acfe'),
'export_success_multiple' => __('%s taxonomies exported', 'acfe'),
'export_instructions' => sprintf(__('It is recommended to include this code within the <code>init</code> hook (<a href="%s" target="blank">see documentation</a>).', 'acfe'), esc_url('https://developer.wordpress.org/reference/functions/register_taxonomy/')),
'import_title' => __('Import Taxonomies', 'acfe'),
'import_description' => __('Import Taxonomies', 'acfe'),
'import_success_single' => __('1 taxonomy imported', 'acfe'),
'import_success_multiple' => __('%s taxonomies imported', 'acfe'),
);
$this->export_files = array(
'single' => 'taxonomy',
'multiple' => 'taxonomies',
);
$this->validate = array('name');
$this->columns = array(
'acfe-name' => __('Name', 'acf'),
'acfe-post-types' => __('Post Types', 'acf'),
'acfe-terms' => __('Terms', 'acf'),
);
$this->item = array(
'name' => '',
'label' => '',
'active' => true,
'post_types' => array(),
'description' => '',
'hierarchical' => false,
'public' => true,
'publicly_queryable' => true,
'update_count_callback' => '',
'meta_box_cb' => null,
'sort' => false,
'labels' => array(),
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'show_in_quick_edit' => true,
'show_admin_column' => true,
'rewrite' => true,
'show_in_rest' => false,
'rest_base' => '',
'rest_controller_class' => 'WP_REST_Terms_Controller',
'acfe_single_template' => null,
'acfe_single_ppp' => 10,
'acfe_single_orderby' => 'date',
'acfe_single_order' => 'DESC',
'acfe_single_meta_key' => '',
'acfe_single_meta_type' => '',
'acfe_admin_ppp' => 10,
'acfe_admin_orderby' => 'name',
'acfe_admin_order' => 'ASC',
'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']) && !taxonomy_exists($item['name'])){
register_taxonomy($item['name'], $item['post_types'], $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 $item
*/
function trashed_item($item){
flush_rewrite_rules(false);
}
/**
* untrashed_item
*
* acfe/module/untrashed_item
*
* @param $item
*/
function untrashed_item($item){
flush_rewrite_rules(false);
}
/**
* validate_name
*
* @param $value
* @param $item
*
* @return false|string
*/
function validate_name($value, $item){
// editing current term
if($item['name'] === $value){
return false;
}
// check sibiling taxonomies (could be disabled)
$sibiling_item = $this->get_item($value);
if($sibiling_item && $sibiling_item['ID'] !== $item['ID']){
return __('This taxonomy already exists', 'acfe');
}
// reserved wp taxonomies
// see: https://codex.wordpress.org/Function_Reference/register_taxonomy#Reserved_Terms
$exclude = array('attachment',
'attachment_id', 'author', 'author_name', 'calendar', 'cat', 'category', 'category__and', 'category__in', 'category__not_in', 'category_name', 'comments_per_page', 'comments_popup', 'customize_messenger_channel', 'customized', 'cpage', 'day', 'debug', 'error', 'exact', 'feed', 'fields', 'hour', 'link_category', 'm', 'minute', 'monthnum', 'more', 'name', 'nav_menu', 'nonce', 'nopaging', 'offset', 'order', 'orderby', 'p', 'page', 'page_id', 'paged', 'pagename', 'pb', 'perm', 'post', 'post__in', 'post__not_in', 'post_format', 'post_mime_type', 'post_status', 'post_tag', 'post_type', 'posts', 'posts_per_archive_page', 'posts_per_page', 'preview', 'robots', 's', 'search', 'second', 'sentence', 'showposts', 'static', 'subpost', 'subpost_id', 'tag', 'tag__and', 'tag__in', 'tag__not_in', 'tag_id', 'tag_slug__and', 'tag_slug__in', 'taxonomy', 'tb', 'term', 'theme', 'type', 'w', 'withcomments', 'withoutcomments', 'year',);
$exclude = array_merge($exclude, acfe_get_setting('reserved_taxonomies', array()));
// check if reserved name
if(in_array($value, $exclude)){
return __('This taxonomy is reserved', 'acfe');
}
// check existing taxonomies
global $wp_taxonomies;
foreach((array) $wp_taxonomies as $taxonomy){
// taxonomy already exists
if($value === $taxonomy->name){
return __('This taxonomy already exists', 'acfe');
}
}
// return
return false;
}
/**
* prepare_load_item
*
* acfe/module/prepare_load_item
*
* @param $item
*
* @return mixed
*/
function prepare_load_item($item){
// general: meta_box_cb
if(is_string($item['meta_box_cb']) && $item['meta_box_cb'] !== 'null' && $item['meta_box_cb'] !== 'false'){
$item['meta_box_cb_custom'] = $item['meta_box_cb'];
$item['meta_box_cb'] = 'custom';
}
// 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: post types
$item['post_types'] = acf_get_array($item['post_types']);
// general: meta_box_cb
if($item['meta_box_cb'] === 'custom'){
$item['meta_box_cb'] = $item['meta_box_cb_custom'];
}
// single: rewrite
if($item['rewrite'] && $item['rewrite_args_select']){
$item['rewrite'] = $item['rewrite_args'];
}
// return
return $item;
}
/**
* edit_column_acfe_name
*
* @param $item
*/
function edit_column_acfe_name($item){
echo '<code style="font-size: 12px;">' . $item['name'] . '</code>';
}
/**
* 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[] = '<a href="' . admin_url("edit.php?post_type={$post_type}") . '">' . $label . '</a>';
}
$text = implode(', ', $output);
}
}
echo $text;
}
/**
* edit_column_acfe_terms
*
* @param $item
*/
function edit_column_acfe_terms($item){
// vars
$text = '—';
if(!taxonomy_exists($item['name'])){
echo $text;
return;
}
$count = wp_count_terms($item['name'], array(
'hide_empty' => false
));
if(!is_wp_error($count) && !empty($count)){
$text = '<a href="' . admin_url("edit-tags.php?taxonomy={$item['name']}") . '">' . $count . '</a>';
}
echo $text;
}
/**
* export_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_code($code, $args){
$post_types = acfe_var_export($args['post_types']);
return "register_taxonomy('{$args['name']}', {$post_types}, {$code});";
}
/**
* export_local_code
*
* @param $return
* @param $code
* @param $args
*
* @return string
*/
function export_local_code($code, $args){
return "acfe_register_taxonomy({$code});";
}
}
acfe_register_module('acfe_module_taxonomy');
endif;
function acfe_register_taxonomy($item){
acfe_get_module('taxonomy')->add_local_item($item);
}