WordPress图像渲染前的filter/action使用:如何修改图片URL实现水印添加?
解决方案
1. 拦截wp_get_attachment_image_src()返回值修改图片URL
直接使用WordPress内置的wp_get_attachment_image_src过滤器即可实现URL修改,示例代码如下:
add_filter( 'wp_get_attachment_image_src', 'custom_watermark_image_url', 10, 4 ); function custom_watermark_image_url( $image, $attachment_id, $size, $icon ) { // 仅处理图片类型附件,排除图标等其他资源 if ( ! $image || wp_attachment_is( 'image', $attachment_id ) === false ) { return $image; } // 原图片URL存储在$image[0]中,替换为你的水印图片生成路径 $original_url = $image[0]; $watermark_url = str_replace( 'wp-content/uploads', 'wp-content/uploads/watermarked', $original_url ); // 替换返回的URL,宽高参数保持不变 $image[0] = $watermark_url; return $image; }
上述代码可放在主题的functions.php文件或者自定义插件中生效,路径替换规则可根据你的水印文件存储逻辑自行调整。
2. 通过附件URL反查附件ID,生成缩略图
如果只有wp_get_attachment_url()返回的URL,可使用attachment_url_to_postid()函数直接反查对应的附件ID,示例代码如下:
// 你已获取到的附件原始URL $image_url = wp_get_attachment_url(); $attachment_id = attachment_url_to_postid( $image_url ); if ( $attachment_id ) { // 成功获取ID后即可生成指定尺寸的缩略图 $thumbnail_src = wp_get_attachment_image_src( $attachment_id, 'thumbnail' ); }
该函数会自动匹配数据库中存储的附件路径,只要是通过WordPress标准流程上传的附件都可以正常查询到对应ID。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

