1. sayfa (Toplam 1 sayfa)

Wordpress admin gösterim sayısını artırma

Gönderilme zamanı: Cum Şub 21, 2025 4:58 am
gönderen muratca61
ai sorulacak

Kod: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.  

Re: Wordpress admin gösterim sayısını artırma

Gönderilme zamanı: Cum Şub 21, 2025 6:04 am
gönderen muratca61
ayrı bir klasör olsun klasör yapısını paylaşır mısın
--------------------------
Arayüz Eklenti Adı:

Kod:Tümünü seç

Manual Post Views
25 saniye hakkında Akıl yürütüldü
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.php

Kod: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: &#9650;, aşağı ok: &#9660;)
    $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">&#9650;</span>';
    $overlay .= '<span class="mpv-arrow mpv-arrow-down" title="Gösterim sayısını azalt">&#9660;</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.js

Kod: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.css

Kod: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

Gönderilme zamanı: Cum Şub 21, 2025 6:14 am
gönderen muratca61
ayrı bir klasör olsun klasör yapısını paylaşır mısın
--------------------------
Arayüz Eklenti Adı:

Kod:Tümünü seç

Manual Post Views
25 saniye hakkında Akıl yürütüldü
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.php

Kod: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">&#9650;</span>';
    $overlay .= '<span class="mpv-arrow mpv-arrow-down" title="Gösterim sayısını azalt">&#9660;</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.js

Kod: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.css

Kod: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

Gönderilme zamanı: Cum Şub 21, 2025 6:45 am
gönderen muratca61
tamamen değiştiriyoruz. tekrar soruldu

Kod: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

Gönderilme zamanı: Cum Şub 21, 2025 7:26 am
gönderen muratca61

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.php

Kod: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.js

Kod: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.css

Kod: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;
}