module-post-type-features.php
3 months ago
module-post-type-fields.php
3 years ago
module-post-type-upgrades.php
3 years ago
module-post-type.php
3 months ago
module-post-type-features.php
366 lines
| 1 | <?php |
| 2 | |
| 3 | if(!defined('ABSPATH')){ |
| 4 | exit; |
| 5 | } |
| 6 | |
| 7 | |
| 8 | if(!class_exists('acfe_module_post_type_features')): |
| 9 | |
| 10 | class acfe_module_post_type_features{ |
| 11 | |
| 12 | /** |
| 13 | * construct |
| 14 | */ |
| 15 | function __construct(){ |
| 16 | |
| 17 | add_action('admin_footer-edit.php', array($this, 'admin_footer')); |
| 18 | add_action('pre_get_posts', array($this, 'admin_archive_posts'), 9); // use 9 to let developers use 10 to override |
| 19 | add_filter('edit_posts_per_page', array($this, 'admin_archive_ppp'), 10, 2); |
| 20 | add_action('pre_get_posts', array($this, 'front_archive_posts'), 9); // use 9 to let developers use 10 to override |
| 21 | add_filter('template_include', array($this, 'front_template'), 999); |
| 22 | add_filter('post_updated_messages', array($this, 'post_updated_messages')); |
| 23 | add_filter('enter_title_here', array($this, 'enter_title_here'), 10, 2); |
| 24 | |
| 25 | } |
| 26 | |
| 27 | |
| 28 | /** |
| 29 | * admin_footer |
| 30 | * |
| 31 | * admin_footer-edit.php |
| 32 | */ |
| 33 | function admin_footer(){ |
| 34 | |
| 35 | // verify permissions |
| 36 | if(!acf_current_user_can_admin()){ |
| 37 | return; |
| 38 | } |
| 39 | |
| 40 | // get current post type |
| 41 | global $typenow; |
| 42 | if(!$typenow){ |
| 43 | return; |
| 44 | } |
| 45 | |
| 46 | // get post type object |
| 47 | $post_type_object = get_post_type_object($typenow); |
| 48 | |
| 49 | // check if it's a post type managed by acfe |
| 50 | if(!isset($post_type_object->acfe_archive_ppp)){ |
| 51 | return; |
| 52 | } |
| 53 | |
| 54 | // get item |
| 55 | $item = acfe_get_module('post_type')->get_item($typenow, 'db'); |
| 56 | if(!$item){ |
| 57 | return; |
| 58 | } |
| 59 | |
| 60 | ?> |
| 61 | <script type="text/html" id="tmpl-acfe-edit-module"> |
| 62 | <a href="<?php echo admin_url("post.php?post={$item['ID']}&action=edit"); ?>" class="page-title-action acfe-edit-module-button"><span class="dashicons dashicons-admin-generic"></span></a> |
| 63 | </script> |
| 64 | <script type="text/javascript"> |
| 65 | (function($){ |
| 66 | $('.wrap .page-title-action').before($('#tmpl-acfe-edit-module').html()); |
| 67 | })(jQuery); |
| 68 | </script> |
| 69 | <?php |
| 70 | |
| 71 | } |
| 72 | |
| 73 | |
| 74 | /** |
| 75 | * admin_archive_posts |
| 76 | * |
| 77 | * pre_get_posts |
| 78 | * |
| 79 | * @param $query |
| 80 | */ |
| 81 | function admin_archive_posts($query){ |
| 82 | |
| 83 | global $pagenow; |
| 84 | |
| 85 | if(!is_admin() || !$query->is_main_query() || $pagenow !== 'edit.php'){ |
| 86 | return; |
| 87 | } |
| 88 | |
| 89 | $post_type = $query->get('post_type'); |
| 90 | $object = get_post_type_object($post_type); |
| 91 | |
| 92 | $admin_order_by = acfe_get($object, 'acfe_admin_orderby'); |
| 93 | $admin_order = acfe_get($object, 'acfe_admin_order'); |
| 94 | $admin_meta_key = acfe_get($object, 'acfe_admin_meta_key'); |
| 95 | $admin_meta_type = acfe_get($object, 'acfe_admin_meta_type'); |
| 96 | |
| 97 | if($admin_order_by && !acfe_maybe_get_REQUEST('orderby')){ |
| 98 | $query->set('orderby', $admin_order_by); |
| 99 | } |
| 100 | |
| 101 | if($admin_order && !acfe_maybe_get_REQUEST('order')){ |
| 102 | $query->set('order', $admin_order); |
| 103 | } |
| 104 | |
| 105 | if($admin_meta_key && !acfe_maybe_get_REQUEST('meta_key')){ |
| 106 | $query->set('meta_key', $admin_meta_key); |
| 107 | } |
| 108 | |
| 109 | if($admin_meta_type && !acfe_maybe_get_REQUEST('meta_type')){ |
| 110 | $query->set('meta_type', $admin_meta_type); |
| 111 | } |
| 112 | |
| 113 | } |
| 114 | |
| 115 | |
| 116 | /** |
| 117 | * admin_archive_ppp |
| 118 | * |
| 119 | * edit_posts_per_page |
| 120 | * |
| 121 | * @param $ppp |
| 122 | * @param $post_type |
| 123 | * |
| 124 | * @return mixed |
| 125 | */ |
| 126 | function admin_archive_ppp($ppp, $post_type){ |
| 127 | |
| 128 | global $pagenow; |
| 129 | if($pagenow !== 'edit.php'){ |
| 130 | return $ppp; |
| 131 | } |
| 132 | |
| 133 | $object = get_post_type_object($post_type); |
| 134 | $admin_ppp = acfe_get($object, 'acfe_admin_ppp'); |
| 135 | $user_ppp = get_user_option("edit_{$post_type}_per_page"); |
| 136 | |
| 137 | if(!$admin_ppp || !empty($user_ppp)){ |
| 138 | return $ppp; |
| 139 | } |
| 140 | |
| 141 | return $admin_ppp; |
| 142 | |
| 143 | } |
| 144 | |
| 145 | |
| 146 | /** |
| 147 | * front_archive_posts |
| 148 | * |
| 149 | * pre_get_posts:9 |
| 150 | * |
| 151 | * @param $query |
| 152 | */ |
| 153 | function front_archive_posts($query){ |
| 154 | |
| 155 | if(is_admin() || !$query->is_main_query() || !is_post_type_archive()){ |
| 156 | return; |
| 157 | } |
| 158 | |
| 159 | $post_type = $query->get('post_type'); |
| 160 | $object = get_post_type_object($post_type); |
| 161 | |
| 162 | $archive_ppp = acfe_get($object, 'acfe_archive_ppp'); |
| 163 | $archive_orderby = acfe_get($object, 'acfe_archive_orderby'); |
| 164 | $archive_order = acfe_get($object, 'acfe_archive_order'); |
| 165 | $archive_meta_key = acfe_get($object, 'acfe_archive_meta_key'); |
| 166 | $archive_meta_type = acfe_get($object, 'acfe_archive_meta_type'); |
| 167 | |
| 168 | if($archive_ppp){ |
| 169 | $query->set('posts_per_page', $archive_ppp); |
| 170 | } |
| 171 | |
| 172 | if($archive_orderby){ |
| 173 | $query->set('orderby', $archive_orderby); |
| 174 | } |
| 175 | |
| 176 | if($archive_order){ |
| 177 | $query->set('order', $archive_order); |
| 178 | } |
| 179 | |
| 180 | if($archive_meta_key){ |
| 181 | $query->set('meta_key', $archive_meta_key); |
| 182 | } |
| 183 | |
| 184 | if($archive_meta_type){ |
| 185 | $query->set('meta_type', $archive_meta_type); |
| 186 | } |
| 187 | |
| 188 | } |
| 189 | |
| 190 | |
| 191 | /** |
| 192 | * front_template |
| 193 | * |
| 194 | * template_include |
| 195 | * |
| 196 | * @param $template |
| 197 | * |
| 198 | * @return mixed|string |
| 199 | */ |
| 200 | function front_template($template){ |
| 201 | |
| 202 | if(!is_single() && !is_post_type_archive() && !is_home()){ |
| 203 | return $template; |
| 204 | } |
| 205 | |
| 206 | // Get_query_var |
| 207 | $query_var = get_query_var('post_type', false); |
| 208 | |
| 209 | if(is_array($query_var) && !empty($query_var)){ |
| 210 | $query_var = $query_var[0]; |
| 211 | } |
| 212 | |
| 213 | foreach(get_post_types(array(), 'objects') as $post_type){ |
| 214 | |
| 215 | // Get_query_var check |
| 216 | $is_query_var = $query_var && $query_var === $post_type->name; |
| 217 | |
| 218 | // Get_post_type check |
| 219 | $get_post_type = get_post_type() === $post_type->name; |
| 220 | |
| 221 | // Acfe_archive_template |
| 222 | $acfe_archive_template = isset($post_type->acfe_archive_template) && !empty($post_type->acfe_archive_template); |
| 223 | |
| 224 | // Acfe_archive_template |
| 225 | $acfe_single_template = isset($post_type->acfe_single_template) && !empty($post_type->acfe_single_template); |
| 226 | |
| 227 | // Global check |
| 228 | if(!$get_post_type || !$is_query_var || (!$acfe_archive_template && !$acfe_single_template)){ |
| 229 | continue; |
| 230 | } |
| 231 | |
| 232 | $rule = array(); |
| 233 | $rule['is_archive'] = is_post_type_archive($post_type->name); |
| 234 | $rule['has_archive'] = $post_type->has_archive; |
| 235 | $rule['is_single'] = is_singular($post_type->name); |
| 236 | |
| 237 | // Post Exception |
| 238 | if($post_type->name === 'post'){ |
| 239 | $rule['is_archive'] = is_home(); |
| 240 | $rule['has_archive'] = true; |
| 241 | } |
| 242 | |
| 243 | // Archive |
| 244 | if($rule['has_archive'] && $rule['is_archive'] && $acfe_archive_template && ($locate = locate_template(array($post_type->acfe_archive_template)))){ |
| 245 | return $locate; |
| 246 | } |
| 247 | |
| 248 | // Single |
| 249 | elseif($rule['is_single'] && $acfe_single_template && ($locate = locate_template(array($post_type->acfe_single_template)))){ |
| 250 | return $locate; |
| 251 | } |
| 252 | |
| 253 | } |
| 254 | |
| 255 | return $template; |
| 256 | |
| 257 | } |
| 258 | |
| 259 | |
| 260 | /** |
| 261 | * post_updated_messages |
| 262 | * |
| 263 | * post_updated_messages |
| 264 | * |
| 265 | * @param $messages |
| 266 | * |
| 267 | * @return array|mixed |
| 268 | */ |
| 269 | function post_updated_messages($messages){ |
| 270 | |
| 271 | // globals |
| 272 | global $post_type, $post_type_object, $post; |
| 273 | |
| 274 | // post type not managed by acfe |
| 275 | if(!isset($post_type_object->acfe_archive_ppp)){ |
| 276 | return $messages; |
| 277 | } |
| 278 | |
| 279 | // vars |
| 280 | $viewable = is_post_type_viewable($post_type_object); |
| 281 | $preview_url = get_preview_post_link($post); |
| 282 | $permalink = get_permalink($post->ID); |
| 283 | if(!$permalink){ |
| 284 | $permalink = ''; |
| 285 | } |
| 286 | |
| 287 | // default links |
| 288 | $preview_post_link_html = ''; |
| 289 | $scheduled_post_link_html = ''; |
| 290 | $view_post_link_html = ''; |
| 291 | |
| 292 | if($viewable){ |
| 293 | |
| 294 | $view_item = __('View post'); |
| 295 | $preview_item = __('Preview post'); |
| 296 | |
| 297 | if(isset($post_type_object->labels->view_item)){ |
| 298 | $view_item = $post_type_object->labels->view_item; |
| 299 | $preview_item = $post_type_object->labels->view_item; |
| 300 | } |
| 301 | |
| 302 | $preview_post_link_html = sprintf(' <a target="_blank" href="%1$s">%2$s</a>', esc_url($preview_url), $preview_item); |
| 303 | $scheduled_post_link_html = sprintf(' <a target="_blank" href="%1$s">%2$s</a>', esc_url($permalink), $preview_item); |
| 304 | $view_post_link_html = sprintf(' <a href="%1$s">%2$s</a>', esc_url($permalink), $view_item); |
| 305 | |
| 306 | } |
| 307 | |
| 308 | $scheduled_date = sprintf( |
| 309 | __('%1$s at %2$s'), |
| 310 | date_i18n(_x('M j, Y', 'publish box date format'), strtotime($post->post_date)), |
| 311 | date_i18n(_x('H:i', 'publish box time format'), strtotime($post->post_date)) |
| 312 | ); |
| 313 | |
| 314 | if(isset($post_type_object->labels->item_updated)){ |
| 315 | $messages[ $post_type ][1] = $post_type_object->labels->item_updated . $view_post_link_html; |
| 316 | $messages[ $post_type ][4] = $post_type_object->labels->item_updated; |
| 317 | $messages[ $post_type ][7] = $post_type_object->labels->item_updated; |
| 318 | $messages[ $post_type ][8] = $post_type_object->labels->item_updated . $preview_post_link_html; |
| 319 | $messages[ $post_type ][10] = $post_type_object->labels->item_updated . $preview_post_link_html; |
| 320 | } |
| 321 | |
| 322 | if(isset($post_type_object->labels->item_published)){ |
| 323 | $messages[ $post_type ][6] = $post_type_object->labels->item_published . $view_post_link_html; |
| 324 | } |
| 325 | |
| 326 | if(isset($post_type_object->labels->item_scheduled)){ |
| 327 | $messages[ $post_type ][9] = $post_type_object->labels->item_scheduled . ' <strong>' . $scheduled_date . '</strong>' . $scheduled_post_link_html; |
| 328 | } |
| 329 | |
| 330 | // return |
| 331 | return $messages; |
| 332 | |
| 333 | } |
| 334 | |
| 335 | |
| 336 | /** |
| 337 | * enter_title_here |
| 338 | * |
| 339 | * enter_title_here |
| 340 | * |
| 341 | * @param $placeholder |
| 342 | * @param $post |
| 343 | * |
| 344 | * @return mixed |
| 345 | */ |
| 346 | function enter_title_here($placeholder, $post){ |
| 347 | |
| 348 | if(isset($post->post_type)){ |
| 349 | |
| 350 | $post_type_obj = get_post_type_object($post->post_type); |
| 351 | |
| 352 | if(isset($post_type_obj->labels->enter_title)){ |
| 353 | return $post_type_obj->labels->enter_title; |
| 354 | } |
| 355 | |
| 356 | } |
| 357 | |
| 358 | return $placeholder; |
| 359 | |
| 360 | } |
| 361 | |
| 362 | } |
| 363 | |
| 364 | new acfe_module_post_type_features(); |
| 365 | |
| 366 | endif; |