正如问题中所说,没有过滤器可以将批量操作添加到标准的选择菜单,或者更好,有一个过滤器,但它只能用于删除操作,不能用于添加。所以,即使对于php/wp开发人员(像我一样)来说,这看起来很难看(而且可能很难看),唯一的机会就是使用js。
坏消息是,要实现问题中的请求,我们还需要大量javascript。
没有其他选择:一旦没有过滤器或操作,或者我们使用javascript,或者我们修改核心文件。在这两种罪恶之间,让我们选择较小的。
工作流
PHP:创建一个函数,为select terms UI输出html标记。我们可以从标准的批量编辑UI复制大量帖子seePHP:hook在第1点创建的函数。进入ajax操作:创建一段代码,向批量选择菜单添加选项:截取单击“应用”按钮(一个在表头,一个在页脚),如果选择了我们的操作,prevent_default()
并发出一个ajax请求,调用函数create at point 1。并将结果中给出的html放在表中的正确位置$_POST
一个附件ID数组和一些术语数组(每个分类法的一个数组),只需将术语分配给给定的附件即可:钩住在第5点创建的函数。在第二个ajax操作中:创建一个ajax调用,该调用在单击UI中的更新按钮时运行。(我们必须记住使用jQuery.on()
因为UI是通过ajax添加的)。它调用在第5点创建的函数,完成后,重定向页面以上载。php添加一个查询变量,帮助我们使用管理通知来显示成功或错误消息:在文件中保存所有js后,将其排队仅用于“上载”。我们必须提醒处理ajax请求的函数必须进行一些安全检查,例如检查nonce以及当前用户是否可以执行所需的操作。
以下是批量条款分配UI的预览:
请注意层次分类法和非层次分类法的不同实现,以及非层次分类法的建议实现。
如果有人对此感兴趣,我已经创建了一个插件,它可以实现这里所说的以及更多的功能,实际上插件分为2部分:
第一部分为附件注册分类,使用一些标准参数,第二部分为所有为附件注册的分类法(因此不仅针对插件注册的分类法)执行此处所述的批量术语分配。如果有人想使用第二部分而不是第一部分(因为已经注册了所有需要的分类法),则会提供一个过滤器来阻止注册。
如果有人想让插件注册默认的分类法,但不喜欢默认的参数,那么会提供另一个过滤器来更改默认的参数。
作为一个额外的功能,使用第三个过滤器可以使用插件注册其他附件分类法,这比使用register\\u分类法更容易,因为在插件中有许多默认参数是在附件分类法中设置的,相反,register\\u分类法的默认参数是在考虑后分类法的情况下设置的。
插件还实现了自己的文本域,便于本地化。
插件代码已打开GitHub