/**
  * 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;
     }
 }
示例#2
0
/**
 * 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);
 }
示例#4
0
				<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 
示例#5
0
		<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 
    }
示例#7
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 
        }
    }
示例#8
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) {
         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);
         }
     }
 }
示例#9
0
			<?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);
示例#10
0
文件: page.php 项目: wp-papi/papi
/**
 * 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;
}