Update 1:据我所知,外部 URL 是通过 TinyMCE 编辑器链接插件插入到帖子内容中的,PHP 不执行任何操作。
在 WordPress 中,有两个插件位于wp-includes/js/wplink.js
and wp-includes/js/tinymce/plugins/wplink/plugin.js
。请注意,如果您不在SCRIPT_DEBUG
模式,他们有.min
suffix.
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);
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
更高效。