1. 启用 Options Framework
确保你使用的是支持 Options Framework 的 WordPress 主题,或者手动集成该框架。
如果你已经在使用 Options Framework(比如主题自带 admin/options.php),直接跳过。
2. 添加设置项到 Options Framework
在主题目录的 /admin/options.php 文件中,添加如下字段配置:
$settings[] = array( 'name' => '图片水印设置', 'type' => 'heading' ); $settings[] = array( 'name' => '启用图片水印', 'id' => 'enable_image_watermark', 'type' => 'checkbox', ); $settings[] = array( 'name' => '水印图片', 'id' => 'custom_watermark_image', 'type' => 'upload' ); $settings[] = array( 'name' => '水印位置', 'id' => 'watermark_position', 'type' => 'select', 'options' => array( 'top-left' => '左上角', 'top-center' => '上居中', 'top-right' => '右上角', 'middle-left' => '左中', 'center' => '正中心', 'middle-right' => '右中', 'bottom-left' => '左下角', 'bottom-center' => '下居中', 'bottom-right' => '右下角' ), 'std' => 'bottom-right' );
后台将自动生成配置界面,允许用户控制水印功能。
3. 编写水印处理逻辑(放入 functions.php)
add_filter('wp_handle_upload', 'add_watermark_from_optionsframework'); function add_watermark_from_optionsframework($upload) { if (!of_get_option('enable_image_watermark')) return $upload; $image_path = $upload['file']; $image_type = mime_content_type($image_path); if (!in_array($image_type, ['image/jpeg', 'image/png'])) return $upload; $image = $image_type === 'image/jpeg' ? imagecreatefromjpeg($image_path) : imagecreatefrompng($image_path); if (!$image) return $upload; $watermark_url = of_get_option('custom_watermark_image'); if (!$watermark_url) return $upload; $tmp = download_url($watermark_url); if (is_wp_error($tmp)) return $upload; $original_wm = imagecreatefrompng($tmp); imagealphablending($original_wm, true); imagesavealpha($original_wm, true); $img_w = imagesx($image); $img_h = imagesy($image); $target_wm_w = intval($img_w * 0.15); $scale = $target_wm_w / imagesx($original_wm); $target_wm_h = intval(imagesy($original_wm) * $scale); $watermark = imagecreatetruecolor($target_wm_w, $target_wm_h); imagealphablending($watermark, false); imagesavealpha($watermark, true); $transparent = imagecolorallocatealpha($watermark, 0, 0, 0, 127); imagefill($watermark, 0, 0, $transparent); imagecopyresampled( $watermark, $original_wm, 0, 0, 0, 0, $target_wm_w, $target_wm_h, imagesx($original_wm), imagesy($original_wm) ); $position = of_get_option('watermark_position', 'bottom-right'); $margin = 10; $positions = [ 'top-left' => [$margin, $margin], 'top-center' => [($img_w - $target_wm_w) / 2, $margin], 'top-right' => [$img_w - $target_wm_w - $margin, $margin], 'middle-left' => [$margin, ($img_h - $target_wm_h) / 2], 'center' => [($img_w - $target_wm_w) / 2, ($img_h - $target_wm_h) / 2], 'middle-right' => [$img_w - $target_wm_w - $margin, ($img_h - $target_wm_h) / 2], 'bottom-left' => [$margin, $img_h - $target_wm_h - $margin], 'bottom-center' => [($img_w - $target_wm_w) / 2, $img_h - $target_wm_h - $margin], 'bottom-right' => [$img_w - $target_wm_w - $margin, $img_h - $target_wm_h - $margin], ]; [$x, $y] = $positions[$position] ?? $positions['bottom-right']; imagecopy($image, $watermark, $x, $y, 0, 0, $target_wm_w, $target_wm_h); if ($image_type === 'image/jpeg') { imagejpeg($image, $image_path, 90); } else { imagepng($image, $image_path); } imagedestroy($image); imagedestroy($watermark); imagedestroy($original_wm); @unlink($tmp); return $upload; }
4. 使用方法
进入 WordPress 后台 → 主题设置
上传你想要作为水印的 PNG 图(建议带透明背景)
启用水印功能
选择水印显示位置
上传任意图片,自动加水印!
5. 总结
这一功能完全基于代码实现,不依赖任何第三方插件,灵活、安全、高效。你可以轻松为所有上传图片添加品牌标识,也可以根据需求扩展更多逻辑(如只对某些尺寸图片加水印、仅管理员用户触发水印等)。