WordPress 挂钩/过滤器来处理帖子内的链接

2024-01-09

有没有挂钩/过滤器来处理添加到 WordPress 帖子中的链接 ?

我的目标是预处理链接使用以下按钮插入帖子中并使用第三方 API(如 bit.ly)缩短它

我想对内部/外部链接执行此操作。

我想到的一个解决方案是向我的编辑器添加一个额外的按钮可以做到这一点,但我更喜欢一个钩子/过滤器来完成这项工作,这样它会更干净,我会将其转换为我的网站的自定义插件(从而允许我的 WordPress 升级)。

我浏览了 WordPress 文档并浏览了以下对我没有用的钩子/过滤器

  1. https://developer.wordpress.org/reference/hooks/add_link/ https://developer.wordpress.org/reference/hooks/add_link/

  2. https://developer.wordpress.org/reference/hooks/post_link/ https://developer.wordpress.org/reference/hooks/post_link/

  3. 以及这里列出的大多数https://developer.wordpress.org/?s=li​​nk https://developer.wordpress.org/?s=link


Update 1:据我所知,外部 URL 是通过 TinyMCE 编辑器链接插件插入到帖子内容中的,PHP 不执行任何操作。

在 WordPress 中,有两个插件位于wp-includes/js/wplink.js and wp-includes/js/tinymce/plugins/wplink/plugin.js。请注意,如果您不在SCRIPT_DEBUG模式,他们有.min suffix.

  1. wp-includes/js/wplink.js 处理此对话框:

要过滤通过此对话框插入的 URL,我们必须覆盖wpLink.getAttrs方法。例如,要添加so39115564字符串到每个 URL:

jQuery(document).ready(function($) {
  wpLink.getAttrs = function() {
    wpLink.correctURL();
    return {
      href: $.trim( $("#wp-link-url").val() + "so39115564" ),
      target: $("#wp-link-target").prop("checked") ? "_blank" : ""
    };
  }
});

你应该看看wp-includes/js/wplink.js了解更多信息。篇幅太长,这里无法详细解释。

假设上面的脚本是mylink.js,这是我们应该如何将其排队:

add_filter('admin_enqueue_scripts', function()
{
  // { Maybe some conditions for a valid screen here. }

  wp_enqueue_script('mylink', 'link/to/the/mylink.js', ['link'], '1.0', true);
}, 0, 0);
  1. wp-includes/js/tinymce/plugins/wplink/plugin.js 处理此对话框:

这次,我们还必须覆盖setURL的方法tinymce.ui.WPLinkPreview。但是,它是几乎不可能,除非您取消注册此脚本并注册修改版本。然后使用 WordPress 中不可预测的更改自行管理该脚本。

现在,明智地选择吧!在将任何外部 URL 粘贴到您的帖子中之前缩短它们,或者使用 WordPress TinyMCE 插件或使用对话框wp-includes/js/wplink.js plugin.


是的! WordPress 通过以下方式插入内联链接wp_link_ajax执行的动作wp_ajax_wp_link_ajax() https://developer.wordpress.org/reference/functions/wp_ajax_wp_link_ajax/功能。

正如您在该函数的源代码中看到的那样,$results检索者为_WP_Editors::wp_link_query。看看这个方法,你会遇到wp_link_query https://developer.wordpress.org/reference/hooks/wp_link_query/筛选。该过滤器接受两个参数:$results and $query. $results将是我们需要过滤的内容。

例如,我们需要附加so39115564到查询的链接:

add_filter('wp_link_query', function(array $results, array $query)
{
  $results[0]['permalink'] = $results[0]['permalink'] . 'so39115564';

  return $results;
}, PHP_INT_MAX, 2);

