我想防止一些类别被意外删除。为此,我使用一个 meta条目的类别被保护。
我使用以下代码:
// edit: wrong hook! ** add_action( 'delete_term_taxonomy', 'taxonomy_delete_protection', 10, 1 );
add_action( 'pre_delete_term', 'taxonomy_delete_protection', 10, 1 );
function taxonomy_delete_protection ( $term_id )
{
if (get_term_meta ($term_id, 'delete-protect', true) === true)
{
wp_die('Cannot delete this category');
}
}
不幸的是,而不是我的错误信息,只显示“出错了”,为什么?
编辑:'delete_term_taxonomy'对于我的代码来说是错误的钩子,因为它在我检查元条目之前就删除了 meta。'pre_delete_term'在类别发生任何事情之前就触发了。
4条答案
按热度按时间5n0oy7gb1#
“为什么”是因为WordPress附带的以下JavaScript:
此POST请求的预期响应为:
'1'
(如果术语已删除)'-1'
(如果您的用户没有删除术语的权限)。对于所有其他情况,将显示“出错”。
您使用
wp_die
提前终止了脚本,产生了意外的响应,这属于“其他情况”。如果不编写一些自己的JavaScript,就无法在此处的通知框中提供自定义错误消息。
qxgroojn2#
这是我目前的解决方案,不完美,但它的工作。
如果你用行操作删除分类,“出错了”的消息就会出现,所以我取消了“删除”操作,这样就不会触发它了。
然后我用css隐藏了分类编辑表单中的“删除”链接。如果你检查网站和它的链接,它仍然可以被触发,但是没有钩子来删除这个操作。
最后是删除分类法之前的检查。这应该会捕获所有其他方式,比如批量操作“delete”。我还没有找到其他方法来阻止脚本删除分类法。
mqxuamgl3#
这个解决方案提供了一种方法来禁止所有类别被非管理员删除。这是为任何人喜欢我谁一直在搜索。
fxnxkyjh4#
最简单的解决方案(它会自动处理所有可能删除类别/术语的不同位置),在我看来也是最灵活的一个是使用
user_has_cap
钩子: