有人知道注销自定义帖子类型的方法吗?

是否有等同于register_post_type()的内容?

评论

任何人都在寻找这个。注册自定义帖子类型时,没有任何内容保存到数据库中。 wp db中的posts表是非结构化的。它仅通过wp脚本的内部进行注册,您可以使用您通过register posts创建的类型创建一个进入posts表的条目。希望对别人有帮助。

从WordPress 4.5开始,有功能可以执行unregister_post_type。请参阅使用unregister_post_type取消注册帖子类型

#1 楼

从WordPress 4.5开始,可以执行unregister_post_type的功能。示例:-

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


评论


这需要具有更高的优先级,然后用于注册帖子类型的优先级,否则它将不起作用

–马克·卡普伦
16年7月12日在5:46

@Dhinju Divakaran,它不是从我现在不使用的数据库中删除旧帖子类型。

–Faiyaz Alam
17年2月3日,下午5:48

它的工作方式,请确保与注册帖子类型所使用的操作相比,您将该操作赋予较高的优先级。

– Ajith R Nair
17年5月14日在21:23

值得一提的是unregister_post_type()不会从数据库中删除任何内容。它仅防止帖子类型被注册。

–戴夫·罗姆西
18 Mar 3 '18 at 0:40

这对我来说非常有效,但是请记住,您需要通过在Settings-> Permalinks admin页面中重新保存您的Permalink结构来通知WordPress有关更改。否则,具有永久链接冲突的页面将无法正常工作。

– MarkPraschan
19年2月1日在17:23

#2 楼

当前没有注销帖子类型的功能,但是过程非常简单。

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产生未知影响,因此请您自担风险。取消注册自定义帖子类型应该是绝对安全的,但自然不会对您的安装进行任何清理(即,取消注册帖子类型并不等同于从数据库中删除数据)。可能需要这样做的场景,但是更明智的方法(在可能的情况下)是,如果不需要的话,根本就不用首先注册帖子类型。

评论


不客气.. :)如果您要以代码形式添加自己的帖子类型,则更简单的解决方案是删除您运行的添加它们的函数/代码。另请注意,删除帖子类型不会将其从帖子表中清除,因此您可能在该表中有多余的条目。

– t31os
2010年11月9日14:16

@anu:如果不在每个页面加载(init)上执行register_post_type(),唯一保持“永久”状态的可能是永久链接结构(刷新它,它将消失),以及数据库中的帖子,您可以通过在wp_posts WHERE post_type ='[您的自定义帖子类型]'中执行DELETE FROM进行删除。

– Jan Fabry
2010年11月9日14:35

有趣的是,我确实删除了该custom_post_type的register_post_type代码,并且没有向该cpt添加任何帖子,但没有删除管理UI。

–anu
2010年11月9日14:36

或者,当然,既然我再试一次,它就如你们所描述的那样工作-即新cpt的管理UI已经消失了。可能我是木偶:)无论如何还是有用的信息,所以谢谢。

–anu
2010年11月9日14:37

2016年2月更新-此功能已合并到WP 4.5.0的核心(将于4月发布)。

–里卡多BRGWeb
16-2-4在19:43

#3 楼

这对我有用,就像Rarst尽可能使用remove_action()一样。

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

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


#4 楼

正如t31os指出的那样,从全局变量中删除帖子类型很容易。

但是如果您的意思是非核心帖子类型,那么最好查找注册该代码并与remove_action()挂钩的代码(如果它是体面的代码应该被钩住而不是直接运行)。

评论


register_post_type()不是一个很适合钩子的函数。注册帖子类型的通常方法是直接在挂接到init的函数中运行该函数。删除该动作可能会产生不良影响,因为该功能通常会删除其他功能。

– John P Bloch
2010年11月9日13:59

@John P Bloch是的,我知道这一点。有时您最终会重建所有init以使其正确无误,最后它取决于特定的代码及其质量/合理性。

–稀有
2010年11月9日14:21

#5 楼

在WordPress 4.5及更高版本中,它们提供了删除帖子类型(unregister_post_type)的功能。
示例

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


它将完全起作用。