WordPress как на ладони
wordpress jino

unregister_post_type() WP 4.5.0

Отменяет регистрацию указанного типа записи. Удаляет тип записи.

Не работает со встроенными типами записей: посты, страницы, вложения и т.д., т.е. с теми у которых указан параметр _builtin при регистрации с помощью register_post_type.

При удалении типа записи, удаляется все что с ней связано: параметры запроса, правила ЧПУ и т.д.

Хуки из функции:
Возвращает

True/false/WP_Error. True, при успешной отмене. WP_Error, при неудачной отмене или когда указанного типа записи не существует.

Использование

unregister_post_type( $post_type );
$post_type(строка) (обязательный)
Название типа записи который нужно отменить.

Примеры

#1 Отмена зарегистрированного типа записи

Допустим, какой-то плагин или тема добавляет свой тип записи product, а нам этот тип не нужен и мы хотим его отменить.

// Так как типы записей регистрируются обычно во время события ``init``,
// то удалять их нужно позже этого события. Можно использовать событие 
// ``wp_loaded`` или тот же ``init`` но с меньшим приоритетом.

add_action('init', 'my_unregister_post_type', 999);
function my_unregister_post_type(){
	unregister_post_type('product');
}

Код unregister post type: wp-includes/post.php WP 4.8.2

<?php
function unregister_post_type( $post_type ) {
	global $wp_post_types;

	if ( ! post_type_exists( $post_type ) ) {
		return new WP_Error( 'invalid_post_type', __( 'Invalid post type.' ) );
	}

	$post_type_object = get_post_type_object( $post_type );

	// Do not allow unregistering internal post types.
	if ( $post_type_object->_builtin ) {
		return new WP_Error( 'invalid_post_type', __( 'Unregistering a built-in post type is not allowed' ) );
	}

	$post_type_object->remove_supports();
	$post_type_object->remove_rewrite_rules();
	$post_type_object->unregister_meta_boxes();
	$post_type_object->remove_hooks();
	$post_type_object->unregister_taxonomies();

	unset( $wp_post_types[ $post_type ] );

	/**
	 * Fires after a post type was unregistered.
	 *
	 * @since 4.5.0
	 *
	 * @param string $post_type Post type key.
	 */
	do_action( 'unregistered_post_type', $post_type );

	return true;
}

Cвязанные функции

Из метки: post_type (произвольный тип записи)

Еще из раздела: Типы записей

unregister_post_type 8 комментариев
  • Михаил cайт: mpetrov.pp.ua @

    Если я правильно понимаю, то данная функция не очищает из БД данные о кастомном типе. Если это так, то как корректно почистить базу после деактивации кастомного типа?

    • Kama4486

      Да, функция удаляет только регистрацию типа записи и не трогает уже созданный контент. Чтобы удалить контент записей, лучше всего использовать wp_delete_post() для каждой записи удаляемого типа...

      • Михаил cайт: mpetrov.pp.ua @

        Т.е. нужно смотреть, что добавилось с созданием кастомного типа (записи, дополнительные поля...), и удалять все отдельно.

        Благодарю Вас за ответ!

        • Kama4486

          Получаешь все записи по типу через get_posts() и удаляешь все что получил...

          • Михаил cайт: mpetrov.pp.ua @

            Ок, спасибо еще раз! Удачи Вам!

            • Михаил cайт: mpetrov.pp.ua @

              Здравствуйте. Еще раз хочу вернутся к вопросу.

              Сегодня заметил Вашу статью "20+ полезных SQL запросов для WordPress", где первым пунктом идет запрос очистки БД от неиспользуемых элементов таксономии. Как раз это мне и было нужно! Я просто изначально искал, можно ли подобное осуществить стандартными методами ВордПресса (функции/хуки), не прибегая к SQL-запросу. Но судя по Вашей статье, то только так. Верно?

Здравствуйте, !

Ваш комментарий