Created
February 1, 2020 16:11
-
-
Save BobbyRuby/b9e3895cf547ccf719647497b624f0fa to your computer and use it in GitHub Desktop.
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 | |
/** | |
* Created by PhpStorm. | |
* User: Bobby | |
* Date: 11/26/14 | |
* Time: 1:30 PM | |
* Channel Log: | |
* @ V 1.0.0 - 11/26/14 | |
*/ | |
/** | |
* Class Set_up_CPT | |
* Sets up custom post type and make action functions pluggable through calling obj | |
*/ | |
class Set_up_CPT | |
{ | |
public $post_type; // required arg key - required | |
public $post_type_name; // defaults to post type with ucfirst | |
public $post_type_name_lc; // defaults to post type with ucfirst | |
public $post_type_supports; // see below for defaults | |
public $menu_positon; // defaults to 1 | |
public $exclude_from_search; // defaults to false | |
public $show_ui; // defaults to true | |
public $show_in_menu; // defaults to true | |
public $description; // defaults to empty string | |
public $pl_func_class_obj_name; // name of object calling class - required | |
public $hierarchical; // defaults to false | |
public $has_archive; // defaults to false | |
public $map_meta_cap; // defaults to true | |
public $query_var; // defaults to true | |
public $publicly_queryable; // defaults to public value | |
public $menu_icon; | |
/** | |
* @param $cpt_args - see _set_up_cpt() | |
* @param $pl_func_class_name - class instantiating this class | |
*/ | |
public function __construct($cpt_args, $pl_func_class_name) | |
{ | |
// Need the post type and caller obj - return false if not set | |
if (!$cpt_args['post_type'] || !$pl_func_class_name) return false; | |
// get caller obj to set pluggable functions in calling class | |
$this->pl_func_class_obj_name = $pl_func_class_name; | |
// set up cpt args | |
$this->post_type = $cpt_args['post_type']; | |
$this->post_type_name = (array_key_exists('post_type_name', $cpt_args)) ? $cpt_args['post_type_name'] : ucfirst($cpt_args['post_type']); // defaults to post type uppercase | |
$this->menu_position = (array_key_exists('menu_position', $cpt_args)) ? $cpt_args['menu_position'] : 1; | |
$this->exclude_from_search = (array_key_exists('exclude_from_search', $cpt_args)) ? $cpt_args['exclude_from_search'] : false; | |
$this->public = (array_key_exists('public', $cpt_args)) ? $cpt_args['public'] : true; | |
$this->show_ui = (array_key_exists('show_ui', $cpt_args)) ? $cpt_args['show_ui'] : true; | |
$this->show_in_menu = (array_key_exists('show_in_menu', $cpt_args)) ? $cpt_args['show_in_menu'] : true; | |
$this->description = (array_key_exists('description', $cpt_args)) ? $cpt_args['description'] : ''; | |
$this->hierarchical = (array_key_exists('hierarchical', $cpt_args)) ? $cpt_args['hierarchical'] : false; | |
$this->map_meta_cap = (array_key_exists('map_meta_cap', $cpt_args)) ? $cpt_args['map_meta_cap'] : true; | |
$this->has_archive = (array_key_exists('has_archive', $cpt_args)) ? $cpt_args['has_archive'] : false; | |
$this->query_var = (array_key_exists('query_var', $cpt_args)) ? $cpt_args['query_var'] : true; | |
$this->menu_icon = (array_key_exists('menu_icon', $cpt_args)) ? $cpt_args['menu_icon'] : 'admin-post'; | |
$this->post_type_name_lc = strtolower($this->post_type_name); | |
// remove all spaces from post type name lc and replace with '_' | |
$this->post_type_name_lc = str_replace(' ', '_', $this->post_type_name_lc); | |
// if not specified make support all | |
if (empty($cpt_args['post_type_supports'])) { | |
$this->post_type_supports = array('title', 'editor', 'author', 'custom-fields', 'revisions', 'attachments', 'comments'); | |
} else { | |
$this->post_type_supports = $cpt_args['post_type_supports']; | |
} | |
$this->heirarchical = strtolower($this->hierarchical); | |
// load all actions via pluggable functions | |
$this->_set_up_cpt(); | |
// load function on current_screen to make sure we have screen | |
add_action('current_screen', array($this, 'add_cpt_scripts_n_styles')); | |
} | |
/** | |
* @todo - Fix declartion doc for this class | |
* Registers Post type creates all labels adds in action and filter functions if they exist pertaining to the post type | |
* | |
* @param string $post_type - required - the post type | |
* @param string $this ->post_type_name - required - the name eg. 'Permit' / 'Job' / 'Survey' | |
* @param int $menu_position - recommended - defaults to 1 the position in the menu | |
* @param array $post_type_supports - default is all | |
* $post_type_supports = array( | |
* 'title', | |
* 'editor', | |
* 'author', | |
* 'custom-fields', | |
* 'revisions', | |
* 'attachments', | |
* 'comments' | |
* ); | |
* @param bool $exclude_from_search - default is false - show in front end results true / false | |
* @param bool $public - show in admin - default is true | |
* @param bool $show_ui - show in edit screen - default is true | |
* @param string $description - description - default is empty string | |
* @param string|bool $show_in_menu - where to show menu - default is 1 | |
* | |
* @see register post type for better explanation | |
*/ | |
private function _set_up_cpt() | |
{ | |
// set up labels | |
$post_type_labels = array( | |
'name' => _x('All ' . $this->post_type_name . 's', ''), // Name Displayed On Head | |
'singular_name' => _x($this->post_type_name, ''), | |
'add_new' => _x('Add New ' . $this->post_type_name, ''), | |
'add_new_item' => __('Add New ' . $this->post_type_name), | |
'edit_item' => __('Edit ' . $this->post_type_name), | |
'new_item' => __('New ' . $this->post_type_name), | |
'all_items' => __('All ' . $this->post_type_name . 's'), | |
'view_item' => __('View ' . $this->post_type_name), | |
'search_items' => __('Search ' . $this->post_type_name . 's'), | |
'not_found' => __('Nothing found in ' . $this->post_type_name . 's'), | |
'not_found_in_trash' => __('Nothing found in ' . $this->post_type_name . ' Trash'), | |
'menu_name' => __($this->post_type_name . 's') | |
); | |
$post_type_args = array( | |
'labels' => $post_type_labels, | |
'description' => $this->description . 's', | |
'exclude_from_search' => $this->exclude_from_search, | |
'public' => $this->public, | |
'publicly_queryable' => $this->publicly_queryable, | |
'show_ui' => $this->show_ui, | |
'show_in_menu' => $this->show_in_menu, | |
'query_var' => $this->query_var, | |
'rewrite' => array('slug' => $this->post_type_name_lc . 's'), | |
'capability_type' => $this->post_type_name_lc, | |
'capabilities' => array( | |
'publish_posts' => 'publish_' . $this->post_type_name_lc . 's', | |
'edit_posts' => 'edit_' . $this->post_type_name_lc . 's', | |
'edit_others_posts' => 'edit_others_' . $this->post_type_name_lc . 's', | |
'delete_posts' => 'delete_' . $this->post_type_name_lc . 's', | |
'delete_others_posts' => 'delete_others_' . $this->post_type_name_lc . 's', | |
'read_private_posts' => 'read_private_' . $this->post_type_name_lc . 's', | |
'edit_post' => 'edit_' . $this->post_type_name_lc, | |
'delete_post' => 'delete_' . $this->post_type_name_lc, | |
'read_post' => 'read_' . $this->post_type_name_lc, | |
), | |
'map_meta_cap' => $this->map_meta_cap, | |
'has_archive' => $this->has_archive, | |
'hierarchical' => $this->hierarchical, | |
'menu_position' => $this->menu_position, | |
'supports' => $this->post_type_supports, | |
'menu_icon' => $this->menu_icon | |
); | |
register_post_type($this->post_type, $post_type_args); | |
/* | |
* Check for and add actions / filters for all post type specific functions for this post type. | |
*/ | |
/********************** | |
* WP Hook Pluggable Functions | |
************************/ | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_set_cpt_columns')) { | |
// use to set custom columns | |
add_action('manage_edit-' . $this->post_type . '_columns', array($this->pl_func_class_obj_name, $this->post_type . '_set_cpt_columns')); // call custom if it exists | |
} else { | |
// calls default columns | |
add_action('manage_edit-' . $this->post_type . '_columns', array($this->pl_func_class_obj_name, 'set_cpt_columns')); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_manage_cpt_columns')) { | |
// use to manage data displayed in post type columns | |
add_action('manage_' . $this->post_type . '_posts_custom_column', array($this->pl_func_class_obj_name, $this->post_type . '_manage_cpt_columns'), 10, 3); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_pre_get_cpt')) { | |
// use to filter what is displayed for this post types list page | |
add_action('pre_get_posts', array($this->pl_func_class_obj_name, $this->post_type . '_pre_get_cpt'), 10); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_save')) { | |
// use for save function | |
add_action('save_post_' . $this->post_type, array($this->pl_func_class_obj_name, $this->post_type . '_save'), 10); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_remove_boxes')) { | |
// use to remove any boxes | |
add_action('admin_init', array($this->pl_func_class_obj_name, $this->post_type . '_remove_boxes'), 1); | |
} | |
if (method_exists($this->pl_func_class_obj_name, 'add_meta_boxes_' . $this->post_type)) { | |
// use to set up boxes for post type | |
add_action('admin_init', array($this->pl_func_class_obj_name, 'add_meta_boxes_' . $this->post_type)); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_post_row_actions')) { | |
// use to set up custom post row actions if needed | |
add_action('post_row_actions', array($this->pl_func_class_obj_name, $this->post_type . '_post_row_actions')); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_bulk_actions')) { | |
// use to set up custom post bulk actions if needed | |
add_action('bulk_actions-edit-' . $this->post_type, array($this->pl_func_class_obj_name, $this->post_type . '_bulk_actions')); | |
} | |
if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_restore_meta_revision')) { | |
// use to set up post meta revisioning if needed | |
add_action('wp_restore_post_revision', array($this->pl_func_class_obj_name, $this->post_type . '_restore_meta_revision'), 10, 2); | |
} | |
/********************** | |
* Custom Hook Calls - @todo need to be reassed to new design | |
************************/ | |
// if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_task_file_meta')) { | |
// // use to alter task meta on upload | |
// add_action('rvms_change_task_file_meta', array($this->pl_func_class_obj_name, $this->post_type . '_task_file_meta'), 1, 1); // hook located near line 777 RVMS - 0.0.1 in rvms_client_subcon_job.php | |
// } | |
// if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_pm_and_qc_files_filter')) { | |
// // use to alter task meta on upload | |
// add_action('rvms_get_pm_and_qc_files_filter', array($this->pl_func_class_obj_name, $this->post_type . '_pm_and_qc_files_filter'), 1, 2); // hook located near line 1539 RVMS - 0.0.1 in meta_box_bainternet.php | |
// } | |
// if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_client_pickup_files_filter')) { | |
// // use to alter task meta on upload | |
// add_action('rvms_get_client_pickup_files_filter', array($this->pl_func_class_obj_name, $this->post_type . '_client_pickup_files_filter'), 1, 2); // hook located near line 1539 RVMS - 0.0.1 in meta_box_bainternet.php | |
// } | |
// if (method_exists($this->pl_func_class_obj_name, $this->post_type . '_new_user_filter')) { | |
// // use to alter task meta on upload | |
// add_action('rvms_user_register', array($this->pl_func_class_obj_name, $this->post_type . '_new_user_filter'), 2); // hook created and placed in core user-new.php - line 424 - RVMS - 0.0.1 WP - 3.8.1 | |
// } | |
} | |
/** | |
* Used as to add scripts ans styles for post types. | |
* Creates a script name spaced $post_type.'_js' | |
* for | |
* ABSPATH.'js/'.$post_type.'_edit_single.js' | |
* | |
* Creates a stylesheet name spaced | |
* $post_type.'_css' | |
* for | |
* ABSPATH.'css/'.$post_type.'_edit_single.css' | |
* | |
* Creates a script name spaced | |
* 'all_' . $post_type . 's_screen_js' | |
* for | |
* ABSPATH.'js/all_' . $post_type . 's_screen.js | |
* | |
* Creates a stylesheet name spaced | |
* 'all_' . $post_type . 's_screen_js' | |
* for | |
* ABSPATH.'css/all_' . $post_type . 's_screen.css' * | |
* | |
* @param $post_type - the post type - needed to tell what post type and also used in all naming or the styles and scripts | |
*/ | |
public function add_cpt_scripts_n_styles() | |
{ | |
$screen = get_current_screen(); | |
// All $this->post_type screen | |
if ($screen->id === 'edit-' . $this->post_type) { | |
// script | |
$js = 'all_' . $this->post_type . 's_screen_js'; | |
$js_path = ABSPATH . 'wp-content/plugins/rvms/js/all_' . $this->post_type . 's_screen.js'; | |
$js_url = 'wp-content/plugins/rvms/js/all_' . $this->post_type . 's_screen.js'; | |
// enqueue only if exists | |
if (file_exists($js_path)) { | |
add_action('admin_enqueue_scripts', | |
function () use ($js, $js_path) { | |
wp_enqueue_script($js, $js_path, 1, true); | |
}); | |
} | |
// style | |
$stylesheet = 'all_' . $this->post_type . '_css'; | |
$stylesheet_path = ABSPATH . 'wp-content/plugins/rvms/js/css/all_' . $this->post_type . 's_screen.css'; | |
// enqueue only if exists | |
if (file_exists($stylesheet_path)) { | |
add_action('admin_enqueue_scripts', | |
function () use ($stylesheet, $stylesheet_path) { | |
wp_enqueue_style($stylesheet, $stylesheet_path); | |
}); | |
} | |
} else // If in single $this->post_type view | |
if ($screen->id === $this->post_type) { | |
// script | |
$js = $this->post_type . '_edit_single_js'; | |
$js_path = ABSPATH . 'wp-content/plugins/rvms/js/' . $this->post_type . '_edit_single.js'; | |
$js_url = home_url('wp-content/plugins/rvms/js/' . $this->post_type . '_edit_single.js'); | |
// enqueue only if exists | |
if (file_exists($js_path)) wp_enqueue_script($js, $js_url, 1, true); | |
// style | |
$stylesheet = $this->post_type . '_css'; | |
$stylesheet_path = ABSPATH . 'wp-content/plugins/rvms/css/' . $this->post_type . '_edit_single.css'; | |
$stylesheet_url = home_url('wp-content/plugins/rvms/css/' . $this->post_type . '_edit_single.css'); | |
// enqueue only if exists | |
if (file_exists($stylesheet_path)) wp_enqueue_style($stylesheet, $stylesheet_url, 1, true); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment