Exemplo n.º 1
0
 /**
  * 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) {
         // @codeCoverageIgnoreStart
         if (!post_type_exists($post_type)) {
             continue;
         }
         // @codeCoverageIgnoreEnd
         if ($post_type === 'post') {
             $edit_url = 'edit.php';
         } else {
             $edit_url = 'edit.php?post_type=' . $post_type;
         }
         if (!isset($submenu[$edit_url], $submenu[$edit_url][10], $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($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);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * Setup admin entry.
  */
 public function setup()
 {
     // Preload all page types.
     foreach (papi_get_post_types() as $post_type) {
         papi_get_all_entry_types(['args' => $post_type]);
     }
     return !in_array($this->post_type, ['revision', 'nav_menu_item'], true);
 }
Exemplo n.º 3
0
 /**
  * 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;
     }
 }
Exemplo n.º 4
0
    /**
     * 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 
        }
    }
Exemplo n.º 5
0
 /**
  * Setup REST API fields.
  */
 public function setup_fields()
 {
     if (!function_exists('register_rest_field')) {
         return;
     }
     $post_types = papi_get_post_types();
     foreach ($post_types as $post_type) {
         register_rest_field($post_type, 'page_type', ['get_callback' => [$this, 'get_page_type']]);
     }
 }