ai sorulacakKod:Tümünü seç
Yeni bir klasörde bir Wordpress uygulaması yapalım. -uygulama yazıların gösterim sayısını manuel artırıp azaltma uygulaması olup ana sayfada işlem yapabilecek. -Uygulama admin sayfasında ayar arayüzü olsun ve etkin liği aktif pasif seçilebilsin. -Bu uygulamada yine bir textboxa virgülle adı yazılan kullanıcı veya kullanıcılara görünür olacak. -Bu uygulama aktif ve giriş yapmış adı yazılmış olan kullanıcıya her yazının görseli üzerine sol üst köşesine yan yana yukarı ve aşağı ok ikonu ekleyecek. -yukarı ok tuşuanında yazının gösterim sayısını artırırken aşağı ok tuşu ise azaltacak. -ama eddiğim gibi bu ikonlar sadece belirtilen kullanıcıya giriş yapmışsa görünecek.
Wordpress admin gösterim sayısını artırma
Wordpress admin gösterim sayısını artırma
Re: Wordpress admin gösterim sayısını artırma
ayrı bir klasör olsun klasör yapısını paylaşır mısın
--------------------------------------------------25 saniye hakkında Akıl yürütüldüArayüz Eklenti Adı:Kod:Tümünü seç
Manual Post Views
Aşağıda, tanımladığınız özellikleri karşılayan basit bir WordPress eklentisi örneği sunuyorum. Bu örnekte:
Admin Ayar Sayfası: Eklenti “Ayarlar” altında bir sayfa oluşturur. Bu sayfada eklentinin aktif/pasif durumu için bir onay kutusu ve virgülle ayrılmış kullanıcı adlarının girilebileceği bir metin kutusu yer alır.
Ön Yüzde Görünüm: Eklenti, eklenti aktifse ve giriş yapan kullanıcının kullanıcı adı, ayar sayfasında belirtilen kullanıcılar arasındaysa, her gönderinin öne çıkan görselinin sol üst köşesine iki ok (yukarı: artır, aşağı: azalt) ekler.
AJAX İşlemleri: Kullanıcı ikonlara tıkladığında AJAX çağrıları ile gönderiye ait “manuel gösterim sayısı” meta değeri güncellenir.
Aşağıdaki dosyaları eklenti klasörünüzde oluşturabilirsiniz:------------------------Kod:Tümünü seç
manual-post-views.phpKod:Tümünü seç
<?php /* Plugin Name: Manual Post Views Description: Gönderilerin gösterim sayısını manuel olarak artırıp azaltmaya yarayan eklenti. Version: 1.0 Author: İsim Soyisim */ // Admin ayar sayfasını oluştur add_action('admin_menu', 'mpv_add_admin_menu'); add_action('admin_init', 'mpv_settings_init'); function mpv_add_admin_menu() { add_options_page('Manual Post Views', 'Manual Post Views', 'manage_options', 'manual-post-views', 'mpv_options_page'); } function mpv_settings_init() { register_setting('mpv_settings_group', 'mpv_enabled'); register_setting('mpv_settings_group', 'mpv_allowed_users'); add_settings_section( 'mpv_settings_section', __('Manual Post Views Ayarları', 'mpv'), 'mpv_settings_section_callback', 'mpv_settings_group' ); add_settings_field( 'mpv_enabled_field', __('Eklentiyi Aktif Et', 'mpv'), 'mpv_enabled_render', 'mpv_settings_group', 'mpv_settings_section' ); add_settings_field( 'mpv_allowed_users_field', __('Görüntülemesi İzinli Kullanıcılar (virgül ile ayrın)', 'mpv'), 'mpv_allowed_users_render', 'mpv_settings_group', 'mpv_settings_section' ); } function mpv_enabled_render() { $option = get_option('mpv_enabled'); ?> <input type="checkbox" name="mpv_enabled" <?php checked($option, 'on'); ?> value="on"> <?php } function mpv_allowed_users_render() { $option = get_option('mpv_allowed_users'); ?> <input type="text" name="mpv_allowed_users" value="<?php echo esc_attr($option); ?>" style="width: 300px;"> <?php } function mpv_settings_section_callback() { echo __('Aşağıdaki ayarları düzenleyerek eklentinin nasıl çalışacağını belirleyebilirsiniz.', 'mpv'); } function mpv_options_page() { ?> <div class="wrap"> <h2>Manual Post Views Ayarları</h2> <form action="options.php" method="post"> <?php settings_fields('mpv_settings_group'); do_settings_sections('mpv_settings_group'); submit_button(); ?> </form> </div> <?php } // Ön yüzde gerekli stil ve scriptleri yükle add_action('wp_enqueue_scripts', 'mpv_enqueue_scripts'); function mpv_enqueue_scripts() { // Eklenti aktif değilse veya kullanıcı giriş yapmamışsa yükleme yapma if ( !is_user_logged_in() || get_option('mpv_enabled') != 'on' ) { return; } $current_user = wp_get_current_user(); $allowed_users = get_option('mpv_allowed_users'); $allowed_users_array = array_map('trim', explode(',', $allowed_users)); if ( !in_array($current_user->user_login, $allowed_users_array) ) { return; } wp_enqueue_script('mpv-script', plugin_dir_url(__FILE__) . 'mpv-script.js', array('jquery'), '1.0', true); wp_localize_script('mpv-script', 'mpv_ajax', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('mpv_nonce') )); wp_enqueue_style('mpv-style', plugin_dir_url(__FILE__) . 'mpv-style.css'); } // Filtre ile öne çıkan görselin HTML'ini düzenle (ikonları ekle) add_filter('post_thumbnail_html', 'mpv_modify_post_thumbnail', 10, 5); function mpv_modify_post_thumbnail($html, $post_id, $post_thumbnail_id, $size, $attr) { // Sadece giriş yapmış ve izinli kullanıcılar için if ( !is_user_logged_in() || get_option('mpv_enabled') != 'on' ) { return $html; } $current_user = wp_get_current_user(); $allowed_users = get_option('mpv_allowed_users'); $allowed_users_array = array_map('trim', explode(',', $allowed_users)); if ( !in_array($current_user->user_login, $allowed_users_array) ) { return $html; } // İkonları içeren HTML (yukarı ok: ▲, aşağı ok: ▼) $overlay = '<div class="mpv-overlay" data-postid="' . $post_id . '">'; $overlay .= '<span class="mpv-arrow mpv-arrow-up" title="Gösterim sayısını artır">▲</span>'; $overlay .= '<span class="mpv-arrow mpv-arrow-down" title="Gösterim sayısını azalt">▼</span>'; $overlay .= '</div>'; // Orijinal görsel HTML'ini, overlay için konumlandırma yapılmış bir kapsayıcı içerisine alıyoruz return '<div class="mpv-thumbnail-container" style="position: relative; display: inline-block;">' . $html . $overlay . '</div>'; } // AJAX işlemi: Gösterim sayısını artır add_action('wp_ajax_mpv_increase', 'mpv_increase_view'); function mpv_increase_view() { check_ajax_referer('mpv_nonce', 'nonce'); $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } $count = intval(get_post_meta($post_id, 'manual_view_count', true)); $count++; update_post_meta($post_id, 'manual_view_count', $count); wp_send_json_success($count); } // AJAX işlemi: Gösterim sayısını azalt add_action('wp_ajax_mpv_decrease', 'mpv_decrease_view'); function mpv_decrease_view() { check_ajax_referer('mpv_nonce', 'nonce'); $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } $count = intval(get_post_meta($post_id, 'manual_view_count', true)); $count = max(0, $count - 1); update_post_meta($post_id, 'manual_view_count', $count); wp_send_json_success($count); } ?>------------------------Kod:Tümünü seç
mpv-script.jsKod:Tümünü seç
jQuery(document).ready(function($) { // Yukarı ok için tıklama olayı $('.mpv-arrow-up').on('click', function(e) { e.preventDefault(); var container = $(this).closest('.mpv-overlay'); var post_id = container.data('postid'); $.post(mpv_ajax.ajax_url, { action: 'mpv_increase', post_id: post_id, nonce: mpv_ajax.nonce }, function(response) { if(response.success) { alert('Gösterim sayısı: ' + response.data); } else { alert('Hata: ' + response.data); } }); }); // Aşağı ok için tıklama olayı $('.mpv-arrow-down').on('click', function(e) { e.preventDefault(); var container = $(this).closest('.mpv-overlay'); var post_id = container.data('postid'); $.post(mpv_ajax.ajax_url, { action: 'mpv_decrease', post_id: post_id, nonce: mpv_ajax.nonce }, function(response) { if(response.success) { alert('Gösterim sayısı: ' + response.data); } else { alert('Hata: ' + response.data); } }); }); });------------------------Kod:Tümünü seç
mpv-style.cssKod:Tümünü seç
.mpv-overlay { position: absolute; top: 0; left: 0; z-index: 10; display: flex; flex-direction: column; } .mpv-arrow { cursor: pointer; background: rgba(255, 255, 255, 0.7); padding: 2px 5px; margin: 1px; font-size: 16px; }------------------------Kullanım Açıklaması
Kurulum:
Yukarıdaki üç dosyayı (PHP, JS, CSS) aynı klasöre (örneğin manual-post-views) yerleştirin.
Klasörü wp-content/plugins/ dizinine yükleyin.
WordPress yönetici panelinden eklentiyi etkinleştirin.
Ayarlar:
Ayarlar > Manual Post Views sayfasına gidin.
Eklentiyi aktif hale getirin (onay kutusunu işaretleyin).
Gösterim sayısını kontrol edebilecek kullanıcı adlarını virgül ile ayrılmış biçimde girin (örn. admin, mehmet).
Ön Yüzde İşlev:
Belirtilen kullanıcı giriş yaptıysa, gönderilerin öne çıkan görsellerinin sol üst köşesinde iki ok simgesi (yukarı ve aşağı) görünecektir.
Yukarı ok simgesine tıklandığında gönderinin “manual_view_count” meta değeri 1 artar; aşağı ok ile 1 azalır (0’ın altına düşmez).
Güncellenen değer AJAX aracılığıyla alınır ve örnekte basit bir alert ile gösterilir. (Dilerseniz bu kısmı temanızda uygun bir şekilde gösterebilirsiniz.)
Bu örnek, temel bir yapı sunar. Güvenlik, kullanıcı kontrolü veya stil açısından ihtiyaçlarınıza göre geliştirilebilir ve özelleştirilebilir.
Bu şekilde, tanımladığınız gereksinimlere uygun bir WordPress uygulamasını (eklenti) oluşturabilirsiniz.
Kod:Tümünü seç
manual-post-views/ ├── manual-post-views.php // Eklentinin ana dosyası ├── mpv-script.js // AJAX işlemleri ve ikon tıklama olayları için JavaScript └── mpv-style.css // Görsel ikonların stil dosyası
Re: Wordpress admin gösterim sayısını artırma
ayrı bir klasör olsun klasör yapısını paylaşır mısın
--------------------------25 saniye hakkında Akıl yürütüldüArayüz Eklenti Adı:Kod:Tümünü seç
Manual Post Views
Aşağıda, tanımladığınız özellikleri karşılayan basit bir WordPress eklentisi örneği sunuyorum. Bu örnekte:
Admin Ayar Sayfası: Eklenti “Ayarlar” altında bir sayfa oluşturur. Bu sayfada eklentinin aktif/pasif durumu için bir onay kutusu ve virgülle ayrılmış kullanıcı adlarının girilebileceği bir metin kutusu yer alır.
Ön Yüzde Görünüm: Eklenti, eklenti aktifse ve giriş yapan kullanıcının kullanıcı adı, ayar sayfasında belirtilen kullanıcılar arasındaysa, her gönderinin öne çıkan görselinin sol üst köşesine iki ok (yukarı: artır, aşağı: azalt) ekler.
AJAX İşlemleri: Kullanıcı ikonlara tıkladığında AJAX çağrıları ile gönderiye ait “manuel gösterim sayısı” meta değeri güncellenir.
Aşağıdaki dosyaları eklenti klasörünüzde oluşturabilirsiniz:------------------------Eklenen yani sorgu:Kod:Tümünü seç
bu okların hemen yanında yine anlık olarak çok ufak boyutta yazının gösterim sayısı görünsün------------------------Kod:Tümünü seç
manual-post-views.phpKod:Tümünü seç
<?php /* Plugin Name: Manual Post Views Description: Gönderilerin gösterim sayısını manuel olarak artırıp azaltmaya yarayan eklenti. Version: 1.1 Author: İsim Soyisim */ // Admin ayar sayfasını oluştur add_action('admin_menu', 'mpv_add_admin_menu'); add_action('admin_init', 'mpv_settings_init'); function mpv_add_admin_menu() { add_options_page('Manual Post Views', 'Manual Post Views', 'manage_options', 'manual-post-views', 'mpv_options_page'); } function mpv_settings_init() { register_setting('mpv_settings_group', 'mpv_enabled'); register_setting('mpv_settings_group', 'mpv_allowed_users'); add_settings_section( 'mpv_settings_section', __('Manual Post Views Ayarları', 'mpv'), 'mpv_settings_section_callback', 'mpv_settings_group' ); add_settings_field( 'mpv_enabled_field', __('Eklentiyi Aktif Et', 'mpv'), 'mpv_enabled_render', 'mpv_settings_group', 'mpv_settings_section' ); add_settings_field( 'mpv_allowed_users_field', __('Görüntülemesi İzinli Kullanıcılar (virgül ile ayrın)', 'mpv'), 'mpv_allowed_users_render', 'mpv_settings_group', 'mpv_settings_section' ); } function mpv_enabled_render() { $option = get_option('mpv_enabled'); ?> <input type="checkbox" name="mpv_enabled" <?php checked($option, 'on'); ?> value="on"> <?php } function mpv_allowed_users_render() { $option = get_option('mpv_allowed_users'); ?> <input type="text" name="mpv_allowed_users" value="<?php echo esc_attr($option); ?>" style="width: 300px;"> <?php } function mpv_settings_section_callback() { echo __('Aşağıdaki ayarları düzenleyerek eklentinin nasıl çalışacağını belirleyebilirsiniz.', 'mpv'); } function mpv_options_page() { ?> <div class="wrap"> <h2>Manual Post Views Ayarları</h2> <form action="options.php" method="post"> <?php settings_fields('mpv_settings_group'); do_settings_sections('mpv_settings_group'); submit_button(); ?> </form> </div> <?php } // Ön yüzde gerekli stil ve scriptleri yükle add_action('wp_enqueue_scripts', 'mpv_enqueue_scripts'); function mpv_enqueue_scripts() { // Eklenti aktif değilse veya kullanıcı giriş yapmamışsa yükleme yapma if ( !is_user_logged_in() || get_option('mpv_enabled') != 'on' ) { return; } $current_user = wp_get_current_user(); $allowed_users = get_option('mpv_allowed_users'); $allowed_users_array = array_map('trim', explode(',', $allowed_users)); if ( !in_array($current_user->user_login, $allowed_users_array) ) { return; } wp_enqueue_script('mpv-script', plugin_dir_url(__FILE__) . 'mpv-script.js', array('jquery'), '1.1', true); wp_localize_script('mpv-script', 'mpv_ajax', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('mpv_nonce') )); wp_enqueue_style('mpv-style', plugin_dir_url(__FILE__) . 'mpv-style.css'); } // Filtre: Öne çıkan görselin HTML'ini düzenle (ok ikonları ve anlık gösterim sayısı ekle) add_filter('post_thumbnail_html', 'mpv_modify_post_thumbnail', 10, 5); function mpv_modify_post_thumbnail($html, $post_id, $post_thumbnail_id, $size, $attr) { // Sadece giriş yapmış ve izinli kullanıcılar için if ( !is_user_logged_in() || get_option('mpv_enabled') != 'on' ) { return $html; } $current_user = wp_get_current_user(); $allowed_users = get_option('mpv_allowed_users'); $allowed_users_array = array_map('trim', explode(',', $allowed_users)); if ( !in_array($current_user->user_login, $allowed_users_array) ) { return $html; } // Gösterim sayısını al (varsayılan 0) $view_count = intval(get_post_meta($post_id, 'manual_view_count', true)); // İkonlar ve gösterim sayısını içeren HTML $overlay = '<div class="mpv-overlay" data-postid="' . $post_id . '">'; $overlay .= '<span class="mpv-arrow mpv-arrow-up" title="Gösterim sayısını artır">▲</span>'; $overlay .= '<span class="mpv-arrow mpv-arrow-down" title="Gösterim sayısını azalt">▼</span>'; $overlay .= '<span class="mpv-view-count" title="Gösterim Sayısı">' . $view_count . '</span>'; $overlay .= '</div>'; // Öne çıkan görsel HTML'ini kapsayan div ile birlikte döndür return '<div class="mpv-thumbnail-container" style="position: relative; display: inline-block;">' . $html . $overlay . '</div>'; } // AJAX işlemi: Gösterim sayısını artır add_action('wp_ajax_mpv_increase', 'mpv_increase_view'); function mpv_increase_view() { check_ajax_referer('mpv_nonce', 'nonce'); $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } $count = intval(get_post_meta($post_id, 'manual_view_count', true)); $count++; update_post_meta($post_id, 'manual_view_count', $count); wp_send_json_success($count); } // AJAX işlemi: Gösterim sayısını azalt add_action('wp_ajax_mpv_decrease', 'mpv_decrease_view'); function mpv_decrease_view() { check_ajax_referer('mpv_nonce', 'nonce'); $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } $count = intval(get_post_meta($post_id, 'manual_view_count', true)); $count = max(0, $count - 1); update_post_meta($post_id, 'manual_view_count', $count); wp_send_json_success($count); } ?>------------------------Kod:Tümünü seç
mpv-script.jsKod:Tümünü seç
jQuery(document).ready(function($) { // Yukarı ok için tıklama olayı $('.mpv-arrow-up').on('click', function(e) { e.preventDefault(); var overlay = $(this).closest('.mpv-overlay'); var post_id = overlay.data('postid'); $.post(mpv_ajax.ajax_url, { action: 'mpv_increase', post_id: post_id, nonce: mpv_ajax.nonce }, function(response) { if(response.success) { overlay.find('.mpv-view-count').text(response.data); } else { alert('Hata: ' + response.data); } }); }); // Aşağı ok için tıklama olayı $('.mpv-arrow-down').on('click', function(e) { e.preventDefault(); var overlay = $(this).closest('.mpv-overlay'); var post_id = overlay.data('postid'); $.post(mpv_ajax.ajax_url, { action: 'mpv_decrease', post_id: post_id, nonce: mpv_ajax.nonce }, function(response) { if(response.success) { overlay.find('.mpv-view-count').text(response.data); } else { alert('Hata: ' + response.data); } }); }); });------------------------Kod:Tümünü seç
mpv-style.cssKod:Tümünü seç
.mpv-overlay { position: absolute; top: 0; left: 0; z-index: 10; display: flex; flex-direction: column; align-items: flex-start; } .mpv-arrow { cursor: pointer; background: rgba(255, 255, 255, 0.7); padding: 2px 5px; margin: 1px; font-size: 16px; } .mpv-view-count { font-size: 10px; background: rgba(255,255,255,0.7); padding: 2px 4px; margin: 1px; border-radius: 3px; display: inline-block; }------------------------Açıklama
PHP Dosyası:
mpv_modify_post_thumbnail fonksiyonunda, öne çıkan görselin overlay kısmına hem yukarı ve aşağı ok ikonlarını hem de gösterim sayısını içeren bir <span class="mpv-view-count"> eklenmiştir.
Gösterim sayısı, gönderi meta verisi olan manual_view_count değerinden alınır.
JavaScript Dosyası:
Ok ikonlarına tıklama olayında, AJAX çağrısı yapılarak sunucudan dönen güncel gösterim sayısı, ilgili .mpv-view-count span’ına yazdırılır.
CSS Dosyası:
mpv-view-count sınıfı için küçük boyutlu, hafif arka planlı bir stil uygulanarak okunabilirlik sağlanmıştır.
Bu düzenlemeler ile belirtilen kullanıcı giriş yapmış ve izinli ise, gönderi görselinin sol üst köşesinde ok ikonlarının yanında anlık gösterim sayısı da küçük boyutta görüntülenecektir.
Kod:Tümünü seç
manual-post-views/ ├── manual-post-views.php // Eklentinin ana dosyası ├── mpv-script.js // AJAX işlemleri ve ikon tıklama olayları için JavaScript └── mpv-style.css // Görsel ikonların stil dosyası
Re: Wordpress admin gösterim sayısını artırma
tamamen değiştiriyoruz. tekrar sorulduKod:Tümünü seç
Yeni bir klasörde bir Wordpress uygulaması yapalım. -uygulama yazıların gösterim sayısını manuel artırıp azaltma uygulaması olacak. -Uygulama admin sayfasında ayar arayüzü olsun ve etkin liği aktif pasif seçilebilsin. -Bu uygulamada yine bir textboxa virgülle adı yazılan kullanıcı veya kullanıcılara görünür olacak. -Bu uygulama aktif ve giriş yapmış adı yazılmış olan kullanıcıya her yazının başlığının başında "+ -" butonu ve ufak bir daire içinde o başlığın/yazının güncel gösterim sayısı görünecek. -"+" tıklanınca yazının gösterim sayısını artırırken "-" tıklandığında ise güncel gösterim sayısını azaltacak. -örnek "1+-Depremde yıkılan evler" "1+-" minimal ufak kırmızı karakter ikon olabilir
Re: Wordpress admin gösterim sayısını artırma
Kod:Tümünü seç
manual-view-counter/ ├── manual-view-counter.php # Eklentinin ana dosyası (plugin tanımları, admin ayarları, AJAX işlemleri ve filtreler) ├── js/ │ └── view-counter.js # Yazı başlıklarındaki "+/-" butonlarının davranışını yönetir └── css/ └── style.css # Buton ve gösterim sayısı için stil tanımlamalarıKod:Tümünü seç
manual-view-counter.phpKod:Tümünü seç
<?php /* Plugin Name: Manual View Counter Description: Yazıların gösterim sayısını manuel olarak artırıp azaltmanızı sağlayan basit eklenti. Version: 1.0 Author: Your Name */ // Gerekli sabitler define('MVC_PLUGIN_URL', plugin_dir_url(__FILE__)); // Ayarların varsayılan değeri if ( false === get_option('mvc_settings') ) { $default_settings = array( 'active' => false, 'users' => '' ); add_option('mvc_settings', $default_settings); } // Yönetici menüsüne eklenti ayar sayfası ekleme add_action('admin_menu', 'mvc_add_admin_menu'); function mvc_add_admin_menu(){ add_menu_page( 'Manual View Counter Ayarları', 'View Counter', 'manage_options', 'mvc_settings', 'mvc_settings_page' ); } // Ayarlar sayfası içeriği function mvc_settings_page(){ // Ayarları kaydet if (isset($_POST['mvc_submit'])) { $active = isset($_POST['mvc_active']) ? true : false; $users = sanitize_text_field($_POST['mvc_users']); update_option('mvc_settings', array('active' => $active, 'users' => $users)); echo '<div class="updated"><p>Ayarlar kaydedildi.</p></div>'; } $settings = get_option('mvc_settings'); ?> <div class="wrap"> <h1>Manual View Counter Ayarları</h1> <form method="post"> <table class="form-table"> <tr> <th>Eklenti Aktif mi?</th> <td> <input type="checkbox" name="mvc_active" <?php checked($settings['active'], true); ?> /> </td> </tr> <tr> <th>Kullanıcılar (virgülle ayrılmış)</th> <td> <input type="text" name="mvc_users" value="<?php echo esc_attr($settings['users']); ?>" style="width:300px;"> </td> </tr> </table> <?php submit_button('Ayarları Kaydet', 'primary', 'mvc_submit'); ?> </form> </div> <?php } // Ön uçta gerekli script ve stil dosyalarını ekleme add_action('wp_enqueue_scripts', 'mvc_enqueue_assets'); function mvc_enqueue_assets(){ wp_enqueue_script('mvc_view_counter', MVC_PLUGIN_URL . 'js/view-counter.js', array('jquery'), '1.0', true); wp_localize_script('mvc_view_counter', 'mvc_ajax_object', array( 'ajax_url' => admin_url('admin-ajax.php') )); wp_enqueue_style('mvc_style', MVC_PLUGIN_URL . 'css/style.css'); } // Yazı başlıklarının önüne "+/-" butonlarını ekleyen filtre add_filter('the_title', 'mvc_add_counter_button', 10, 2); function mvc_add_counter_button($title, $post_id){ if (is_admin()) return $title; $settings = get_option('mvc_settings'); if (!$settings['active']) return $title; if (!is_user_logged_in()) return $title; $current_user = wp_get_current_user(); $allowed_users = array_map('trim', explode(',', $settings['users'])); if (!in_array($current_user->user_login, $allowed_users)) return $title; // Mevcut gösterim sayısını al (post meta olarak) $views = get_post_meta($post_id, '_mvc_views', true); $views = $views ? $views : 0; $button = '<span class="mvc-counter" data-postid="' . $post_id . '">'; $button .= '<button class="mvc-decrease">-</button>'; $button .= '<span class="mvc-count">' . $views . '</span>'; $button .= '<button class="mvc-increase">+</button>'; $button .= '</span> '; return $button . $title; } // AJAX ile gösterim sayısını güncelleyen fonksiyon add_action('wp_ajax_mvc_update_view', 'mvc_update_view'); function mvc_update_view(){ if ( !isset($_POST['post_id']) || !isset($_POST['action_type']) ) { wp_send_json_error('Eksik parametre.'); } $post_id = intval($_POST['post_id']); $actionType = sanitize_text_field($_POST['action_type']); $views = get_post_meta($post_id, '_mvc_views', true); $views = $views ? $views : 0; if ($actionType == 'increase') { $views++; } elseif ($actionType == 'decrease') { $views = ($views > 0) ? $views - 1 : 0; } update_post_meta($post_id, '_mvc_views', $views); wp_send_json_success($views); }Kod:Tümünü seç
view-counter.jsKod:Tümünü seç
jQuery(document).ready(function($) { // "+/-" butonlarına tıklanınca AJAX isteği gönder $('.mvc-increase, .mvc-decrease').on('click', function() { var btn = $(this); var parent = btn.closest('.mvc-counter'); var postId = parent.data('postid'); var actionType = btn.hasClass('mvc-increase') ? 'increase' : 'decrease'; $.post(mvc_ajax_object.ajax_url, { action: 'mvc_update_view', post_id: postId, action_type: actionType }, function(response) { if (response.success) { parent.find('.mvc-count').text(response.data); } }); }); });Kod:Tümünü seç
style.cssKod:Tümünü seç
.mvc-counter { display: inline-flex; align-items: center; margin-right: 5px; } .mvc-counter button { background-color: #eee; border: 1px solid #ccc; padding: 2px 6px; cursor: pointer; } .mvc-counter .mvc-count { background-color: red; color: #fff; border-radius: 50%; padding: 3px 7px; margin: 0 3px; font-size: 0.9em; }