使WordPress成为核心

开的11年前

上次修改时间10个月前

#23148 重新打开的 增强

在wp_ajax_save_attachment中为其他附件字段添加挂钩

报告人: 格里芬杰的个人资料 格里芬杰 所有者: audrasjb的个人资料 audrasjb公司
里程碑: 未来版本 优先: 正常的
严重程度: 正常的 版本: 3.5
组件: 媒体 关键词: has-patch接口 第二个小齿轮 开发人员反馈 需求-开发说明 需求-文档
重点: 复写的副本:

描述

截至目前,wp_ajax_save_attachment(wp_ajax保存附件)仅查找附件标题、标题、描述和alt文本字段。如果没有挂钩,就无法正确扩展新媒体系统并利用保存功能。

这个函数的末尾应该提供一个钩子(在JSON响应被发回之前),允许开发人员通过扩展媒体视图。附件。细节子视图。

附件(2)

23148.差异(365字节)-由添加格里芬杰 11年前.
23148.2.差异(669字节)-由添加成本开发 15个月前.
针对刷新的修补程序大旅行箱并添加了一个docblock。

将所有附件下载为:.zip文件

更改历史记录(67)

#1 @谢尔盖·比尤科夫
11年以前

  • 类型已从更改缺陷(bug)增强

@格里芬杰
11年以前

#2 @格里芬杰
11年以前

我添加了一个补丁,在WordPress内部更新帖子后添加一个钩子。传递两个参数,$帖子$个更改,足以让用户获得成功创建更新post_meta/wp_update_post呼叫。

#3 @谢尔盖·比尤科夫
11年以前

  • 关键词 has-patch接口补充;需要修补程序远离的

#4 @格里芬杰
11年以前

作为一个更新,我已经测试了这个补丁程序,它可以正常工作。以下是我的代码,作为呈现自定义字段模板和保存数据的概念证明:网址:https://gist.github.com/f3d93e78ed118b283938注意,对“wp_ajax_save_attachment”的调用是我在补丁中添加的钩子。

如果这个补丁能被应用到3.5.1中,这样我就可以在我的插件和客户端工作中积极地开始使用新的媒体管理器,那就太好了。;-)

上次编辑时间11年前通过格里芬杰(以前的)(差异)

#5个 @谢尔盖·比尤科夫
11年以前

  • 里程碑已从更改等待审查3.6

#6 @wp史密斯
11年以前

  • 复写的副本 t@…补充

#7 @转到10
11年以前

  • 复写的副本 dromsey@…补充

#8 @莫尔达克
11年以前

  • 复写的副本 pippin@…补充

#9 @sc0ttkclark公司
11年以前

  • 复写的副本 哈哈@…补充

#10 @克里斯万帕顿
11年以前

  • 复写的副本 克里斯@…补充

#11 @莫尔达克
11年以前

  • 复写的副本 pippin@…远离的

#12 后续行动: @缓步前进者
11年以前

  • 复写的副本 布雷迪@…补充

使用向后兼容筛选器添加的任何字段附件字段_编辑已经在新媒体模式中呈现,可以通过挂接保存附件字段保存,由wp_ajax_save_attachment_compat()。这些字段也可以注册以在新的“编辑媒体”屏幕上工作,所以我不确定这里是否真的需要挂钩。

下面是类似的操作:

