WP_Post_Type{} WP 4.6.0

Клас ядра, який відповідає всім типи записів WordPress.

Об’єкти, які створюються цим класом, зберігаються в глобальному масиві $wp_post_types під індексом – ярлик типу запису.

Цей клас використовується через обгортку register_post_type() і внутрішнім, тобто. безпосередньо його використовувати не потрібно, крім випадків, коли ви добре розумієтеся.

Основа для:
register_post_type()

Хуки із класу
$post_type = new WP_Post_Type( $post_type, $args ); // use methods $post_type->add_supports(); $post_type->add_rewrite_rules(); // ...
$post_type
(рядок) (обов’язковий)

Назва типу запису (максимум 20 символів). Може містити лише малі символи, числа, _або -: a-z0-9_-– визначається роботою sanitize_key() .

Зарезервовані назви для типів постів . Не можна використовувати наступні назви для нових типів постів, оскільки вони використовуються WordPress і ваш код конфліктуватиме з поточним кодом або функціями WordPress:

post
page
attachment
revision
nav_menu_item
custom_css
customize_changeset
action
author
order
theme
$args
(масив)
Масив аргументів. Список параметрів, що підтримуються, дивіться в описі функції
register_post_type() .


За замовчуванням: array() (предустановки)

Приклади

1

#1 Демонстрація реєстрації типу запису

$post_type = new WP_Post_Type( $post_type, $args );

$wp_post_types[ $post_type ] = $post_type;

$post_type->add_supports();
$post_type->add_rewrite_rules();
$post_type->register_meta_boxes();

$post_type->add_hooks();
$post_type->register_taxonomies();

Більш повний і актуальніший приклад дивіться в коді функції register_post_type() .

Властивості

Опис кожної властивості читайте у register_post_type()

Кожна з властивостей вказується в параметрі $args , крім властивості $name – вона вказується у параметрі $post_type .

  • $name (рядок) – Назва (ярлик) типу запису.
  • $label (рядок)
  • $labels (об’єкт)
  • $description (рядок)
  • $public (логічний)
  • $hierarchical (логічний)
  • $exclude_from_search (логічний)
  • $publicly_queryable (логічний)
  • $show_ui (логічний)
  • $show_in_menu (логічний)
  • $show_in_nav_menus (логічний)
  • $show_in_admin_bar (логічний)
  • $menu_position (рядок)
  • $menu_icon (рядок)
  • $capability_type (рядок)
  • $map_meta_cap (логічний)
  • $register_meta_box_cb (рядок)
  • $taxonomies (рядок)
  • $has_archive (логічний)
  • $query_var (рядок)
  • $can_export (логічний)
  • $delete_with_user (логічний)
  • $_builtin (логічний)
  • $_edit_link (рядок)
  • $cap (рядок)
  • $rewrite (рядок)
  • $supports (рядок)

Методи

__construct( $post_type, $args = array() )
(public)

Конструктор. Встановлює властивості об’єкта з переданих $args параметрів. Об’єднує стандартні параметри зі встановленими параметрами. Register_post_type()

  • $post_type (рядок)
    Ярлик типу запису.

  • $args (рядок/масив)
    Параметри реєстрації типу запису.
set_props( $args )
(public)

Встановлює властивості об’єкта з переданих $args параметрів.

  • $args (рядок/масив)
    Параметри реєстрації типу запису.
add_supports()
(public)
Встановлює елементи (метабокси на сторінці редагування), які підтримуються типом запису.
add_rewrite_rules()
(public)

Додає правила перезапису для цього типу запису.

Використовує глобальні змінні:

  • $wp_rewrite – Об’єкт WP_Rewrite – правила перезапису.
  • $wp – WP об’єкт – поточне середовище (запит) WP.
register_meta_boxes()
(public)
Реєструє метабокси, якщо вказано довільну функцію зворотного виклику.
add_hooks()
(public)
Додає хуки, пов’язані типом запису.
register_taxonomies()
(public)
Додає таксономію типу запису. Реєструвати таксономію потрібно окремо.
remove_supports()
(public)

Видаляє властивості, що підтримуються типом запису.

