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


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.