函数attachment_url_field_23148($form_fields,$post){$form_fields['attachment_url_23148']=数组(“label”=>“Link”,“输入”=>“文本”,“value”=>get_post_meta($post->ID,“attachment_url_23148”,true),“show_in_edit”=>错误,);返回$form_fields;}添加过滤器('附件字段_to_edit','附件字段_23148',10,2);函数save_attachment_url_23148($post,$data){if(isset($data['attachment_url_23148']){update_post_meta($post['ID'],'附件_url_23148',esc_url_raw($data['attachment_url~23148']);}返回$post;}add_filter('附件字段_to_save','保存附件url_23148',10,2);

#13 答复: 12 @格里芬杰
11年以前

回复缓步前进者:

使用向后兼容筛选器添加的任何字段附件字段_编辑…这些字段也可以注册以在新的“编辑媒体”屏幕上工作,所以我不确定这里是否真的需要挂钩。

当您需要对新API使用向后兼容的过滤器时,应该抛出危险信号。我不同意这种观点,并认为这个钩子对于用新媒体API推广好的、有未来意识的代码是必要的。除此之外,新的API是JavaScript,我认为推广一个完全的PHP解决方案并不是一件好事。这个钩子只是打开了Backbone的“模型”部分,以便其他人可以使用它来适当地扩展Backbone的其他API。

#14 随访: @缓步前进者
11年以前

不需要危险信号;那些过滤器API和在实现新媒体模式之前就已经存在了,那么为什么不使用它们呢?只是想帮忙。

#15 答复: 14 @格里芬杰
11年以前

回复缓步前进者:

不需要危险信号;那些过滤器API和在实现新媒体模式之前就已经存在了,那么为什么不使用它们呢?只是想帮忙。

如果我摆脱了指责,我道歉——我保证我不是故意的!也许我应该说,使用现在不是与新API交互的主要方式的代码似乎很奇怪。无论如何,我仍然认为这里的钩子是有益的,因为它允许您利用新的JS媒体代码,而不必编写全新的JS胶来保存添加了JS的自定义字段。:-)

#16 @格里芬杰
11年以前

关于旧代码需要注意的另一件事是,新的JS媒体管理器无法识别WP_Screen设置的任何内容(至少在我的测试中是这样),因此,除非有其他测试方法,否则无法限制附件字段的显示位置。

#17 @缓步前进者
11年以前

在上下文敏感的字段上,不用担心,也很好。在这种情况下$请求全局可用于请求期间激发的每个操作,因此编辑_附件最终应该会接到电话,并按照您的目的正常工作:

函数soliloquy_save_attachment_fields($attachment_id){if(已定义('DOING_AJAX')&&DOING_AJAX&&!空($_REQUEST[“更改”][“对话链接”])update_post_meta($attachment_id,'_solilogy_image_link',esc_url_raw($_REQUEST['changes']['solilogy_link']));}add_action('edit_attachment','soliloquy_save_attachment_fields');

这样的方法行吗?

#18 @瑞恩
11年以前

  • 里程碑已从更改3.6未来版本

#19 @美妙的男孩音乐
10年以前

  • 里程碑 未来版本删除
  • 分辨率设置为馄饨
  • 状态已从更改新的关闭

在15个月内,没有人同意重新使用这个过滤器,我认为有足够的方法来实现你想要的

#20 @pputzer公司
8年以前

  • 分辨率 馄饨删除
  • 状态已从更改关闭重新打开的

@这可能是因为还没有关于如何在插件中使用新的主干API的教程。由生成的compat字段附件字段_编辑他们的行为完全不同,因为他们被扔进了一个<表格>。我正在将我的插件(Media Credit)转换为新的API,虽然可以覆盖JS端的另一个方法,但最好能够连接到现有的wp_ajax_save_attachment(wp_ajax保存附件)行动。

在第一次阅读代码时,我认为可以使用现有的wp_update_attachment_metadata(更新附件元数据)过滤器-直到我注意到它只被调用为类型的附件音频:(

#21 @谢尔盖·比尤科夫
8年以前

  • 里程碑设置为等待审查

这张票是在松弛(Slack)佩佩的《core-media》。查看日志.


7年以前

这张票是在松弛(Slack)在#核心媒体由pepe。查看日志.


7年以前

这张票是在松弛(Slack)乔多尔森的《core-media》。查看日志.


19个月以前

#25 随访: @蚂蚁党
19个月以前

  • 里程碑已从更改等待审查6.2

似乎没有任何理由不添加这个。时间把这张票埋了。转到6.2以获得可见性和结论。

#26 @sc0ttkclark公司
19个月以前

感谢@antpb帮助恢复这一点,它确实是必要的,我渴望在Pods中实现它。

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


19个月以前

这张票是在松弛(Slack)costdev的in#core。查看日志.


15个月以前

@成本开发
15个月以前

针对刷新的修补程序大旅行箱并添加了一个docblock。

#30 @audrasjb公司
15个月以前

啊啊你打败了我@costdev😅

(顺便说一句,你的docblock比我的好)

上次编辑时间15个月前通过audrasjb公司(以前的)(差异)

#31 @audrasjb公司
15个月以前

  • 关键词 需求-开发说明补充

但我发现了一些有趣的东西要补充,所以我至少觉得有点有用🤪

此更改需要在其他更改devnote中提及:)

#32 @成本开发
15个月以前

对不起@audrasjb!😂

是的,我必须仔细检查$帖子,因为它是阵列_A而不是WP_支柱.

@hellofromTonya的额外道具,在适当的吊钩位置上与我一起闪避。

你觉得@audrasjb怎么样?23148.2.差异准备提交考虑,或者您认为它还需要什么(在代码/文档方面)?

#33 @audrasjb公司
15个月以前

  • 所有者设置为audrasjb公司
  • 状态已从更改重新打开的认可的

是的,我觉得你的补丁很好:)

自我分配犯罪.

#34 @audrasjb公司
15个月以前

  • 关键词 犯罪补充

#35 @audrasjb公司
15个月以前

  • 分辨率设置为固定的
  • 状态已从更改认可的关闭

55106:

媒体:在上添加动作挂钩wp_ajax_save_attachment().

此变更集引入了wp_ajax_save_attachment(wp_ajax保存附件)操作挂钩,在更新附件后和发送JSON响应之前触发。例如,它允许开发人员通过扩展媒体视图。附件。细节子视图。

Props griffinjt、bradyvercher、pputzer、antpb、sc0ttkclark、audrasjb、costdev、hellofromTonya。
修复#23148.

@audrasjb公司对发表了评论采购订单号3874:


15个月以前
#36

关闭以支持costdev的补丁

#37 @谢尔盖·比尤科夫
15个月以前

55111:

文件:进一步澄清wp_ajax_save_attachment(保存附件)过滤器参数描述。

后续行动[55106].

请参见#23148.

#38 答复: 25 @阿佐兹
14个月以前

  • 关键词 第二个小齿轮补充;需求-开发说明 犯罪远离的
  • 分辨率 固定的删除
  • 状态已从更改关闭重新打开的

回复蚂蚁党:

似乎没有任何理由不添加这个。

实际上,我认为至少有几个原因:)

  • 这将复制所有保存_发布挂钩。
  • 这张票已经10年没有吸引力了。这意味着没有人对使用这个动作感兴趣,可能是因为还有其他几个钩子可以使用,而且大多数人都很熟悉。