Використовує глобальний масив $_wp_post_type_features .

remove_rewrite_rules()
(public)

Видаляє правила перезапису, структури тощо.

Використовує глобальні змінні:

  • $wp_rewrite – Об’єкт WP_Rewrite – правила перезапису.
  • $wp – WP об’єкт – поточне середовище (запит) WP.
  • $post_type_meta_caps – Використовується для видалення мета можливостей.
unregister_meta_boxes()
(public)
Видаляє метабокси типу запису, якщо вказана довільна функція зворотного виклику.
unregister_taxonomies()
(public)
Видаляє тип запису з усіх таксономій.
remove_hooks()
(public)
Видаляє хуки, пов’язані з типом запису.

нотатки

список змін

З версії 4.6.0Введено.

Код WP_Post_Type{} WP 6.0.2

final class WP_Post_Type {
	/**
	 * Post type key.
	 *
	 * @ Since 4.6.0
	 * @var string $name
	 */
	public $name;

	/**
	 * Name of the post typ shown in the menu. Зазвичай plural.
	 *
	 * @ Since 4.6.0
	 * @var string $label
	 */
	public $label;

	/**
	 * Labels object for this post type.
	 *
	 * Якщо не встановлено, post labels inherited for non-hierarchical types
	 * and page labels for hierarchical ones.
	 *
	 * @see get_post_type_labels()
	 *
	 * @ Since 4.6.0
	 * @var stdClass $labels
	 */
	public $labels;

	/**
	 * Default labels.
	 *
	 * @ Since 6.0.0
	 * @var (string|null)[][] $default_labels
	 */
	protected static $default_labels = array();

	/**
	 * A short descriptive summary of what the post type is.
	 *
	 * Default empty.
	 *
	 * @ Since 4.6.0
	 * @var string $description
	 */
	public $description = '';

	/**
	 * Який post-type is intended for use publicly either via the admin interface or by front-end users.
	 *
	 * While the default settings of $exclude_from_search, $publicly_queryable, $show_ui, and $show_in_nav_menus
	 * Вони внесені з громадськості, всі вони не мають на меті цих відносин і керуванням дуже специфічним наміром.
	 *
	 * Default false.
	 *
	 * @ Since 4.6.0
	 * @var bool $public
	 */
	public $public = false;

	/**
	 *Якщо цей тип типу є hierarchical (eg page).
	 *
	 * Default false.
	 *
	 * @ Since 4.6.0
	 * @var bool $hierarchical
	 */
	public $hierarchical = false;

	/**
	 * Whether to exclude posts з цією post type from front end search
	 * results.
	 *
	 * Default is the opposite value of $public.
	 *
	 * @ Since 4.6.0
	 * @var bool $exclude_from_search
	 */
	public $exclude_from_search = null;

	/**
	 * Всі інші вимоги можуть бути виконані на front end for the post type як частина `parse_request()`.
	 *
	 * Endpoints would include:
	 *
	 * - `?post_type={post_type_key}`
	 * - `?{post_type_key}={single_post_slug}`
	 * - `?{post_type_query_var}={single_post_slug}`
	 *
	 * Default is the value of $public.
	 *
	 * @ Since 4.6.0
	 * @var bool $publicly_queryable
	 */
	public $publicly_queryable = null;

	/**
	 * Який генерує і дозволяє UI для управління цим повідомленням типу в admin.
	 *
	 * Default is the value of $public.
	 *
	 * @ Since 4.6.0
	 * @var bool $show_ui
	 */
	public $ show_ui = null;

	/**
	 * Where to show the post type в admin menu.
	 *
	 * To work, $show_ui must be true. Якщо true, то пошти типу є встановленим в його власному верхньому стилі меню. If false, no menu is
	 * Shown. Якщо string of existing top level menu ('tools.php' or 'edit.php?post_type=page', for example), the
	 * Post type will be placed as a sub-menu of that.
	 *
	 * Default is the value of $show_ui.
	 *
	 * @ Since 4.6.0
	 * @var bool|string $show_in_menu
	 */
	public $ show_in_menu = null;

