Скасувати реєстрацію спеціальних типів публікацій


44

Хтось знає про спосіб скасування реєстрації користувацьких типів публікацій?

Чи є еквівалент register_post_type()?


1
БУДЬ-ЯКОГО ОДНОГО ПОШУКУ ТОГО. Під час реєстрації користувальницького типу публікації в базу даних нічого не зберігається. Таблиця повідомлень у wp db неструктурована. Єдина реєстрація у внутрішніх скриптах wp дозволяє створити запис до таблиці публікацій з типом того, що ви створювали за допомогою реєстру. Сподіваюся, що допоможе хтось інший.
MageProspero

2
У WordPress 4.5 для цього є функція unregister_post_type. Див. Скасувати реєстрацію типу публікації, використовуючи
undegister_post_type

Відповіді:


38

В даний час не існує функції для реєстрації типу публікації, проте процес є досить простим.

Ендрю Начін надав код на 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, тому будь ласка, зробіть це на свій страх і ризик. Скасування реєстрації користувальницького типу публікації повинно бути абсолютно безпечним, але, природно, не здійснюватиме очищення вашої установки (тобто. Реєстрація типу публікації не прирівнюється до видалення даних із бази даних).

Я можу уявити кілька сценаріїв, де цього можна було б вимагати, але більш розумним підходом (де це можливо) було б просто не реєструвати тип публікації в першу чергу, якщо цього не потрібно.


2
Вас вітає .. :) Якщо ви додаєте власні типи публікацій у формі коду, простішим рішенням буде просто видалити функцію / код, який ви запускаєте, який додає їх. Також зауважте, що видалення типів публікацій не вимиває їх із таблиці ваших публікацій, тому у вас можуть бути надлишкові записи.
t31о

2
@anu: Єдине, що залишається "постійним", якщо ви не виконайте завантаження register_post_type()на кожній сторінці ( init), - це, мабуть, постійна посилання (оновіть її і вона пропаде), а також повідомлення в базі даних, які ви можете видалити роблячи DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Ян Фабрі

Цікаво, що я видалив код register_post_type для цього custom_post_type, і я не додав жодної публікації до цього CPT, але він не видалив інтерфейс адміністратора.
ану

Або звичайно, тепер, коли я повторюю спробу, це працює так, як ви описали, - тобто, інтерфейс адміністратора для нового CPT пішов. Напевно, я буду лялечкою :) Корисна інформація все одно, тож спасибі.
ану

3
Оновлення в лютому 2016 року - ця функція була об'єднана в ядрі для WP 4.5.0 (запущена в квітні).
Ricardo BRGWeb

37

На WordPress 4.5 є функція , щоб зробити це, unregister_post_type. Приклад: -

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

це потрібно мати більш високий пріоритет, ніж той, який використовувався для реєстрації типу публікації, інакше він не працюватиме
Марк Каплун

@Dhinju Divakaran не видаляє старий тип повідомлення з db, яким я зараз не користуюся.
Faiyaz Alam

його робота, переконайтеся, що ви віддаєте високий пріоритет цій дії порівнянні з дією, яка використовується для реєстрації типу публікації.
Аджит Р Наїр

1
Варто згадати, що unregister_post_type()нічого не видаляє з бази даних. Це лише запобігає реєстрації типу публікації.
Дейв Ромсі

Для мене це спрацювало чудово, але майте на увазі, що вам потрібно буде повідомити WordPress про зміну шляхом повторного збереження структури Постійної посилання на сторінці Налаштування -> Постійні посилання. В іншому випадку сторінки з конфліктними постійними посиланнями працюють неправильно.
MarkPraschan

7

Це працювало для мене, як сказав Рарст, використовуючи функцію видалення (), якщо можливо.

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

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}

5

Як зазначав t31os, легко видалити тип публікації з глобальної змінної.

Але якщо ви маєте на увазі неосновний тип публікації, тоді краще буде знайти код, який реєструє його, і зняти його remove_action()(якщо це пристойний код, його слід зачепити, а не запустити безпосередньо).


2
register_post_type()не є функцією, яка добре піддається гачкам. Нормальний спосіб реєстрації типу публікації - це запуск функції безпосередньо у функції, підключеній до init. Видалення цієї дії може мати небажані ефекти, оскільки за допомогою цієї функції часто буде видалена інша функціональність.
Джон П Блох

@John P Bloch так, я знаю про це. Іноді ви в кінцевому підсумку відновлюєте все це init, щоб виправити це, врешті-решт, це залежить від конкретного коду та його якості / розумності
Rarst

1

У версії WordPress 4.5 і вище вони надають функцію для видалення типу публікації (undegister_post_type). Приклад

function delete_post_type(){
unregister_post_type( 'jobs' );
}
add_action('init','delete_post_type');

Це працюватиме визначено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.