附件分类的批量术语分配

时间:2013-08-29 作者:gmazzap

我已经为附件创建了自定义分类法。一切正常,但现在我希望能够使用默认的wordpress media admin(“upload.php”)批量操作将其条款批量分配给附件。

在wpse中,我发现了一些关于管理媒体表的批量操作的问题/答案。

喜欢this onethis other.

这些为我提供了如何在选择菜单上添加批量操作的指导(没有过滤器,因此我必须使用javascript),但我的情况不同:

在链接的问题/答案中,当选择批量操作时,会立即提交页面表单,相反,我希望当我选择批量操作(例如“分配条款”)并按下“应用”按钮而不是提交表单时,会显示一个非常类似于在标准帖子上选择批量“编辑”操作时显示的UI(参见下图)。

enter image description here

在这里,我想选择术语,最后,通过单击“更新按钮”,将术语批量分配给附件。

我怎样才能做到这一点?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

正如问题中所说,没有过滤器可以将批量操作添加到标准的选择菜单,或者更好,有一个过滤器,但它只能用于删除操作,不能用于添加。所以,即使对于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的预览:

enter image description here

请注意层次分类法和非层次分类法的不同实现,以及非层次分类法的建议实现。

如果有人对此感兴趣,我已经创建了一个插件,它可以实现这里所说的以及更多的功能,实际上插件分为2部分:

第一部分为附件注册分类,使用一些标准参数,第二部分为所有为附件注册的分类法(因此不仅针对插件注册的分类法)执行此处所述的批量术语分配。如果有人想使用第二部分而不是第一部分(因为已经注册了所有需要的分类法),则会提供一个过滤器来阻止注册。

如果有人想让插件注册默认的分类法,但不喜欢默认的参数,那么会提供另一个过滤器来更改默认的参数。

作为一个额外的功能,使用第三个过滤器可以使用插件注册其他附件分类法,这比使用register\\u分类法更容易,因为在插件中有许多默认参数是在附件分类法中设置的,相反,register\\u分类法的默认参数是在考虑后分类法的情况下设置的。

插件还实现了自己的文本域,便于本地化。

插件代码已打开GitHub

结束

相关推荐

Bulk post type conversion

我已经得到了一个客户的wordpress站点,可以更新;改进最大的问题是,我需要接受200多个特定类别的帖子“评论”,并将它们全部转换为自定义的帖子类型“评论”。最重要的是,我需要移动一些属于这些帖子的自定义字段,以便它们在移动后保持不变。我希望我必须编写一个自定义脚本来更改mysql direct。但是在我把手弄脏之前,有没有人有这样做的经验?有什么提示/窍门/脚本我可以使用吗?干杯