	/**
	 * Makes this post type available for selection in navigation menus.
	 *
	 * Default is the value $public.
	 *
	 * @ Since 4.6.0
	 * @var bool $show_in_nav_menus
	 */
	public $ show_in_nav_menus = null;

	/**
	 * Makes this post type available via the admin bar.
	 *
	 * Default is the value of $show_in_menu.
	 *
	 * @ Since 4.6.0
	 * @var bool $show_in_admin_bar
	 */
	public $show_in_admin_bar = null;

	/**
	 * Позиція в меню, щоб поставити тип типу, слід appear.
	 *
	 * To work, $show_in_menu must be true. Default null (at the bottom).
	 *
	 * @ Since 4.6.0
	 * @var int $menu_position
	 */
	public $menu_position = null;

	/**
	 * The URL або reference to the icon to be used for this menu.
	 *
	 * Pass a base64-encoded SVG використовуючи data URI, яка буде забарвлена ​​до виконання кольорової системи.
	 * Це повинно бути з 'data:image/svg+xml;base64,'. Pass the name of a Dashicons helper class
	 * use a font icon, eg 'dashicons-chart-pie'. Pass 'none' to leave div.wp-menu-image empty
	 * so an icon can be added via CSS.
	 *
	 * Defaults to use the posts icon.
	 *
	 * @ Since 4.6.0
	 * @var string $menu_icon
	 */
	public $menu_icon = null;

	/**
	 * string для використання для будівництва read, edit, і delete capabilities.
	 *
	 * May be passed as an array to allow for alternative plurals when using
	 * Цей argument є основою для розподілу можливостей, eg
	 * array ( 'story', 'stories'). Default 'post'.
	 *
	 * @ Since 4.6.0
	 * @var string $capability_type
	 */
	public $capability_type = 'post';

	/**
	 * Для використання міжнародної деталі meta capability handling.
	 *
	 * Default false.
	 *
	 * @ Since 4.6.0
	 * @var bool $map_meta_cap
	 */
	public $map_meta_cap = false;

	/**
	 * Використовуйте callback функцію, що вказує на meta boxes для edit form.
	 *
	 * Do `remove_meta_box()` and `add_meta_box()` calls in the callback. Default null.
	 *
	 * @ Since 4.6.0
	 * @var callable $register_meta_box_cb
	 */
	public $register_meta_box_cb = null;

	/**
	 * На array taxonomy identifiers, що буде registered для post-type.
	 *
	 * Taxonomies може бути зареєстрований останнім разом з `register_taxonomy()` або `register_taxonomy_for_object_type()`.
	 *
	 * Default empty array.
	 *
	 * @ Since 4.6.0
	 * @var array $taxonomies
	 */
	$taxonomies = array();

	/**
	 * Всі вони повинні бути за допомогою типу архівів, або якщо string, архіву slug для використання.
	 *
	 * Will generate the property rewrite rules if $rewrite is enabled. Default false.
	 *
	 * @ Since 4.6.0
	 * @var bool|string $has_archive
	 */
	public $has_archive = false;

	/**
	 * Sets query_var key for this post type.
	 *
	 * Defaults to $post_type key. Якщо false, як тип типу не можна loaded at `?{query_var}={post_slug}`.
	 * Якщо specified as string, the query `?{query_var_string}={post_slug}` will be valid.
	 *
	 * @ Since 4.6.0
	 * @var string|bool $query_var
	 */
	$query_var;

	/**
	 * Щодо того, щоб цей тип подання до exported.
	 *
	 * Default true.
	 *
	 * @ Since 4.6.0
	 * @var bool $can_export
	 */
	public $can_export = true;

	/**
	 * Вже до delete posts of this type when deleting a user.
	 *
	 * - Якщо вірно, повідомлення цього типу будуть розповсюджуватися до користувача, щоб перейти до Trash, коли його користується.
	 * - Якщо false, повідомлення з цього типу, що розповсюджуються до користувача, будуть *неможуть бути перенесені або вилучені.
	 * - Якщо немає налаштувань (показання), posts є trashed if post type supports the 'author' feature.
	 * Іншівихідні повідомлення не можуть бути розірвані або вилучені.
	 *
	 * Default null.
	 *
	 * @ Since 4.6.0
	 * @var bool $delete_with_user
	 */
	public $delete_with_user = null;

