我们的图像和 PDF 位于服务器上的自定义位置。它们的 URL 包含一个名称中带有大括号的文件夹,如下所示:/{folder-name}/。我知道名称中带有大括号的文件夹不好,但我们现在坚持使用它。
上传图像后,“媒体”选项卡中图像显示的最终 URL 是正确的,并且包含大括号。当我尝试将图像嵌入到帖子中时,花括号会被去掉,就像这样 /folder-name/ 一样,最终的 URL 不再有效。预览帖子时图像已损坏。
显示嵌入过程的屏幕截图:
显示 WP Embed 叠加层的图像。此时图片URL仍然是正确的。
嵌入后,img 标签位于帖子中,但大括号已从图像路径 /folder-name/
中删除问题 如何关闭在帖子中嵌入图像时发生的图像 URL 清理功能? 是否有一个函数可以强制嵌入使用原始附加图像 URL 而不是经过清理的版本?
我尝试在functions.php 文件中添加以下内容。没有任何效果:
add_filter( 'sanitize_url', static function( $filtered, $original_string ) { return $original_string; }, 10, 2 );
add_filter( 'sanitize_textarea_field', static function( $filtered, $original_string ) { return $original_string; }, 10, 2 );
我还查看了“wp_get_attachment_url”,但我不明白如何创建一个返回原始未修改 URL 的函数。这不行。
add_filter('wp_get_attachment_url', 'return_non_modified_url');
function return_non_modified_url($url) {
return $original_string;
}
感谢您的帮助。
此问题的根本原因是 WordPress 出于安全原因对 URL 进行清理,我们可以借助
wp_get_attachment_url
钩子来阻止 WordPress 执行此操作。
请将给定代码添加到主题的
functions.php
文件中。
add_filter( 'wp_get_attachment_url', 'preserve_embed_attachment_url', 10, 2 );
function preserve_embed_attachment_url( $url, $post_id ) {
// Here we are getting the original URL directly from the database without modification.
global $wpdb;
$original_url = $wpdb->get_var( $wpdb->prepare("SELECT guid FROM $wpdb->posts WHERE ID = %d", $post_id) );
// Here are returning the original attachment URL.
return $original_url ? $original_url : $url;
}