Удаление пользовательских типов записей

9 нояб. 2010 г., 15:33:18
Просмотры: 66.1K
Голосов: 50

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

Существует ли эквивалент функции register_post_type()?

2
Комментарии

КТО-ТО ЕЩЕ ИЩЕТ ЭТО. Когда вы регистрируете пользовательский тип записи, ничего не сохраняется в базе данных. Таблица posts в базе данных WordPress не имеет структуры. Регистрация происходит только во внутренностях скрипта WordPress, что позволяет создать запись в таблице posts с типом того, что вы создали с помощью register_post_type. Надеюсь, это поможет кому-то еще.

James Andino James Andino
4 февр. 2016 г. 01:00:37

Начиная с WordPress 4.5 есть функция для этого unregister_post_type. Смотрите Отмена регистрации типа записи с помощью unregister_post_type

Dhinju Divakaran Dhinju Divakaran
12 июл. 2016 г. 07:54:48
Все ответы на вопрос 5
5
43

Начиная с WordPress 4.5, для этого существует функция unregister_post_type. Пример:

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
12 июл. 2016 г. 07:57:28
Комментарии

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

Mark Kaplun Mark Kaplun
12 июл. 2016 г. 08:46:05

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

Faiyaz Alam Faiyaz Alam
3 февр. 2017 г. 07:48:13

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

Ajith R Nair Ajith R Nair
15 мая 2017 г. 00:23:07

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

Dave Romsey Dave Romsey
3 мар. 2018 г. 02:40:07

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

MarkPraschan MarkPraschan
1 февр. 2019 г. 19:23:30
7
39

В настоящее время в 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, поэтому делайте это на свой страх и риск. Отмена регистрации пользовательского типа записи должна быть совершенно безопасной, но естественно не приведет к очистке вашей установки (например, отмена регистрации типа записи не означает удаление данных из базы данных).

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

9 нояб. 2010 г. 15:51:12
Комментарии

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

t31os t31os
9 нояб. 2010 г. 16:16:52

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

Jan Fabry Jan Fabry
9 нояб. 2010 г. 16:35:03

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

anu anu
9 нояб. 2010 г. 16:36:04

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

anu anu
9 нояб. 2010 г. 16:37:44

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

Ricardo Gonçalves Ricardo Gonçalves
4 февр. 2016 г. 21:43:41

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

User User
2 мар. 2018 г. 22:14:58

Функция удаления пользовательского типа записи Project, представленная здесь, конфликтует с Divi 3.11.x. Следует учитывать это при её использовании.

Ciro Urdaneta Ciro Urdaneta
2 авг. 2018 г. 16:32:43
Показать остальные 2 комментариев
0

Это сработало для меня, как сказал Rarst, используя remove_action(), если это возможно.

add_action( 'after_setup_theme','remove_foundation_options', 100 );

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}
19 янв. 2012 г. 17:09:08
2

Как отметил t31os, легко удалить тип записи из глобальной переменной.

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

9 нояб. 2010 г. 15:55:35
Комментарии

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

John P Bloch John P Bloch
9 нояб. 2010 г. 15:59:01

@John P Bloch да, я в курсе. Иногда приходится полностью перестраивать весь init, чтобы добиться нужного результата, в итоге всё зависит от конкретного кода и его качества/адекватности

Rarst Rarst
9 нояб. 2010 г. 16:21:16
0

В WordPress версии 4.5 и выше доступна функция для удаления типа записи (unregister_post_type). Пример

function delete_post_type(){
unregister_post_type( 'jobs' ); // Удаляем тип записи 'jobs'
}
add_action('init','delete_post_type'); // Вешаем функцию на хук init

Это гарантированно сработает.

18 июл. 2017 г. 07:41:54