	/**
	 * Array of blocks use as the default initial state for an editor session.
	 *
	 * Всі елементи повинні бути на рівні розміщення блоку імені та опційних атрибутів.
	 *
	 * Default empty array.
	 *
	 * @link https://developer.wordpress.org/block-editor/developers/block-api/block-templates/
	 *
	 * @ Since 5.0.0
	 * @var array $template
	 */
	$template = array();

	/**
	 * Якщо цей блок мітки повинен бути зафіксований, якщо $template is set.
	 *
	 * - Якщо натиснути на "всі", користувачі можуть бути необхідними для створення нових блоків, переміщення наявних блоків
	 * and delete blocks.
	 * - Якщо натиснути 'insert', користувач має можливість перейти до існуючих блоків, але є неправильний до insert
	 * New blocks and delete blocks.
	 *
	 * Default false.
	 *
	 * @link https://developer.wordpress.org/block-editor/developers/block-api/block-templates/
	 *
	 * @ Since 5.0.0
	 * @var string|false $template_lock
	 */
	public $template_lock = false;

	/**
	 * Який цей тип типу є природним або "будівельний" post_type.
	 *
	 * Default false.
	 *
	 * @ Since 4.6.0
	 * @var bool $_builtin
	 */
	public $_builtin = false;

	/**
	 * URL сегмент для використання для edit link of this post type.
	 *
	 * Default 'post.php?post=%d'.
	 *
	 * @ Since 4.6.0
	 * @var string $_edit_link
	 */
	public $_edit_link = 'post.php?post=%d';

	/**
	 * Post type capabilities.
	 *
	 * @ Since 4.6.0
	 * @var stdClass $cap
	 */
	public $cap;

	/**
	 * Triggers handling of rewrites для цього post type.
	 *
	 * Defaults to true, using $post_type як slug.
	 *
	 * @ Since 4.6.0
	 * @var array|false $rewrite
	 */
	public $rewrite;

	/**
	 * The features supported by the post type.
	 *
	 * @ Since 4.6.0
	 * @var array|bool $supports
	 */
	public $supports;

	/**
	 * Який цей тип типу повинен бути appear в REST API.
	 *
	 * Default false. Якщо true, standard endpoints буде registered with
	 * respect to $rest_base and $rest_controller_class.
	 *
	 * @ Since 4.7.4
	 * @var bool $show_in_rest
	 */
	public $ show_in_rest;

	/**
	 * Військова cestа для цього типу Post's REST API endpoints.
	 *
	 * @ Since 4.7.4
	 * @var string|bool $rest_base
	 */
	public $rest_base;

	/**
	 * Namespace для цього post-type's REST API endpoints.
	 *
	 * @ Since 5.9.0
	 * @var string|bool $rest_namespace
	 */
	public $rest_namespace;

	/**
	 * Захисник для цього поштового типу REST API endpoints.
	 *
	 * Custom controllers must extend WP_REST_Controller.
	 *
	 * @ Since 4.7.4
	 * @var string|bool $rest_controller_class
	 */
	public $rest_controller_class;

	/**
	 * Установка регулятора для цього post-type's REST API endpoints.
	 *
	 * Lazily computed. Should be accessed using {@see WP_Post_Type::get_rest_controller()}.
	 *
	 * @ Since 5.3.0
	 * @var WP_REST_Controller $rest_controller
	 */
	public $rest_controller;

	/**
	 * Constructor.
	 *
	 * Виберіть register_post_type() функцію для отриманих arguments для `$args`.
	 *
	 * Will populate object properties from the provided arguments and assign other
	 * default properties based on that information.
	 *
	 * @ Since 4.6.0
	 *
	 * @see register_post_type()
	 *
	 * @param string $post_type Post type key.
	 * @param array|string $args Optional. Array або string arguments for registering a post type.
	 * Default empty array.
	 */
	public function __construct( $post_type, $args = array() ) {
		$this->name = $post_type;

		$this->set_props( $args );
	}