现在,您应该知道该怎么做了。请务必看一下_WP_Editors::wp_link_query https://developer.wordpress.org/reference/classes/_wp_editors/wp_link_query/来过滤$results更高效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WordPress 挂钩/过滤器来处理帖子内的链接 的相关文章

  • 将 docker-compose.yml 中的包安装到 docker 容器中

    我是 docker 和 docker compose 的初学者 我需要你的帮助 我正在使用 docker compose 制作 PHP NGINX PostgresQL symfony 开发环境 这里是 web image nginx 1
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已
  • Laravel 内存问题?

    各位 我在 DO 服务器上遇到这样的问题 我已经尝试了一切 整个网站在使用 Homestead 的 Linux 服务器上 100 正常工作 但上传后 它只能工作一次 在重新加载或刷新页面后会多次下降 我尝试增加 apache 服务器的内存
  • yii2 更新后返回上一页

    更新记录后如何将用户重定向到上一页 这是典型的场景 用户在索引页面中过滤结果或对记录进行分页 然后找到想要编辑的记录并单击编辑按钮 他们更新该记录的数据 一旦单击 更新 按钮 他们将被重定向到索引视图 但具有先前选择的过滤器 页面 更新后我
  • 表单提交到白页?

    所以我有一个用于我的注册系统的表格 当表单提交并出现错误时 例如 首先输入用户名 或 您必须提供密码 它会成功刷新页面并显示这些错误 但是 当表单提交并且用户填写了所有数据并且没有错误时 表单将转到白色页面 我查看了源代码 所有显示的都是页
  • 在 Yii2 中从数据库中多态查找模型

    我在数据库 mysql 中有一张表 但该表存储了几种略有不同类型的行 类型取决于此表的type柱子 我有一个表的抽象 ActiveRecord 类和几个后代子类 它们为不同类型的同一表的行实现略有不同的逻辑 现在我正在为所有类型的行实现更新
  • 如何在加载ajax内容和javascript时加载gif图像[重复]

    这个问题在这里已经有答案了 我一直在尝试加载 gif 图像 直到 ajax 加载数据并显示它 但我对此感到安慰 我希望你能帮助我 这是我的高级搜索代码 现在我想为此添加加载 gif ajax type POST url base rul s
  • 用于自定义短代码的 Visual Composer 自定义标记 (vc_map)

    试图得到自定义标记使用 WordPress 的 Visual Composer 构建器 Found Visual Composer 更改自定义短代码模板 https stackoverflow com questions 24073053
  • 在应用程序上按下类似按钮时自动刷新时间线页面?

    在时间轴发布到页面上之前 当用户在页面上按下 点赞 按钮时 页面会自行刷新 现在 启用时间线后 如果您访问应用程序并按右上角的类似按钮 页面不会自行刷新 并且应用程序不会识别用户 喜欢 该页面 当用户按下 喜欢 按钮时 是否有一种方法或事件
  • 单击时获取元素的 id(php、jquery、ajax、javascript)

    抱歉 这是我的第一个项目 我学到了很多东西 因此 如果有人可以帮助我 我将不胜感激 我的项目中有这个侧边栏 其中包含 rss 链接 我必须使用 ajax 因此每次用户单击任何 rss 链接时 提要都会出现在屏幕上 这是我的侧边栏代码 div
  • 更改 Symfony2 中的默认语言环境

    我正在尝试更改应用程序的默认区域设置 到目前为止我尝试过的事情 将 intl default locale 设置为 et EE 将区域设置设置为 et app config parameters ini 更改了我的捆绑包 boot 方法中描
  • 扩展 Codeigniter Exceptions 类以添加自定义方法

    我创建了一个新方法来处理 401 apache 错误 我的核心类扩展了 CI 核心类 但是当我调用方法名称时 我收到此消息 致命错误 调用未定义的函数show 401 in G Path application controllers lo
  • Symfony2 Beta3 中不断收到“您请求了一个不存在的服务“test.client””

    我正在尝试设置单元测试 但每当我运行 phpunit c app 时 我都会收到此错误 Symfony Component DependencyInjection Exception ServiceNotFoundException 您请求
  • 无法使用 PHP mail() 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件

    我尝试使用 codeigniter 框架发送邮件 但它会引发错误 无法使用 PHP mail 发送电子邮件 您的服务器可能未配置为使用此方法发送邮件 From prakash t lt email protected cdn cgi l e
  • 错误:SQLSTATE[HY000] [2002] 无法建立连接,因为目标计算机主动拒绝连接

    当我调试代码时突然发生错误 它有一系列关于数据库连接的错误 ERROR SQLSTATE HY000 2002 No connection could be made because the target machine actively
  • 根据产品类别自定义购物车总计和结帐总计文本

    我想根据产品类别 或其他一些逻辑 自定义购物车和结帐订单汇总表中的文本 例如 对于 总计 文本 参见图片 如果购物车包含名为 杂货 的类别中的产品 那么我希望订单摘要中的文本显示为 总计估计 文本 参见图片以下 如果购物车不包含任何杂货 那
  • 如何对“2-1”这样的字符串进行数学计算以产生“1”?

    我只是想知道 PHP 是否有一个函数可以接受像这样的字符串2 1并产生它的算术结果 或者我必须手动执行此操作explode 获取算术运算符左侧和右侧的值 我知道这个问题很老了 但我昨晚在寻找不太相关的东西时遇到了它 而且这里的每个答案都很糟

随机推荐