Кто-нибудь знает способ отмены регистрации пользовательских типов сообщений?
Есть ли эквивалент register_post_type()
?
unregister_post_type
. См. Отмена регистрации типа записи с использованием
Кто-нибудь знает способ отмены регистрации пользовательских типов сообщений?
Есть ли эквивалент register_post_type()
?
unregister_post_type
. См. Отмена регистрации типа записи с использованием
Ответы:
В настоящее время нет функции для отмены регистрации типа записи, однако процесс довольно прост.
Эндрю Нацин предоставил некоторый код на 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, поэтому, пожалуйста, делайте это на свой страх и риск. Отмена регистрации пользовательского типа записей должна быть абсолютно безопасной, но, естественно, не приведет к очистке вашей установки (т. Е. Отмена регистрации типа записей не означает удаление данных из базы данных).
Я могу представить несколько сценариев, где это могло бы потребоваться, но более разумный подход (где это возможно) состоял бы в том, чтобы просто не регистрировать тип сообщения, если он не нужен.
register_post_type()
загрузку на каждой странице ( init
), это, вероятно, структура постоянной ссылки (обновите ее, и она исчезнет), и записи в базе данных, которые вы можете удалить делая DELETE FROM wp_posts WHERE post_type = '[your custom post type]'
.
Начиная с WordPress 4.5 для этого есть функция unregister_post_type
. Пример:-
function delete_post_type(){
unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
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' );
}
add_action('init','delete_post_type');
Это будет работать определенно.