	/**
	 * Sets post type properties.
	 *
	 * Виберіть register_post_type() функцію для отриманих arguments для `$args`.
	 *
	 * @ Since 4.6.0
	 *
	 * @param array|string $args Array або string arguments для registering a post type.
	 */
	public function set_props( $args ) {
		$ args = wp_parse_args ($ args);

		/**
		 * Filters arguments для registering a post type.
		 *
		 * @ Since 4.4.0
		 *
		 * @param array $args Array of arguments for registering a post type.
		 * Натисніть на register_post_type() функцію для отриманих arguments.
		 * @param string $post_type Post type key.
		 */
		$args = apply_filters( 'register_post_type_args', $args, $this->name);

		$post_type = $this->name;

		/**
		 * Filters arguments for registering specific post type.
		 *
		 * The dynamic portion of filter name, `$post_type`, refers to the post type key.
		 *
		 * Possible hook names include:
		 *
		 * - `register_post_post_type_args`
		 * - `register_page_post_type_args`
		 *
		 * @ Since 6.0.0
		 *
		 * @param array $args Array of arguments for registering a post type.
		 * Натисніть на register_post_type() функцію для отриманих arguments.
		 * @param string $post_type Post type key.
		 */
		$args = apply_filters( "register_{$post_type}_post_type_args", $args, $this->name );

		$has_edit_link = ! empty( $args['_edit_link'] );

		// Args prefixed with underscore є для зовнішнього використання.
		$defaults = array(
			'labels' => array(),
			'description' => '',
			'public' => false,
			'hierarchical' => false,
			'exclude_from_search' => null,
			'publicly_queryable' => null,
			'show_ui' => null,
			'show_in_menu' => null,
			'show_in_nav_menus' => null,
			'show_in_admin_bar' => null,
			'menu_position' => null,
			'menu_icon' => null,
			'capability_type' => 'post',
			'capabilities' => array(),
			'map_meta_cap' => null,
			'supports' => array(),
			'register_meta_box_cb' => null,
			'taxonomies' => array(),
			'has_archive' => false,
			'rewrite' => true,
			'query_var' => true,
			'can_export' => true,
			'delete_with_user' => null,
			'show_in_rest' => false,
			'rest_base' => false,
			'rest_namespace' => false,
			'rest_controller_class' => false,
			'template' => array(),
			'template_lock' => false,
			'_builtin' => false,
			'_edit_link' => 'post.php?post=%d',
		);

		$ args = array_merge ($ defaults, $ args);

		$args['name'] = $this->name;

		// If not set, default to the setting for 'public'.
		if ( null === $args['publicly_queryable'] ) {
			$args['publicly_queryable'] = $args['public'];
		}

		// If not set, default to the setting for 'public'.
		if ( null === $args['show_ui'] ) {
			$args['show_ui'] = $args['public'];
		}

		// If not set, default rest_namespace для wp/v2 if show_in_rest is true.
		if ( false === $args['rest_namespace'] && ! empty( $args['show_in_rest'] ) ) {
			$args['rest_namespace'] = 'wp/v2';
		}

		// If not set, default to the setting for 'show_ui'.
		if ( null === $args['show_in_menu'] || ! $args['show_ui'] ) {
			$args['show_in_menu'] = $args['show_ui'];
		}

		// If not set, default to setting for 'show_in_menu'.
		if ( null === $args['show_in_admin_bar'] ) {
			$args['show_in_admin_bar'] = (bool) $args['show_in_menu'];
		}

		// If not set, default to the setting for 'public'.
		if ( null === $args['show_in_nav_menus'] ) {
			$args['show_in_nav_menus'] = $args['public'];
		}

		// If not set, default to true if not public, false if public.
		if ( null === $args['exclude_from_search'] ) {
			$args['exclude_from_search'] = ! $args['public'];
		}

		// Back compat with quirky handling in version 3.0. #14122.
		if ( empty( $args['capabilities'] )
			&& null === $args['map_meta_cap'] && in_array( $args['capability_type'], array( 'post', 'page' ), true )
		) {
			$args['map_meta_cap'] = true;
		}

		// If not set, default to false.
		if ( null === $args['map_meta_cap'] ) {
			$args['map_meta_cap'] = false;
		}

		// Якщо немає спеціального edit link і no UI, remove the edit link.
		if ( ! $args['show_ui'] && ! $has_edit_link ) {
			$args['_edit_link'] = '';
		}

		$this->cap = get_post_type_capabilities( (object) $args );
		unset( $args['capabilities'] );

		if ( is_array( $args['capability_type'] ) ) {
			$args['capability_type'] = $args['capability_type'][0];
		}

		if ( false !== $args['query_var'] ) {
			if ( true === $args['query_var'] ) {
				$args['query_var'] = $this->name;
			} else {
				$args['query_var'] = sanitize_title_with_dashes( $args['query_var'] );
			}
		}

		if ( false !== $args['rewrite'] && ( is_admin() || get_option( 'permalink_structure' ) ) ) {
			if ( ! is_array( $args['rewrite'] ) ) {
				$args['rewrite'] = array();
			}
			if ( empty( $args['rewrite']['slug'] ) ) {
				$args['rewrite']['slug'] = $this->name;
			}
			if ( ! isset( $args['rewrite']['with_front'] ) ) {
				$args['rewrite']['with_front'] = true;
			}
			if ( ! isset( $args['rewrite']['pages'] ) ) {
				$args['rewrite']['pages'] = true;
			}
			if ( ! isset( $args['rewrite']['feeds'] ) || ! $args['has_archive'] ) {
				$args['rewrite']['feeds'] = (bool) $args['has_archive'];
			}
			if ( ! isset( $args['rewrite']['ep_mask'] ) ) {
				if ( isset( $args['permalink_epmask'] ) ) {
					$args['rewrite']['ep_mask'] = $args['permalink_epmask'];
				} else {
					$args['rewrite']['ep_mask'] = EP_PERMALINK;
				}
			}
		}

		foreach ( $args as $property_name => $property_value ) {
			$this->$property_name = $property_value;
		}

		$this->labels = get_post_type_labels( $this );
		$this->label = $this->labels->name;
	}