我认为这应该被删除,因为新的动作似乎毫无用处,而罚单以“wontfix”结束。

上次编辑时间14个月前通过氮杂氮(以前的)(差异)

#39个 随访: @sc0ttkclark公司
14个月以前

@azaozz如果没有这个操作,我们就无法知道附件是通过wp_ajax_save_attachment()(保存附件)调用,只是为了从请求变量中嗅出我们能嗅到的东西。我仍然相信,这一行动将为这种流动提供一种官方方式。

我知道你知道Trac车票的吸引力并不总是与车票的有用性相关。在这种情况下,我认为这是因为这是一个不太经常处理的领域:附件字段。有趣的是,这里有一个钩子附件字段保存这很有帮助,但这是对传统媒体的处理。这里实现的操作允许使用AJAX save_attachment操作产生的那个和许多其他用例。

#40 答复: 39;随访: @阿佐兹
14个月以前

回复sc0ttkclark公司:

@azaozz如果没有这个操作,我们就无法知道附件是通过wp_ajax_save_attachment()除了从requestvars中嗅探我们能嗅出的信息外,请调用。

这并不完全正确。这就是DOING_AJAX公司甚至wp_doing_ajax()。此外,所有WP AJAX调用都是通过挂钩完成的,请参阅https://core.trac.wordpress.org/browser/tags/6.1/src/wp-admin/admin-ajax.php#L104https://core.trac.wordpress.org/browser/tags/6.1/src/wp-admin/admin-ajax.php#L164.

