/** * Load post new action * Redirect to right url if no page type is set. */ public function load_post_new() { $request_uri = $_SERVER['REQUEST_URI']; $post_types = papi_get_post_types(); if (in_array($this->post_type, $post_types, true) && strpos($request_uri, 'page_type=') === false) { $parsed_url = parse_url($request_uri); $only_page_type = papi_filter_settings_only_page_type($this->post_type); $page_types = papi_get_all_page_types($this->post_type); $show_standard = false; if (count($page_types) === 1 && empty($only_page_type)) { $show_standard = $page_types[0]->standard_type; $show_standard = $show_standard ? papi_filter_settings_show_standard_page_type($this->post_type) : $show_standard; $only_page_type = $show_standard ? '' : $page_types[0]->get_id(); } // Check if we should show one post type or not and // create the right url for that. if (!empty($only_page_type) && !$show_standard) { $url = papi_get_page_new_url($only_page_type, false); } else { $page = 'page=papi-add-new-page,' . $this->post_type; if ($this->post_type !== 'post') { $page = '&' . $page; } $url = 'edit.php?' . $parsed_url['query'] . $page; } wp_safe_redirect($url); is_admin() && exit; } }
/** * Check if option type exists. * * @param string $id * * @return bool */ function papi_option_type_exists($id) { $exists = false; $option_types = papi_get_all_page_types(false, null, true); foreach ($option_types as $option_type) { if ($option_type->match_id($id)) { $exists = true; break; } } return $exists; }
/** * Load property from page type. * * @param string $slug * @param string $child_slug * * @return object */ public function get_property($slug, $child_slug = '') { $page_type_id = str_replace('papi/', '', papi_get_qs('page')); if (empty($page_type_id)) { $page_types = papi_get_all_page_types(false, null, true); $property = null; foreach ($page_types as $index => $page_type) { if ($property = $page_type->get_property($slug, $child_slug)) { break; } } if (is_null($property)) { return; } return $property; } $page_type = papi_get_page_type_by_id($page_type_id); if ($page_type instanceof Papi_Option_Type === false) { return; } return $page_type->get_property($slug, $child_slug); }
<strong><?php _e('Template', 'papi'); ?> </strong> </th> <th> <strong><?php _e('Page Count', 'papi'); ?> </strong> </th> </tr> </thead> <tbody> <?php $page_types = papi_get_all_page_types(true); foreach ($page_types as $key => $page_type) { if (!papi_is_page_type($page_type)) { continue; } ?> <tr> <td> <a href="<?php echo sanitize_text_field($_SERVER['REQUEST_URI']); ?> &view=management-page-type&page_type=<?php echo esc_attr($page_type->get_id()); ?> "> <?php
<label class="screen-reader-text" for="add-new-page-search"> <?php echo esc_html($post_type->labels->search_items); ?> </label> <input placeholder="<?php echo esc_html($post_type->labels->search_items); ?> ..." type="search" name="add-new-page-search" id="add-new-page-search" class="papi-search"> </h1> <div class="papi-box-list"> <?php $parent_page_type = papi_get_entry_type_by_id(papi_get_entry_type_id()); $page_types = papi_get_all_page_types($post_type_name); $show_standard = papi_filter_settings_show_standard_page_type($post_type_name); if ($parent_page_type instanceof Papi_Page_Type) { $child_types = $parent_page_type->get_child_types(); $page_types = empty($child_types) ? $page_types : $child_types; if (!$show_standard) { $show_standard = $parent_page_type->standard_type; } } if ($show_standard) { $id = sprintf('papi-standard-%s-type', $post_type_name); $page_type = new Papi_Page_Type($id); $page_type->id = $id; $page_type->name = papi_filter_settings_standard_page_type_name($post_type_name); $page_type->description = papi_filter_settings_standard_page_type_description($post_type_name); $page_type->thumbnail = papi_filter_settings_standard_page_type_thumbnail($post_type_name);
/** * Render metabox. */ public function metabox() { $post_type = papi_get_post_type(); $page_type = papi_get_entry_type_by_id(papi_get_page_type_id()); $page_type_key = papi_get_page_type_key('switch'); $page_types = papi_get_all_page_types($post_type); // Don't do anything without any page types. if (empty($page_type) || empty($page_types)) { return; } ?> <div class="misc-pub-section misc-pub-section-last papi-page-type-switcher"> <label for="<?php echo esc_attr($page_type_key); ?> "><?php esc_html_e('Page Type:', 'papi'); ?> </label> <span><?php echo esc_html($page_type->name); ?> </span> <?php if (papi_current_user_is_allowed($page_type->capabilities) && $page_type->switcher) { ?> <a href="#" id="papi-page-type-switcher-edit" class="hide-if-no-js"><?php esc_html_e('Edit', 'papi'); ?> </a> <div> <select name="<?php echo esc_attr($page_type_key); ?> " id="<?php echo esc_attr($page_type_key); ?> "> <?php foreach ($page_types as $pt) { if (!papi_current_user_is_allowed($pt->capabilities)) { continue; } papi_render_html_tag('option', ['selected' => $page_type->match_id($pt->get_id()), 'value' => esc_attr($pt->get_id()), esc_html($pt->name)]); } ?> </select> <a href="#" id="papi-page-type-switcher-save" class="hide-if-no-js button"><?php esc_html_e('OK', 'papi'); ?> </a> <a href="#" id="papi-page-type-switcher-cancel" class="hide-if-no-js"><?php esc_html_e('Cancel', 'papi'); ?> </a> </div> <?php } ?> </div> <?php }
/** * Filter page types in post type list. */ public function restrict_page_types() { $post_types = papi_get_post_types(); if (in_array($this->post_type, $post_types)) { $page_types = papi_get_all_page_types($this->post_type); $page_types = array_map(function ($page_type) { return ['name' => $page_type->name, 'value' => $page_type->get_id()]; }, $page_types); // Add the standard page that isn't a real page type. if (papi_filter_settings_show_standard_page_type_in_filter($this->post_type)) { $page_types[] = ['name' => papi_filter_settings_standard_page_name($this->post_type), 'value' => 'papi-standard-page']; } usort($page_types, function ($a, $b) { return strcmp(strtolower($a['name']), strtolower($b['name'])); }); ?> <select name="page_type" class="postform"> <option value="0" selected><?php _e('All types', 'papi'); ?> </option> <?php foreach ($page_types as $page_type) { printf('<option value="%s" %s>%s</option>', $page_type['value'], papi_get_qs('page_type') === $page_type['value'] ? ' selected' : '', $page_type['name']); } ?> </select> <?php } }
/** * Setup menu items for real post types. */ public function post_types_menu() { global $submenu; $post_types = papi_get_post_types(); foreach ($post_types as $post_type) { if (!post_type_exists($post_type)) { continue; } if ($post_type === 'post') { $edit_url = 'edit.php'; } else { $edit_url = 'edit.php?post_type=' . $post_type; } if (!isset($submenu[$edit_url]) || !isset($submenu[$edit_url][10]) || !isset($submenu[$edit_url][10][2])) { $post_type_object = get_post_type_object($post_type); if (!$post_type_object->show_in_menu) { $submenu[$edit_url] = [10 => [__('Add New', 'papi'), 'edit_posts', 'post-new.php']]; } else { continue; } } $only_page_type = papi_filter_settings_only_page_type($post_type); $page_types = papi_get_all_page_types(false, $post_type); $show_standard = false; // Don't change menu item when no page types is found. // @codeCoverageIgnoreStart if (empty($page_types)) { continue; } // @codeCoverageIgnoreEnd if (count($page_types) === 1 && empty($only_page_type)) { $show_standard = $page_types[0]->standard_type; $show_standard = $show_standard ? papi_filter_settings_show_standard_page_type($post_type) : $show_standard; $only_page_type = $show_standard ? '' : $page_types[0]->get_id(); } if (!empty($only_page_type) && !$show_standard) { $submenu[$edit_url][10][2] = papi_get_page_new_url($only_page_type, false, $post_type, ['action', 'message', 'page_type', 'post', 'post_type']); } else { $page = 'papi-add-new-page,' . $post_type; $start = strpos($edit_url, 'post_type') === false ? '?' : '&'; $submenu[$edit_url][10][2] = sprintf('%s%spage=%s', $edit_url, $start, $page); // Add menu item. add_menu_page(__('Add New', 'papi'), __('Add New', 'papi'), 'read', $page, [$this, 'render_view']); // Remove the menu item so it's hidden. remove_menu_page($page); } } }
<?php echo $post_type->labels->search_items; ?> </label> <input placeholder="<?php echo $post_type->labels->search_items; ?> ..." type="search" name="add-new-page-search" id="add-new-page-search" class="papi-search"> </h2> <div class="papi-box-list"> <?php $parent_page_type = papi_get_page_type_by_id(papi_get_page_type_id()); $page_types = papi_get_all_page_types(); $show_standard = papi_filter_settings_show_standard_page_type($post_type_name); if (papi_is_page_type($parent_page_type)) { $child_types = $parent_page_type->get_child_types(); $page_types = empty($child_types) ? $page_types : $child_types; if (!$show_standard) { $show_standard = $parent_page_type->standard_type; } } if ($show_standard) { $id = sprintf('papi-standard-%s-type', $post_type_name); $page_type = new Papi_Page_Type($id); $page_type->id = $id; $page_type->name = papi_filter_settings_standard_page_name($post_type_name); $page_type->description = papi_filter_settings_standard_page_description($post_type_name); $page_type->thumbnail = papi_filter_settings_standard_page_thumbnail($post_type_name);
/** * Load the entry type id on a post types. * * @param string $entry_type_id * * @return string */ function papi_load_page_type_id($entry_type_id = '') { $key = papi_get_page_type_key(); $post_id = papi_get_post_id(); $post_type = papi_get_post_type($post_id); // Try to load the entry type id from only page type filter. if (empty($entry_type_id)) { $entry_type_id = papi_filter_settings_only_page_type($post_type); } // If we have a post id we can load the entry type id from the post. if (empty($entry_type_id) && $post_id > 0) { $meta_value = get_post_meta($post_id, $key, true); $entry_type_id = empty($meta_value) ? '' : $meta_value; } // Try to fetch the entry type id from `page_type` query string. if (empty($entry_type_id)) { $entry_type_id = papi_get_qs('page_type'); } // Load right entry type from the parent post id. if (empty($entry_type_id)) { $meta_value = get_post_meta(papi_get_parent_post_id(), $key, true); $entry_type_id = empty($meta_value) ? '' : $meta_value; } // Try to load the entry type from all page types and check // if only one exists of that post type. // // The same as only page type filter but without the filter. if (empty($entry_type_id)) { $key = sprintf('entry_type_id.post_type.%s', $post_type); if (papi()->exists($key)) { return papi()->make($key); } $entries = papi_get_all_page_types($post_type); if (count($entries) === 1) { $entry_type_id = $entries[0]->get_id(); papi()->bind($key, $entry_type_id); } } return $entry_type_id; }