	/**
	 * Sets the features support для the post type.
	 *
	 * @ Since 4.6.0
	 */
	public function add_supports() {
		if ( ! empty( $this->supports ) ) {
			foreach ( $this->supports as $feature => $args ) {
				if ( is_array ( $ args ) ) {
					add_post_type_support( $this->name, $feature, $args );
				} else {
					add_post_type_support( $this->name, $args );
				}
			}
			unset($this->supports);
		} elseif ( false !== $this->supports ) {
			// Add default features.
			add_post_type_support( $this->name, array( 'title', 'editor' ) );
		}
	}

	/**
	 * Adds necessary rewrite rules for the post type.
	 *
	 * @ Since 4.6.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 * @global WP $wp Current WordPress environment instance.
	 */
	public function add_rewrite_rules() {
		Global $wp_rewrite, $wp;

		if ( false !== $this->query_var && $wp && is_post_type_viewable( $this ) ) {
			$wp->add_query_var( $this->query_var );
		}

		if ( false !== $this->rewrite && ( is_admin() || get_option( 'permalink_structure' ) ) ) {
			if ( $this->hierarchical ) {
				add_rewrite_tag( "%$this->name%", '(.+?)', $this->query_var ? "{$this->query_var}=" : "post_type=$this->name&pagename=" );
			} else {
				add_rewrite_tag( "%$this->name%", '([^/]+)', $this->query_var ? "{$this->query_var}=" : "post_type=$this->name&name=" ) ;
			}

			if ($this->has_archive) {
				$archive_slug = true === $this->has_archive ? $this->rewrite['slug'] : $this->has_archive;
				if ( $this->rewrite['with_front'] ) {
					$archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
				} else {
					$archive_slug = $wp_rewrite->root. $archive_slug;
				}

				add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$this->name", 'top' );
				if ( $this->rewrite['feeds'] && $wp_rewrite->feeds ) {
					$feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
					add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
					add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$this->name" . '&feed=$matches[1]', 'top' );
				}
				if ( $this->rewrite['pages'] ) {
					add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$this->name" . '&paged=$ matches[1]', 'top');
				}
			}

			$permastruct_args = $this->rewrite;
			$permastruct_args['feed'] = $permastruct_args['feeds'];
			add_permastruct( $this->name, "{$this->rewrite['slug']}/%$this->name%", $permastruct_args );
		}
	}

