Удаление пользовательских типов записей
Кто-нибудь знает способ удаления (деактивации) пользовательских типов записей?
Существует ли эквивалент функции register_post_type()
?

Начиная с WordPress 4.5, для этого существует функция unregister_post_type
. Пример:
function delete_post_type(){
unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

это должно иметь более высокий приоритет, чем тот, который используется для регистрации типа записи, иначе не будет работать

@Dhinju Divakaran это не удаляет старый тип записи из базы данных, который я сейчас не использую.

это работает, убедитесь, что вы задали этому действию более высокий приоритет по сравнению с действием, используемым для регистрации типа записи.

Стоит упомянуть, что unregister_post_type()
не удаляет ничего из базы данных. Он только предотвращает регистрацию типа записи.

Это отлично сработало для меня, но имейте в виду, что вам нужно будет уведомить WordPress об изменении, пересохранив структуру постоянных ссылок в админке: Настройки -> Постоянные ссылки. В противном случае страницы с конфликтующими ЧПУ не будут работать корректно.

В настоящее время в WordPress нет встроенной функции для отмены регистрации типа записи, однако этот процесс довольно прост.
Эндрю Нацин предоставил код на trac, доступный по ссылке и приведенный ниже.
if ( ! function_exists( 'unregister_post_type' ) ) :
function unregister_post_type( $post_type ) {
global $wp_post_types;
if ( isset( $wp_post_types[ $post_type ] ) ) {
unset( $wp_post_types[ $post_type ] );
return true;
}
return false;
}
endif;
Отмена регистрации встроенного типа записи может иметь непредсказуемые последствия для WordPress, поэтому делайте это на свой страх и риск. Отмена регистрации пользовательского типа записи должна быть совершенно безопасной, но естественно не приведет к очистке вашей установки (например, отмена регистрации типа записи не означает удаление данных из базы данных).
Можно представить несколько сценариев, когда это может потребоваться, но более разумным подходом (где это возможно) было бы просто не регистрировать тип записи изначально, если он не нужен.

Пожалуйста.. :) Если вы добавляете свои типы записей в виде кода, более простое решение — просто удалить функцию/код, который их регистрирует. Также учтите, что удаление типов записей не очищает их из таблицы постов, поэтому у вас могут остаться лишние записи в этой таблице.

@anu: Единственное, что остаётся "постоянным", если вы не выполняете register_post_type()
при каждой загрузке страницы (init
), это, вероятно, структура постоянных ссылок (обновите её, и она исчезнет), а также записи в базе данных, которые вы можете удалить с помощью DELETE FROM wp_posts WHERE post_type = '[ваш пользовательский тип записи]'
.

Интересно, что я удалил код register_post_type для этого пользовательского типа записи, и я не добавлял никаких записей в этот CPT, но интерфейс администратора не удалился.

Конечно, сейчас, когда я попробовал снова, всё работает так, как вы описали — то есть интерфейс администратора для нового CPT исчез. Наверное, я просто был невнимателен :) В любом случае, полезная информация, спасибо.

Обновление в феврале 2016 — эта функция была включена в ядро для WP 4.5.0 (который выйдет в апреле).

Может быть полезно взглянуть на реальный код (довольно короткий), используемый для функции, которая попала в ядро, вот здесь: https://developer.wordpress.org/reference/functions/unregister_post_type/. Он делает немного больше, чем эта функция, хотя я не уверен, когда были добавлены функции, на которые полагаются эти улучшения.

Это сработало для меня, как сказал Rarst, используя remove_action(), если это возможно.
add_action( 'after_setup_theme','remove_foundation_options', 100 );
function remove_foundation_options() {
remove_action( 'init', 'Orbit');
}

Как отметил t31os, легко удалить тип записи из глобальной переменной.
Но если вы имеете в виду не встроенный тип записи, то лучше найти код, который его регистрирует, и отключить с помощью remove_action()
(если код написан правильно, он должен быть подключен через хук, а не выполняться напрямую).

register_post_type()
— это функция, которая не предназначена для удобного подключения через хуки. Обычный способ регистрации типа записи — это непосредственный вызов функции в хуке, привязанном к init. Удаление этого действия может иметь нежелательные последствия, так как вместе с функцией часто удаляется и другая функциональность.

В WordPress версии 4.5 и выше доступна функция для удаления типа записи (unregister_post_type). Пример
function delete_post_type(){
unregister_post_type( 'jobs' ); // Удаляем тип записи 'jobs'
}
add_action('init','delete_post_type'); // Вешаем функцию на хук init
Это гарантированно сработает.
