カスタム投稿タイプの登録解除


44

カスタム投稿タイプを登録解除する方法を知っている人はいますか?

に相当するものはありregister_post_type()ますか?


1
これを検索する他の1つ。カスタム投稿タイプを登録すると、データベースには何も保存されません。wp dbの投稿テーブルは構造化されていません。wpスクリプトの内部に登録するのは、登録投稿で作成したもののタイプで投稿テーブルにエントリを作成できることだけです。それが他の誰かを助けることを願っています。
MageProspero

2
WordPress 4.5では、それを行う機能がありますunregister_post_type。参照してください登録解除unregister_post_typeを使用して、ポストタイプ
Dhinju Divakaran

回答:


38

現在、投稿タイプの登録を解除する機能はありませんが、プロセスは非常に簡単です。

Andrew Nacinは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
どういたしまして.. :)コード形式で独自の投稿タイプを追加する場合、より簡単な解決策は、それらを追加する実行中の関数/コードを単に削除することです。また、投稿タイプを削除しても投稿テーブルから削除されないため、そのテーブルに重複したエントリがある場合があります。
t31os

2
@anu:register_post_type()各ページの読み込み(init)を実行しない場合に「永続的」に残るのは、おそらくパーマリンク構造(更新すると消えます)、および削除可能なデータベース内の投稿ですすることによってDELETE FROM wp_posts WHERE post_type = '[your custom post type]'
1月ファブリ

興味深いことに、そのcustom_post_typeのregister_post_typeコードを削除し、そのcptに投稿を追加していませんでしたが、管理UIは削除しませんでした。
-anu

またはもちろん、今私がこれをもう一度試したところ、皆さんが説明したように機能します。つまり、新しいcptの管理UIがなくなりました。おそらく私はマペットです:)とにかく有用な情報なので、ありがとう。
-anu

3
2016年2月の更新-この機能は、WP 4.5.0のコアにマージされました(4月に発表予定)。
リカルドBRGWeb 16

37

WordPress 4.5では、それを行う機能がありますunregister_post_type。例:-

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

高い優先度でポストタイプを登録するために使用され、その後いずれかにするには、この必要性、それ以外の場合は動作しません
マークKaplun

@Dhinju Divakaranは、現在使用していないdbから古い投稿タイプを削除していません。
ファイヤズアラム

その動作は、投稿タイプを登録するために使用されるアクションと比較して、このアクションに高い優先度を与えることを確認してください。
Ajith R Nairの

1
unregister_post_type()データベースから何も削除されないことに言及する価値があります。投稿タイプが登録されるのを防ぐだけです。
デイブロムジー

これは私にとってはうまくいきましたが、設定->パーマリンクの管理ページでパーマリンクの構造を再保存して、WordPressに変更を通知する必要があることに注意してください。そうしないと、パーマリンクが競合するページが正しく機能しません。
MarkPraschan

7

Rarstが可能であればremove_action()を使用して言ったように、これは私にとってはうまくいきました。

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にフックされた関数で関数を直接実行することです。そのアクションを削除すると、その機能で他の機能が削除されることが多いため、望ましくない効果が生じる可能性があります。
ジョンPブロッホ

@John P Blochうん、私はそれを知っています。時々、あなたはそれを正しくするためにすべてのinitを再構築することになります。最終的には特定のコードとその品質/健全性に依存します
-Rarst

1

WordPressバージョン4.5以降では、投稿タイプを削除する機能(unregister_post_type)を提供します。

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

それは間違いなく動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.