	/**
	 * Записувачі друкованого типу meta box if custom callback був specified.
	 *
	 * @ Since 4.6.0
	 */
	public function register_meta_boxes() {
		if ( $this->register_meta_box_cb ) {
			add_action( 'add_meta_boxes_' . $this->name, $this->register_meta_box_cb, 10, 1 );
		}
	}

	/**
	 * Adds future post hook action for the post type.
	 *
	 * @ Since 4.6.0
	 */
	public function add_hooks() {
		add_action( 'future_' . $this->name, '_future_post_hook', 5, 2 );
	}

	/**
	 * Регістри taxonomies for post type.
	 *
	 * @ Since 4.6.0
	 */
	public function register_taxonomies() {
		foreach ( $this->taxonomies as $taxonomy ) {
			register_taxonomy_for_object_type( $taxonomy, $this->name );
		}
	}

	/**
	 * Removes the features support для the post type.
	 *
	 * @ Since 4.6.0
	 *
	 * @global array $_wp_post_type_features Post type features.
	 */
	public function remove_supports() {
		Global $_wp_post_type_features;

		unset( $_wp_post_type_features[ $this->name ] );
	}

	/**
	 * Removes any rewrite rules, permastructs, and rules for the post type.
	 *
	 * @ Since 4.6.0
	 *
	 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
	 * @global WP $wp Current WordPress environment instance.
	 * @global array $post_type_meta_caps Використовується для передачі meta capabilities.
	 */
	public function remove_rewrite_rules() {
		Global $wp, $wp_rewrite, $post_type_meta_caps;

		// Remove query var.
		if ( false !== $this->query_var ) {
			$wp->remove_query_var( $this->query_var );
		}

		// Remove any rewrite rules, permastructs, and rules.
		if ( false !== $this->rewrite ) {
			remove_rewrite_tag( "%$this->name%");
			remove_permastruct( $this->name );
			foreach ( $wp_rewrite->extra_rules_top as $regex => $query ) {
				if ( false !== strpos( $query, "index.php?post_type=$this->name" ) ) {
					unset( $wp_rewrite->extra_rules_top[ $regex ] );
				}
			}
		}

		// Remove registered custom meta capabilities.
		foreach ( $this->cap as $cap ) {
			unset($post_type_meta_caps[$cap]);
		}
	}

	/**
	 * Unregisters post type meta box if custom callback був specified.
	 *
	 * @ Since 4.6.0
	 */
	public function unregister_meta_boxes() {
		if ( $this->register_meta_box_cb ) {
			remove_action( 'add_meta_boxes_' . $this->name, $this->register_meta_box_cb, 10 );
		}
	}

	/**
	 * Поверніть текст починаючи з усіх taxonomies.
	 *
	 * @ Since 4.6.0
	 */
	public function unregister_taxonomies() {
		foreach ( get_object_taxonomies( $this->name ) as $taxonomy ) {
			unregister_taxonomy_for_object_type( $taxonomy, $this->name );
		}
	}

	/**
	 * Removes the future post hook action for the post type.
	 *
	 * @ Since 4.6.0
	 */
	public function remove_hooks() {
		remove_action( 'future_' . $this->name, '_future_post_hook', 5 );
	}

	/**
	 * Gets the REST API controller для цього типу post.
	 *
	 * буде лише instantiate controller class once per request.
	 *
	 * @ Since 5.3.0
	 *
	 * @return WP_REST_Controller|null Controller instance, або null if the post type
	 * is set not to show in rest.
	 */
	public function get_rest_controller() {
		if ( ! $this->show_in_rest ) {
			return null;
		}

		$class = $this->rest_controller_class ? $this->rest_controller_class : WP_REST_Posts_Controller::class;

		if (! class_exists($class)) {
			return null;
		}

		if ( ! is_subclass_of( $class, WP_REST_Controller::class ) ) {
			return null;
		}

		if ( ! $this->rest_controller ) {
			$this->rest_controller = new $class( $this->name );
		}

		if ( ! ( $this->rest_controller instanceof $class ) ) {
			return null;
		}

		return $this->rest_controller;
	}

