WordPress:自定义文章类型永久删除文章

3

我希望能够永久删除自定义文章类型中的文章,而不是先移到垃圾箱。 于是我在网上找到了一段据说可以实现这个功能的代码。 但是不知道为什么,我无法让它正常工作。

以下是我拥有的代码:

function directory_skip_trash($post_id) {
    if (get_post_type($post_id) == 'directory') {
        // Force delete
        wp_delete_post( $post_id, true );
    }
}
add_action('wp_trash_post', 'directory_skip_trash');

关于我的自定义文章类型的其余代码,您可以在我之前发布的这篇帖子中找到。

我可能错过了一些相当简单的东西。

更新

现在它已经有点起作用了。它实际上会删除该文章,但我会收到这个错误消息。 enter image description here 错误后,如果我回到文章页面,则该文章已消失且不在垃圾桶中。任何人都可能有解决方法,只需删除并不出现此消息吗?


1
不要使用 wp_trash_post 作为你的钩子,尝试使用 trashed_post。问题在于 wp_trash_post 发生在文章被移动到回收站之前。所以你是在删除文章后运行钩子,但由于文章已经不存在了,所以会出现错误。 - disinfor
是的,那就解决了,谢谢 :D - Asta
1
我会将其发布为答案,以便其他人受益。 - disinfor
1
是的,我会标记它:D - Asta
2个回答

3

使用正确的成员 (members)文章类型:

您需要使用trashed_post钩子。 wp_trash_post在文章被垃圾桶删除之前触发,因此如果文章已不存在,则会出现错误。

function members_skip_trash($post_id) {
    if (get_post_type($post_id) == 'members') { // <-- members type posts
        // Force delete
        wp_delete_post( $post_id, true );
    }
}
add_action('trashed_post', 'members_skip_trash');

2

在你的另一篇帖子中,它说你的文章类型被称为“成员”。 而你却在检查“目录”类型的文章。请将if条件更改如下,以实际影响正确的文章类型:

function members_skip_trash($post_id) {
    if (get_post_type($post_id) == 'members') { // <-- members type posts
        // Force delete
        remove_all_actions('wp_trash_post');
        wp_delete_post( $post_id, true );
    }
}
add_action('trashed_post', 'members_skip_trash', 1);

所以我现在已经做到了,现在它有点起作用了。 我收到一个错误,如:移动到垃圾箱时出错。 但是当我回到页面时,它确实被删除了。但问题是,我在wp-config中开启了WP_DEBUG,但我没有得到错误行,只有一个WordPress错误。 - Asta
define('WP_DEBUG_LOG', true);也开启了吗?也许日志文件中会显示一些信息。我目前在这里没有看到任何明显的错误,而且由于之前没有产生任何错误,我怀疑错误发生在这个函数的任何地方都不太可能。很可能,这会对试图访问已删除文章的其他挂钩产生一些副作用。 - Damocles
@Damocles 请检查我的回答。wp_trash_post 是错误的钩子。 - disinfor
你的代码看起来和我的非常相似...尤其是那个注释。 - Damocles
是的,我使用了正确的钩子。我阅读了您的答案,意识到您纠正了 OPs 先前问题中原始函数中的一个错误。在发布我的答案之前,我在评论中发布了正确的答案。 - disinfor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接