似乎很容易确定什么时候wp_ajax_save_attachment()使用时没有新操作。我最喜欢的是:if(doing_action('wp_ajax_save-attachment'))。。。

我仍然相信,这一行动将提供一种正式的方式来吸引这股潮流。

是的,它会的。问题是:谁需要采取行动?

我知道你知道,Trac车票上没有牵引力并不总是与车票的有用性相关。

对的。另一方面,“10年不牵引”通常意味着有其他方法可以达到同样的结果,或者不再需要这个结果。

在这种情况下,我认为这是因为这是一个不太经常处理的领域:附件字段。有趣的是,这里有一个钩子附件字段保存这很有帮助,但这是对传统媒体的处理。这里实现的操作允许使用AJAX save_attachment操作产生的那个和许多其他用例。

我最大的问题是这两个:

  • 在很长一段时间里,这是不需要的。现在似乎不需要。这看起来像是因为插件开发而开出的罚单,作者想要一种“简单的方法”来做一些具体的事情。然后,作者找到了一种现有的/不同的/更好的方法来实现相同的结果,结果票就过时了。
  • 当添加一个新的钩子时,WordPress有责任“永远”维护它。由于这个钩子没有在核心中使用,而且现在似乎没有任何迫切的需求,也没有任何用例甚至证据表明它可能有用(除了在某些情况下它可能会让少数插件更容易一些),我认为在核心代码中添加更多的“向后兼容性要求”不是一个好主意。

如果你相信这将被100-200个插件使用,并且它将使执行某些任务变得更加容易,那么无论如何让我们添加它。最好能有一些迹象表明这一点。但是,如果某个东西没有在核心中使用,并且似乎10年内没有人需要它,而且WP必须永远维护它(即使只有2-3个插件会使用它),我不确定添加它是否是一个好主意。

上次编辑时间14个月前通过阿佐兹(以前的)(差异)

#41 答复: 40;随访: @sc0ttkclark公司
14个月以前

回复阿佐兹:

但是,如果某个东西没有在核心中使用,并且似乎10年内没有人需要它,而且WP必须永远维护它(即使只有2-3个插件会使用它),我不确定添加它是否是一个好主意。

我承认,在这张罚单创建之前,所有希望在此领域进行集成的插件开发人员都一直在使用变通方法来实现这一切。因此,现在我们正在研究这些插件中10多年的代码,这些现有插件要转换到更好的挂钩上会很慢。

我不知道有多少插件作者会认识到这个新的钩子是他们使用过的更好的替代品,这最终会导致缓慢的采用。他们很可能已经忘记了为什么要使用他们的变通方法(除非他们留下代码注释),并将保留该代码。他们不会改变它,因为他们的旧解决方案对他们来说很好。

但新开发人员/项目有机会过上比我们更好的生活:)

我仍然认为这是处理这类事情的正确方法。否则,执行doing_action()将是在没有任何其他可用上下文的情况下处理大多数二级和三级定制的正确方式。

#42 后续行动: @sc0ttkclark公司
14个月以前

如果/当挂钩在WP核心中可用时,我将在Pods框架中实现这一点,所以这只是一个开始。我知道我可以说服构建ACF的WPEngine团队也加入使用。

#43 答复: 41 @阿佐兹
14个月以前

  • 关键词 请求的更改补充

回复sc0ttkclark公司:

希望在此领域进行集成的开发人员一直在使用变通方法来实现这一切

我不会用wp_ajax_save-附件行动是一种变通方法。这是“连接任何AJAX调用的正确方式”。

他们不会改变它,因为他们的旧解决方案对他们来说很好。

是的,确实如此。

但新开发人员/项目有机会过上比我们更好的生活:)

问题是关于平衡:WP项目必须支付的维护“价格”与为少数开发商带来的微小便利相比:)

实际上,更多地考虑新的wp_ajax_save_attachment(wp_ajax保存附件)行动几乎是现有行动的副本wp_ajax_save-附件动作,包括功能和“动作名称”。这可能会令人困惑。

