Advertisement
Guest User

Untitled

a guest
Dec 20th, 2015
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. <?php
  2.  
  3. class Transfers_Extra_Items_Post_Type extends Transfers_BaseSingleton {
  4.  
  5. private $enable_extra_items;
  6. private $extra_item_custom_meta_fields;
  7.  
  8. protected function __construct() {
  9.  
  10. global $transfers_plugin_globals, $transfers_transport_types_post_type;
  11.  
  12. $this->enable_extra_items = $transfers_plugin_globals->enable_extra_items();
  13.  
  14. if ($this->enable_extra_items) {
  15.  
  16. $transport_types = array();
  17. $transport_types_results = $transfers_transport_types_post_type->list_transport_types (0, -1, 'post_title', 'ASC');
  18. if (count($transport_types_results) > 0 && $transport_types_results['total'] > 0) {
  19. foreach ($transport_types_results['results'] as $transport_types_result) {
  20. $transport_types[] = array('value' => $transport_types_result->ID, 'label' => $transport_types_result->post_title);
  21. }
  22. }
  23.  
  24. $this->extra_item_custom_meta_fields = array(
  25.  
  26. array( // Post ID select box
  27. 'label' => esc_html__('Shared price per item?', 'transfers'), // <label>
  28. 'desc' => esc_html__('What is the individual price of this extra item when transfer is shared?', 'transfers'), // description
  29. 'id' => '_extra_item_price_shared', // field id and name
  30. 'type' => 'number',
  31. 'step' => 'any'
  32. ),
  33. array( // Post ID select box
  34. 'label' => esc_html__('Private price per item?', 'transfers'), // <label>
  35. 'desc' => esc_html__('What is the individual price of this extra item when transfer is private?', 'transfers'), // description
  36. 'id' => '_extra_item_price_private', // field id and name
  37. 'type' => 'number',
  38. 'step' => 'any'
  39. ),
  40. array( // Post ID select box
  41. 'label' => esc_html__('Max allowed items per shared transfer per person?', 'transfers'), // <label>
  42. 'desc' => esc_html__('How many pieces of the extra item are allowed per shared transfer per person?', 'transfers'), // description
  43. 'id' => '_extra_item_max_allowed_per_shared_transfer', // field id and name
  44. 'type' => 'slider',
  45. 'min' => '1',
  46. 'max' => '100',
  47. 'step' => '1'
  48. ),
  49. array( // Post ID select box
  50. 'label' => esc_html__('Max allowed items per private transfer?', 'transfers'), // <label>
  51. 'desc' => esc_html__('How many pieces of the extra item are allowed per private transfer?', 'transfers'), // description
  52. 'id' => '_extra_item_max_allowed_per_private_transfer', // field id and name
  53. 'type' => 'slider',
  54. 'min' => '1',
  55. 'max' => '100',
  56. 'step' => '1'
  57. ),
  58. array( // Post ID select box
  59. 'label' => esc_html__('Supported transport types', 'transfers'), // <label>
  60. 'desc' => '', // description
  61. 'id' => 'transport_types', // field id and name
  62. 'type' => 'checkbox_group', // type of field
  63. 'options' => $transport_types // post types to display, options are prefixed with their post type
  64. ),
  65. )
  66.  
  67. // our parent class might
  68. // contain shared code in its constructor
  69.  
  70. parent::__construct();
  71.  
  72.  
  73.  
  74.  
  75. public function init() {
  76.  
  77. if ($this->enable_extra_items) {
  78.  
  79. add_action( 'admin_init', array($this, 'remove_unnecessary_meta_boxes') );
  80. add_filter('manage_edit-extra_columns', array( $this, 'manage_edit_extra_item_columns'), 10, 1);
  81. add_action( 'transfers_plugin_initialize_post_types', array( $this, 'initialize_post_type' ), 0);
  82. add_action( 'admin_init', array( $this, 'extra_item_admin_init' ) );
  83. }
  84.  
  85. }
  86.  
  87. function extra_item_admin_init() {
  88.  
  89. new Transfers_Add_Meta_Box( 'extra_item_custom_meta_fields', esc_html__('Extra information', 'transfers'), $this->extra_item_custom_meta_fields, 'extra_item' );
  90. }
  91.  
  92. function remove_unnecessary_meta_boxes() {
  93.  
  94. }
  95.  
  96. function manage_edit_extra_item_columns($columns) {
  97. return $columns;
  98. }
  99.  
  100. function initialize_post_type() {
  101.  
  102. $this->register_extra_item_post_type();
  103. }
  104.  
  105. function register_extra_item_post_type() {
  106.  
  107. global $transfers_plugin_globals;
  108.  
  109. $labels = array(
  110. 'name' => _x( 'Extra items', 'Post Type General Name', 'transfers' ),
  111. 'singular_name' => _x( 'Extra item', 'Post Type Singular Name', 'transfers' ),
  112. 'menu_name' => esc_html__( 'Extra items', 'transfers' ),
  113. 'all_items' => esc_html__( 'All Extra items', 'transfers' ),
  114. 'view_item' => esc_html__( 'View Extra item', 'transfers' ),
  115. 'add_new_item' => esc_html__( 'Add New Extra item', 'transfers' ),
  116. 'add_new' => esc_html__( 'New Extra item', 'transfers' ),
  117. 'edit_item' => esc_html__( 'Edit Extra item', 'transfers' ),
  118. 'update_item' => esc_html__( 'Update Extra item', 'transfers' ),
  119. 'search_items' => esc_html__( 'Search Extra items', 'transfers' ),
  120. 'not_found' => esc_html__( 'No Extra items found', 'transfers' ),
  121. 'not_found_in_trash' => esc_html__( 'No Extra items found in Trash', 'transfers' ),
  122. );
  123. $args = array(
  124. 'label' => esc_html__( 'extra item', 'transfers' ),
  125. 'description' => esc_html__( 'Extra item information pages', 'transfers' ),
  126. 'labels' => $labels,
  127. 'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
  128. 'taxonomies' => array( ),
  129. 'hierarchical' => false,
  130. 'public' => true,
  131. 'show_ui' => true,
  132. 'show_in_menu' => true,
  133. 'show_in_nav_menus' => true,
  134. 'show_in_admin_bar' => true,
  135. 'can_export' => true,
  136. 'has_archive' => false,
  137. 'exclude_from_search' => false,
  138. 'publicly_queryable' => true,
  139. 'capability_type' => 'page',
  140. 'rewrite' => false,
  141. );
  142.  
  143. register_post_type( 'extra_item', $args );
  144. }
  145.  
  146. function list_extra_items_by_transport_type($transport_type_id) {
  147.  
  148. $results = array();
  149.  
  150. $raw_results = $this->list_extra_items(0, -1, 'post_title', 'ASC');
  151.  
  152. if ($raw_results && $raw_results['total'] > 0) {
  153.  
  154. foreach ($raw_results['results'] as $result) {
  155.  
  156. $extra_id = $result->ID;
  157.  
  158. $transport_types_meta = get_post_meta($extra_id, 'transport_types', true);
  159.  
  160. if ($transport_types_meta) {
  161.  
  162. if (in_array($transport_type_id, $transport_types_meta)) {
  163. $results[] = $result;
  164. }
  165. }
  166.  
  167. }
  168.  
  169. }
  170.  
  171. return $results;
  172. }
  173.  
  174. function list_extra_items($paged = 0, $per_page = -1, $orderby = '', $order = '', $author_id = null, $include_private = false, $count_only = false ) {
  175.  
  176. $args = array(
  177. 'post_type' => 'extra_item',
  178. 'post_status' => array('publish'),
  179. 'posts_per_page' => $per_page,
  180. 'paged' => $paged,
  181. 'orderby' => $orderby,
  182. 'suppress_filters' => false,
  183. 'order' => $order,
  184. 'meta_query' => array('relation' => 'AND')
  185. );
  186.  
  187. if ($include_private) {
  188. $args['post_status'][] = 'private';
  189. }
  190.  
  191. if (isset($author_id)) {
  192. $author_id = intval($author_id);
  193. if ($author_id > 0) {
  194. $args['author'] = $author_id;
  195. }
  196. }
  197.  
  198. $posts_query = new WP_Query($args);
  199.  
  200. if ($count_only) {
  201. $results = array(
  202. 'total' => $posts_query->found_posts,
  203. 'results' => null
  204. );
  205. } else {
  206. $results = array();
  207.  
  208. if ($posts_query->have_posts() ) {
  209. while ( $posts_query->have_posts() ) {
  210. global $post;
  211. $posts_query->the_post();
  212. $results[] = $post;
  213. }
  214. }
  215.  
  216. $results = array(
  217. 'total' => $posts_query->found_posts,
  218. 'results' => $results
  219. );
  220. }
  221.  
  222. wp_reset_postdata();
  223.  
  224. return $results;
  225. }
  226.  
  227. }
  228.  
  229. global $transfers_extra_items_post_type;
  230. // store the instance in a variable to be retrieved later and call init
  231. $transfers_extra_items_post_type = Transfers_Extra_Items_Post_Type::get_instance();
  232. $transfers_extra_items_post_type->init();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement