wordpress admin sayfasında media dosyalarını ve boyutlarını gösterme
Gönderilme zamanı: Cum Şub 21, 2025 7:53 pm
dosya yapısıKod:Tümünü seç
bir wordpress uygulaması yapalım. bu uygulama admin sayfasında media dosyalarını ufak ön izlemesi ile listelesin. dosya adını ve dosyanın boyutunu göstersin. ufak ön izlemesine tıklayınca aynı pencerede popup gerçek görüntüsünü göstersin. kullanıcı her sayfada kaç adet görüntüleneceğini seçebilsin 5-10-20-50-100 gibi. ayrıca boyuta göre sıralama yapabilsin. azalan yada artan şeklinde
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
wp-content/plugins/custom-media-library/ ├── custom-media-library.php ├── css/ │ └── admin.css └── js/ └── admin.js
Kod:Tümünü seç
custom-media-library.php------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
<?php /* Plugin Name: Gelişmiş Medya Yöneticisi Description: Medya kütüphanesine önizleme, sıralama ve filtreleme özellikleri ekler. Version: 1.0 Author: Sizin Adınız Text Domain: gelismis-medya-yoneticisi */ defined('ABSPATH') || die('Doğrudan erişim engellendi!'); // Aktivasyon hook'u register_activation_hook(__FILE__, 'gmy_activate'); function gmy_activate() { $attachments = get_posts([ 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'inherit', ]); foreach ($attachments as $attachment) { gmy_save_filesize($attachment->ID); } } // Dosya boyutunu meta veri olarak kaydet add_filter('wp_generate_attachment_metadata', 'gmy_save_filesize_meta', 10, 2); function gmy_save_filesize_meta($metadata, $attachment_id) { gmy_save_filesize($attachment_id); return $metadata; } function gmy_save_filesize($attachment_id) { $file_path = get_attached_file($attachment_id); if (file_exists($file_path)) { $file_size = filesize($file_path); update_post_meta($attachment_id, '_gmy_filesize', $file_size); } } // Admin stil ve scriptleri add_action('admin_enqueue_scripts', 'gmy_admin_assets'); function gmy_admin_assets($hook) { if ('upload.php' !== $hook) return; wp_enqueue_style( 'gmy-admin-css', plugins_url('css/admin.css', __FILE__), [], filemtime(plugin_dir_path(__FILE__) . 'css/admin.css') ); wp_enqueue_script( 'gmy-admin-js', plugins_url('js/admin.js', __FILE__), ['jquery'], filemtime(plugin_dir_path(__FILE__) . 'js/admin.js'), true ); } // Medya sütunlarını özelleştir add_filter('manage_media_columns', 'gmy_media_columns'); add_action('manage_media_custom_column', 'gmy_media_custom_columns', 10, 2); function gmy_media_columns($columns) { unset($columns['icon']); $columns['thumbnail'] = __('Ön İzleme', 'gelismis-medya-yoneticisi'); $columns['filesize'] = __('Dosya Boyutu', 'gelismis-medya-yoneticisi'); return $columns; } function gmy_media_custom_columns($column_name, $post_id) { if ($column_name === 'thumbnail') { $url = wp_get_attachment_url($post_id); $thumb = wp_get_attachment_image($post_id, 'thumbnail', true); echo '<a href="'.esc_url($url).'" class="gmy-preview">'.$thumb.'</a>'; } elseif ($column_name === 'filesize') { $size = get_post_meta($post_id, '_gmy_filesize', true); echo $size ? size_format($size, 2) : 'N/A'; } } // Sıralama özelliği add_filter('manage_upload_sortable_columns', 'gmy_sortable_columns'); add_action('pre_get_posts', 'gmy_sort_filesize'); function gmy_sortable_columns($columns) { $columns['filesize'] = 'filesize'; return $columns; } function gmy_sort_filesize($query) { if (!is_admin() || !$query->is_main_query() || $query->get('orderby') !== 'filesize') return; $query->set('meta_key', '_gmy_filesize'); $query->set('orderby', 'meta_value_num'); } // Sayfa başına öğe seçimi add_action('restrict_manage_media', 'gmy_items_per_page'); add_filter('parse_query', 'gmy_filter_items_per_page'); function gmy_items_per_page() { $per_page = $_GET['per_page'] ?? 20; ?> <label><?php _e('Gösterim:', 'gelismis-medya-yoneticisi'); ?> <select name="per_page" onchange="this.form.submit()"> <?php foreach ([5,10,20,50,100] as $num): ?> <option value="<?= $num ?>" <?php selected($per_page, $num) ?>> <?= $num ?> </option> <?php endforeach; ?> </select> </label> <?php } function gmy_filter_items_per_page($query) { if (!is_admin() || !$query->is_main_query()) return; if (isset($_GET['per_page']) && in_array($_GET['per_page'], [5,10,20,50,100])) { $query->set('posts_per_page', $_GET['per_page']); } } // Popup HTML add_action('admin_footer', 'gmy_popup_html'); function gmy_popup_html() { ?> <div id="gmy-popup" style="display:none"> <div class="gmy-popup-content"> <img src="" alt="<?php _e('Ön izleme', 'gelismis-medya-yoneticisi'); ?>"> <button class="gmy-close">×</button> </div> </div> <?php }
Kod:Tümünü seç
admin.css------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
/* Medya Listesi Stilleri */ .widefat .column-thumbnail { width: 120px; } .gmy-preview img { max-width: 100px; height: auto; cursor: pointer; transition: transform 0.3s ease; } .gmy-preview:hover img { transform: scale(1.05); } /* Popup Stilleri */ #gmy-popup { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.9); z-index: 999999; display: flex; align-items: center; justify-content: center; } .gmy-popup-content { position: relative; background: #fff; padding: 15px; border-radius: 8px; max-width: 80%; max-height: 80vh; } .gmy-popup-content img { display: block; max-width: 100%; height: auto; border-radius: 4px; } .gmy-close { position: absolute; top: -10px; right: -10px; background: #ff4444; color: white; border: none; border-radius: 50%; width: 28px; height: 28px; cursor: pointer; font-size: 18px; line-height: 28px; padding: 0; }
Kod:Tümünü seç
admin.js------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
jQuery(document).ready(function($) { // Popup Açma $('.gmy-preview').on('click', function(e) { e.preventDefault(); const imgUrl = $(this).attr('href'); $('#gmy-popup').fadeIn(300).find('img').attr('src', imgUrl); }); // Popup Kapatma $('#gmy-popup').on('click', function(e) { if ($(e.target).closest('.gmy-popup-content').length === 0) { $(this).fadeOut(200); } }); $('.gmy-close').on('click', function() { $('#gmy-popup').fadeOut(200); }); });