仍然看不到更换的意义doing_action('wp_ajax_save-attachment')具有add_action('wp_ajax_save_attachment',…),但如果每个人都认为这是一个好主意,我们就保留它。然而,考虑新动作至少应该有一个更好/不同的名称,以避免混淆的可能性。

还认为,如果新操作被重命名并保留在核心中,则docblock应该提到它与wp_ajax_save-附件操作,并且可以用doing_action('wp_ajax_save-attachment')如果方便的话。

上次编辑时间14个月前通过阿佐兹(以前的)(差异)

这张票是在松弛(Slack)由mukeshpanchal27完成的核心测试。查看日志.


14个月以前

这张票是在采购订单号4151WordPress/WordPress-develop开发通过@成本开发.


14个月以前
#45

这将重命名wp_ajax_save_attachment(wp_ajax保存附件)对的操作wp_ajax_save_attachment_已更新避免与类似名称的wp_ajax_save-附件行动。

检查是否正在执行操作时,doing_action('wp_ajax_save-attachment')如果方便的话,可以使用。

Trac票:https://core.trac.wordpress.org/ticket/23148

#46 随访: @成本开发
14个月以前

  • 关键词 开发人员反馈补充;请求的更改远离的

@我已经提交了第4151页它重命名wp_ajax_save_attachment(保存附件)对的操作wp_ajax_save_attachment_已更新这更符合特定触发操作的情况。

我还在docblock中添加了一个注释,在检查是否正在执行操作时,doing_action('wp_ajax_save-attachment')如果方便的话,可以使用。

你觉得这些变化怎么样?

这张票是在松弛(Slack)hellofromtonya的《核心》。查看日志.


14个月以前

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


14个月以前

#49 @audrasjb公司
14个月以前

  • 分辨率设置为固定的
  • 状态已从更改重新打开的关闭

55450:

媒体:重命名wp_ajax_save_attachment(wp_ajax保存附件)动作挂钩至wp_ajax_save_attachment_已更新.

此变更集重命名wp_ajax_save_attachment(wp_ajax保存附件)对的操作wp_ajax_save_attachment_已更新避免与类似名称的wp_ajax_save-附件行动。这还添加了一个停靠块注释,以指示在检查操作是否正在执行时,执行操作('wp_ajax_save-attachment')如果更方便的话可以使用。

后续行动[55106].

Props azaozz,sc0ttkclark,costdev公司。
修复#23148

#51 @亚当西尔弗斯坦
14个月以前

  • 关键词 需求-开发说明补充

#52 答复: 46 @阿佐兹
14个月以前

回复成本开发:

我还在docblock中添加了一个注释,在检查是否正在执行操作时,

听起来不错。我想进一步扩展文档并解释一下:

  • 有一个wp_ajax_save-附件非常相似的动作,并且提前触发。
  • 新的wp_ajax_save_attachment_已更新与使用任何“save_post”挂钩完全等效(重复?):
    • 这个清理post_field()过滤器:pre{$field}{$field_no_prefix}_save_prepre_post_{$field}、和{$field}_重新.
    • wp_insert_post_empty_content内容,
    • wp_插入_附件_数据,
    • 更新前发布,
    • 编辑_附件,
    • 附件_已更新,

并使用if(doing_action('wp_ajax_save-attachment')).

因为这只是一个文档更新,所以可以随时添加。似乎这也应该在开发说明中提及。

上次编辑时间14个月前通过阿佐兹(以前的)(差异)

#53 答复: 42 @阿佐兹
14个月以前

  • 关键词 需求-文档补充

回复sc0ttkclark公司:

我将在Pods框架中实现这一点

抱歉,但我仍在努力理解为什么附件_已更新在这种情况下不能使用钩子。如果您能提供更多信息,将非常有帮助:

  1. 当此操作可用时,将替换一些现有代码的示例或链接。
  2. 简要解释为什么不能使用附件_已更新具有doing_action('wp_ajax_save-attachment').

据我所知wp_ajax_save_attachment_已更新是的副本附件_已更新.

我猜报案人不知道wp_ajax_save-附件行动和使用的可能性执行操作('wp_ajax_save-attachment')然而,当试图修改附件的保存时,似乎其他挂钩之一(在之前的评论中提到)无论如何都必须使用。这似乎进一步限制了新的wp_ajax_save_attachment_已更新.

还有,你要写提款单吗?你能不能也包括上面列出的其他挂钩被触发的。我会确保将它们添加到docblock并链接到此票据以供进一步参考。

#54 随访: @彼得威尔逊公司
14个月以前

无论哪种方式我都可以相信,但我在这里有点同意Aaron的观点,那就是它将来自wp_insert_post()功能。记录使用doing_action('wp_ajax_save-attachment')这增加了混乱,因为这似乎可以在现有挂钩中完成。

最好知道这带来了什么好处,而这些好处是通过以下方式无法实现的:

<?php(电话)
添加操作(_A)( 'wp_after_insert_post', 功能( $帖子, $is_update(更新), $post_before之前 ) {
 如果 ( ! doing_action(正在执行操作)( 'wp_ajax_save-attachment' ) ) {
  返回;
 }

 //等等。}, 10000,  );

wp_后插入_后之所以选择这个钩子,是因为它是在这个钩子之前运行的,但这可能适用于前面提到的许多钩子。

值得注意的是几个插件可以替换这个wp_ajax_save-附件并且在核心版本运行之前就死了(我看到的最高版本有20万次安装),所以建议人们使用新挂钩可能会导致问题,直到这些插件实现它。我在实现DAM的客户服务日里做过一两次。

#55 答复:54个 @谢尔盖·比留科夫
14个月以前

  • 分辨率 固定的删除
  • 状态已从更改关闭重新打开的

回复彼得威尔逊公司:

无论哪种方式我都可以相信,但我在这里有点同意Aaron的观点,那就是它将来自wp_insert_post()功能。记录使用doing_action('wp_ajax_save-attachment')这增加了混乱,因为这似乎可以在现有挂钩中完成。

事实上,这看起来很像#28112对我来说批量编辑支柱钩子被收回[55265]等待确认是否确实需要,特别是在票务报告员显然能够使用现有挂钩实现目标之后。

按照中的建议重新打开以进一步改进文档评论:52,或者现在返回到6.3,以便更好地了解是否需要这个钩子,以及应该如何实现它。

上次编辑时间14个月前通过谢尔盖·比尤科夫(以前的)(差异)

这张票是在松弛(Slack)由mukeshpanchal27完成的核心测试。查看日志.


14个月以前

#57 @成本开发
14个月以前

这张票是在bug清理期间讨论过的。

随着我们接近RC1,仍然有人担心这个钩子是否有必要,我和@mukesh27同意应该将其恢复并移至6.3进行进一步讨论。

#58 @audrasjb公司
14个月以前

55474:

媒体:还原wp_ajax_save_attachment_已更新挂钩。

此变更集删除wp_ajax_save_attachment_已更新通过复位钩住[55106],[55111]、和[55450],以便有更多的时间进行进一步讨论,因为仍有人担心这个挂钩是否必要。

后续行动[55106],[55111],[55450].

Props costdev、SergeyBiryukov、peterwilsoncc、azaozz。
请参见#23148.

#59 @audrasjb公司
14个月以前

  • 里程碑已从更改6.26.3

已还原。动议6.3审议。

#60 @sc0ttkclark公司
14个月以前

我将从我现在如何使用这个区域的钩子来深入研究这个问题,以便在未来几周的某个时候提供更好的反馈。

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


13个月以前

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


12个月以前

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


11个月以前

这张票是在松弛(Slack)antpb的#core-media中。查看日志.


10个月以前

#65 @蚂蚁党
10个月以前

  • 里程碑已从更改6.3未来版本

如果这是对现有功能的复制,我们还没有达成一致意见,请移动未来版本。一旦确定了理由,我们就可以回到发布里程碑。

注:请参见TracTickets公司有关使用的帮助门票。