	/**
	 * Returns the default labels for post types.
	 *
	 * @ Since 6.0.0
	 *
	 * @return (string | null) [] [] Default labels for post types.
	 */
	public static function get_default_labels() {
		if ( ! empty( self::$default_labels ) ) {
			return self::$default_labels;
		}

		self::$default_labels = array(
			'name' => array( _x( 'Posts', 'post type general name' ), _x( 'Pages', 'post type general name' ) ),
			'singular_name' => array( _x( 'Post', 'post type singular name' ), _x( 'Page', 'post type singular name' ) ),
			'add_new' => array( _x( 'Add New', 'post' ), _x( 'Add New', 'page' ) ),
			'add_new_item' => array( __( 'Add New Post' ), __( 'Add New Page' ) ),
			'edit_item' => array( __( 'Edit Post' ), __( 'Edit Page' ) ),
			'new_item' => array( __( 'New Post' ), __( 'New Page' ) ),
			'view_item' => array( __( 'View Post' ), __( 'View Page' ) ),
			'view_items' => array( __( 'View Posts' ), ​​__( 'View Pages' ) ),
			'search_items' => array( __( 'Search Posts' ), ​​__( 'Search Pages' ) ),
			'not_found' => array( __( 'No posts found.' ), __( 'No pages found.' ) ),
			'not_found_in_trash' => array( __( 'No posts found in Trash.' ), __( 'No pages found in Trash.' ) ),
			'parent_item_colon' => array( null, __( 'Parent Page:' ) ),
			'all_items' => array( __( 'All Posts' ), ​​__( 'All Pages' ) ),
			'archives' => array( __( 'Post Archives' ), ​​__( 'Page Archives' ) ),
			'attributes' => array( __( 'Post Attributes' ), ​​__( 'Page Attributes' ) ),
			'insert_into_item' => array( __( 'Insert into post' ), __( 'Insert into page' ) ),
			'uploaded_to_this_item' => array( __( 'Uploaded to this post' ), __( 'Uploaded to this page' ) ),
			'featured_image' => array( _x( 'Featured image', 'post' ), _x( 'Featured image', 'page' ) ),
			'set_featured_image' => array( _x( 'Set featured image', 'post' ), _x( 'Set featured image', 'page' ) ),
			'remove_featured_image' => array( _x( 'Remove featured image', 'post' ), _x( 'Remove featured image', 'page' ) ),
			'use_featured_image' => array( _x( 'Use as featured image', 'post' ), _x( 'Use as featured image', 'page' ) ),
			'filter_items_list' => array( __( 'Filter posts list' ), __( 'Filter pages list' ) ) ,
			'filter_by_date' => array( __( 'Filter by date' ), __( 'Filter by date' ) ) ),
			'items_list_navigation' => array( __( 'Posts list navigation' ), __( 'Pages list navigation' ) ),
			'items_list' => array( __( 'Posts list' ), __( 'Pages list' ) ),
			'item_published' => array( __( 'Post published.' ), __( 'Page published.' ) ),
			'item_published_privately' => array( __( 'Post published privately.' ), __( 'Page published privately.' ) ),
			'item_reverted_to_draft' => array( __( 'Post reverted to draft.' ), __( 'Page reverted to draft.' ) ),
			'item_scheduled' => array( __( 'Post scheduled.' ), __( 'Page scheduled.' ) ),
			'item_updated' => array( __( 'Post updated.' ), __( 'Page updated.' ) ),
			'item_link' => array(
				_x( 'Post Link', 'navigation link block title' ),
				_x( 'Page Link', 'navigation link block title' ),
			),
			'item_link_description' => array(
				_x( 'A link to a post.', 'navigation link block description' ),
				_x( 'A link to a page.', 'Navigation link block description' ),
			),
		);

		return self::$default_labels;
	}

	/**
	 * Resets cache for default labels.
	 *
	 * @ Since 6.0.0
	 */
	public static function reset_default_labels() {
		self::$default_labels = array();
	}
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *