.attachment-266x266, .thumbnail img {
width: 100% !important;
height: auto !important;
}
';
}
add_action('admin_head', 'fix_svg_display');
// اضافه کردن دکمه تبدیل به SVG
function add_svg_convert_button($form_fields, $post) {
// فقط برای تصاویر
if (strpos($post->post_mime_type, 'image') !== false && $post->post_mime_type !== 'image/svg+xml') {
$form_fields['convert_to_svg'] = array(
'label' => 'تبدیل به SVG',
'input' => 'html',
'html' => '
'
);
}
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'add_svg_convert_button', 10, 2);
// اضافه کردن JavaScript برای تبدیل
function add_svg_converter_scripts() {
global $pagenow;
if ($pagenow == 'upload.php' || $pagenow == 'post.php' || $pagenow == 'media-upload.php') {
?>
$upload_dir['url'] . '/' . $svg_filename,
'post_mime_type' => 'image/svg+xml',
'post_title' => pathinfo($svg_filename, PATHINFO_FILENAME),
'post_content' => '',
'post_status' => 'inherit'
);
$svg_attachment_id = wp_insert_attachment($attachment, $svg_path);
if ($svg_attachment_id) {
wp_send_json_success(array(
'id' => $svg_attachment_id,
'url' => wp_get_attachment_url($svg_attachment_id)
));
} else {
wp_send_json_error('خطا در ایجاد فایل SVG در کتابخانه');
}
} else {
wp_send_json_error('خطا در تبدیل تصویر');
}
}
add_action('wp_ajax_convert_image_to_svg', 'convert_image_to_svg_ajax');
// تابع تبدیل تصویر به SVG
function create_svg_from_image($image_path, $attachment_id) {
// گرفتن اطلاعات تصویر
$image_info = getimagesize($image_path);
if (!$image_info) return false;
$width = $image_info[0];
$height = $image_info[1];
$mime_type = $image_info['mime'];
// تبدیل تصویر به base64
$image_data = file_get_contents($image_path);
$base64 = base64_encode($image_data);
// ایجاد SVG
$svg_content = '
';
return $svg_content;
}
// نسخه بهتر: استفاده از Potrace برای تبدیل به SVG واقعی (اختیاری)
function create_traced_svg($image_path) {
// این تابع برای استفاده از ابزارهای خارجی مثل Potrace
// نیاز به نصب Potrace روی سرور دارد
$output_path = pathinfo($image_path, PATHINFO_DIRNAME) . '/' .
pathinfo($image_path, PATHINFO_FILENAME) . '_traced.svg';
// تبدیل به bitmap اول
$bitmap_path = pathinfo($image_path, PATHINFO_DIRNAME) . '/' .
pathinfo($image_path, PATHINFO_FILENAME) . '.bmp';
// فقط در صورت وجود ImageMagick
if (extension_loaded('imagick')) {
try {
$imagick = new Imagick($image_path);
$imagick->setImageFormat('bmp');
$imagick->writeImage($bitmap_path);
// اجرای Potrace (اگر نصب باشد)
$command = "potrace -s -o " . escapeshellarg($output_path) . " " . escapeshellarg($bitmap_path);
exec($command, $output, $return_code);
// پاک کردن فایل موقت
unlink($bitmap_path);
if ($return_code === 0 && file_exists($output_path)) {
return file_get_contents($output_path);
}
} catch (Exception $e) {
// در صورت خطا از روش قبلی استفاده میکنیم
}
}
return false;
}
// اضافه کردن ستون SVG در لیست رسانهها
function add_svg_column($columns) {
$columns['svg_status'] = 'SVG';
return $columns;
}
add_filter('manage_media_columns', 'add_svg_column');
function show_svg_column_content($column_name, $attachment_id) {
if ($column_name === 'svg_status') {
$mime_type = get_post_mime_type($attachment_id);
if ($mime_type === 'image/svg+xml') {
echo '✓ SVG';
} elseif (strpos($mime_type, 'image') !== false) {
echo '';
}
}
}
add_action('manage_media_custom_column', 'show_svg_column_content', 10, 2);
// CSS برای بهبود نمایش
function add_svg_admin_styles() {
echo '';
}
add_action('admin_head', 'add_svg_admin_styles');
?>
ویژگیهای کد:
دکمه تبدیل: در صفحه ویرایش رسانه، زیر هر تصویر یک دکمه “تبدیل به SVG” اضافه میشه
ستون SVG: در لیست رسانهها یک ستون جدید اضافه میشه که وضعیت SVG رو نشون میده
پشتیبانی از SVG: اجازه آپلود فایلهای SVG رو میده
تبدیل خودکار: تصاویر رو به فرمت SVG تبدیل میکنه و در کتابخانه رسانه ذخیره میکنه
نحوه استفاده:
- کد رو در
functions.phpقالبت کپی کن - به بخش رسانه بروی
- روی هر تصویر کلیک کن
- دکمه “تبدیل به SVG” رو ببین و کلیک کن
- فایل SVG جدید در کتابخانه رسانهات ذخیره میشه
نکات مهم:
- این کد تصاویر رو به SVG تبدیل میکنه ولی کیفیت بردار واقعی نداره (فقط تصویر رو در SVG قرار میده)
- برای تبدیل واقعی به بردار، نیاز به ابزارهای پیشرفتهتر مثل Potrace داری
- کد امن هست و از nonce استفاده میکنه
- با تمام نسخههای وردپرس سازگار هست