1. sayfa (Toplam 2 sayfa)

aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 6:18 am
gönderen muratca61
deepseek-tahsilat pc1

Kod:Tümünü seç

selam bir wordpress uygulaması yapalım bu uygulama birbirine benzeyen haberleri tuşa basınca eşleştirerek kullanıcıya listelesin. kullanıcı bu yazlara çıklayarak yeni  sekmede ön sayfa görüntüsünü görebilsin. ve silme seçeneği koyalım bu seçenek yazıyı çöpe taşısın

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 6:19 am
gönderen muratca61
Merhaba! WordPress üzerinde bir uygulama geliştirmek istiyorsunuz ve bu uygulama, birbirine benzeyen haberleri eşleştirerek kullanıcıya listeleyecek. Ayrıca kullanıcılar bu yazıları tıklayarak yeni sekmede ön sayfa görüntüsünü görebilecek ve silme seçeneği ile yazıları çöpe taşıyabilecek. Bu projeyi gerçekleştirmek için aşağıdaki adımları takip edebilirsiniz:

1. WordPress Kurulumu ve Temel Ayarlar
WordPress Kurulumu: Eğer henüz WordPress kurulumu yapmadıysanız, öncelikle bir hosting hizmeti satın alıp WordPress'i kurun.

Tema Seçimi: WordPress için uygun bir tema seçin veya kendi özel temanızı oluşturun.

2. Eklenti Geliştirme veya Var Olan Eklentileri Kullanma
Bu işlevselliği sağlamak için ya kendi özel eklentinizi yazabilirsiniz ya da var olan eklentileri kullanabilirsiniz.

Özel Eklenti Geliştirme
Eklenti Klasörü Oluşturma:

wp-content/plugins/ dizini altında yeni bir klasör oluşturun, örneğin

Kod:Tümünü seç

haber-eslestirici
.

Bu klasör içine

Kod:Tümünü seç

haber-eslestirici.php
adında bir PHP dosyası oluşturun.

Eklenti Temel Yapısı:

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: Birbirine benzeyen haberleri eşleştirerek kullanıcıya listeler.
Version: 1.0
Author: Sizin Adınız
*/

// Eklenti kodları buraya gelecek
?>
Haberleri Eşleştirme ve Listeleme:

Haberleri eşleştirmek için bir algoritma geliştirin. Bu algoritma, haber başlıkları ve içerikleri arasındaki benzerlikleri karşılaştırabilir.

Benzer haberleri listelemek için bir kısa kod (shortcode) oluşturun.

Kod:Tümünü seç

function haber_eslestirici_listele() {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
    );
    $query = new WP_Query($args);
    $haberler = array();

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $haberler[] = array(
                'title' => get_the_title(),
                'content' => get_the_content(),
                'link' => get_permalink(),
            );
        }
    }

    // Benzerlik algoritması buraya gelecek
    // Örnek bir benzerlik karşılaştırması yapılabilir

    $output = '<ul>';
    foreach ($haberler as $haber) {
        $output .= '<li><a href="' . $haber['link'] . '" target="_blank">' . $haber['title'] . '</a> <button onclick="silHaber(' . $haber['ID'] . ')">Sil</button></li>';
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');
Silme İşlevi:

Silme işlevi için bir AJAX isteği oluşturun ve bu isteği işleyen bir fonksiyon yazın.

Kod:Tümünü seç

function sil_haber() {
    $post_id = intval($_POST['post_id']);
    if (wp_trash_post($post_id)) {
        echo 'success';
    } else {
        echo 'error';
    }
    wp_die();
}
add_action('wp_ajax_sil_haber', 'sil_haber');

function haber_eslestirici_scripts() {
    wp_enqueue_script('haber-eslestirici', plugins_url('haber-eslestirici.js', __FILE__), array('jquery'), null, true);
    wp_localize_script('haber-eslestirici', 'haber_eslestirici_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
    ));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_scripts');

Kod:Tümünü seç

haber-eslestirici.js
dosyası:

Kod:Tümünü seç

function silHaber(post_id) {
    jQuery.ajax({
        url: haber_eslestirici_ajax.ajax_url,
        type: 'POST',
        data: {
            action: 'sil_haber',
            post_id: post_id,
        },
        success: function(response) {
            if (response === 'success') {
                alert('Haber silindi.');
                location.reload();
            } else {
                alert('Haber silinirken bir hata oluştu.');
            }
        }
    });
}
Kullanıcı Arayüzü
Kısa Kod Kullanımı: Oluşturduğunuz kısa kodu ([haber_eslestirici]) bir sayfaya veya yazıya ekleyerek kullanıcıların benzer haberleri görmesini sağlayın.

Ön Sayfa Görüntüsü: Haber başlıklarına tıklandığında yeni sekmede açılmasını sağlayın.

4. Test ve Yayınlama
Test: Eklentiyi yerel bir ortamda veya test sitesinde test edin.

Yayınlama: Her şey çalıştığından emin olduktan sonra eklentiyi canlı siteye yükleyin.

5. Geliştirme ve İyileştirme
Geri Bildirim: Kullanıcılardan geri bildirim alarak eklentiyi geliştirin.

Güncellemeler: WordPress güncellemelerine uyum sağlamak için eklentiyi düzenli olarak güncelleyin.

Bu adımları takip ederek, istediğiniz özelliklere sahip bir WordPress uygulaması geliştirebilirsiniz. Eğer kodlama konusunda deneyiminiz yoksa, bir geliştirici ile çalışmak da iyi bir seçenek olabilir. Başarılar dilerim!

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 6:51 am
gönderen muratca61

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: Birbirine benzeyen haberleri eşleştirerek kullanıcıya listeler ve silme işlemi yapar.
Version: 1.0
Author: Sizin Adınız
*/

// Eklenti aktivasyonunda çalışacak kodlar
function haber_eslestirici_activate() {
    // Gerekirse aktivasyon işlemleri buraya eklenebilir
}
register_activation_hook(__FILE__, 'haber_eslestirici_activate');

// Eklenti devre dışı bırakıldığında çalışacak kodlar
function haber_eslestirici_deactivate() {
    // Gerekirse devre dışı bırakma işlemleri buraya eklenebilir
}
register_deactivation_hook(__FILE__, 'haber_eslestirici_deactivate');

// Haberleri listeleme fonksiyonu
function haber_eslestirici_listele() {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
    );
    $query = new WP_Query($args);
    $haberler = array();

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $haberler[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'content' => get_the_content(),
                'link' => get_permalink(),
            );
        }
    }

    // Benzerlik algoritması (basit bir örnek)
    $benzer_haberler = array();
    foreach ($haberler as $haber) {
        foreach ($haberler as $diger_haber) {
            if ($haber['id'] != $diger_haber['id'] && similar_text($haber['title'], $diger_haber['title'], $benzerlik) && $benzerlik > 50) {
                $benzer_haberler[] = $haber;
                break;
            }
        }
    }

    // Liste oluşturma
    $output = '<ul>';
    foreach ($benzer_haberler as $haber) {
        $output .= '<li>';
        $output .= '<a href="' . $haber['link'] . '" target="_blank">' . $haber['title'] . '</a>';
        $output .= ' <button onclick="silHaber(' . $haber['id'] . ')">Sil</button>';
        $output .= '</li>';
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

// AJAX ile haber silme fonksiyonu
function sil_haber() {
    if (isset($_POST['post_id'])) {
        $post_id = intval($_POST['post_id']);
        if (wp_trash_post($post_id)) {
            echo 'success';
        } else {
            echo 'error';
        }
    }
    wp_die();
}
add_action('wp_ajax_sil_haber', 'sil_haber');

// JavaScript dosyasını ekleyelim
function haber_eslestirici_scripts() {
    wp_enqueue_script('haber-eslestirici-js', plugins_url('haber-eslestirici.js', __FILE__), array('jquery'), null, true);
    wp_localize_script('haber-eslestirici-js', 'haber_eslestirici_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
    ));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_scripts');

Kod:Tümünü seç

function silHaber(post_id) {
    if (confirm('Bu haberi silmek istediğinize emin misiniz?')) {
        jQuery.ajax({
            url: haber_eslestirici_ajax.ajax_url,
            type: 'POST',
            data: {
                action: 'sil_haber',
                post_id: post_id,
            },
            success: function(response) {
                if (response === 'success') {
                    alert('Haber silindi.');
                    location.reload(); // Sayfayı yenile
                } else {
                    alert('Haber silinirken bir hata oluştu.');
                }
            }
        });
    }
}

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 7:01 am
gönderen muratca61
silme işlemini kaldıralım daha güzel bir görüntüye sahip olsun. çok ufak öne çıkan resimde görünsün sadece 3 adet ama en az gösterime sahip olanlar görünsün

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: En az gösterime sahip 3 haberi öne çıkan resimleriyle birlikte listeler.
Version: 1.0
Author: Sizin Adınız
*/

// Eklenti aktivasyonunda çalışacak kodlar
function haber_eslestirici_activate() {
    // Gerekirse aktivasyon işlemleri buraya eklenebilir
}
register_activation_hook(__FILE__, 'haber_eslestirici_activate');

// Eklenti devre dışı bırakıldığında çalışacak kodlar
function haber_eslestirici_deactivate() {
    // Gerekirse devre dışı bırakma işlemleri buraya eklenebilir
}
register_deactivation_hook(__FILE__, 'haber_eslestirici_deactivate');

// Haberleri listeleme fonksiyonu
function haber_eslestirici_listele() {
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => 'post_views_count', // Gösterim sayısı için özel alan
        'orderby' => 'meta_value_num', // Gösterim sayısına göre sırala
        'order' => 'ASC', // En az gösterimden başlayarak sırala
    );
    $query = new WP_Query($args);
    $haberler = array();

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $haberler[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'content' => get_the_content(),
                'link' => get_permalink(),
                'thumbnail' => get_the_post_thumbnail_url(get_the_ID(), 'thumbnail'), // Öne çıkan resim
                'views' => get_post_meta(get_the_ID(), 'post_views_count', true), // Gösterim sayısı
            );
        }
    }

    // Sadece en az gösterime sahip 3 haberi al
    $haberler = array_slice($haberler, 0, 3);

    // Liste oluşturma
    $output = '<div class="haber-listesi">';
    foreach ($haberler as $haber) {
        $output .= '<div class="haber-item">';
        if ($haber['thumbnail']) {
            $output .= '<a href="' . $haber['link'] . '" target="_blank">';
            $output .= '<img src="' . $haber['thumbnail'] . '" alt="' . $haber['title'] . '" />';
            $output .= '</a>';
        }
        $output .= '<h3><a href="' . $haber['link'] . '" target="_blank">' . $haber['title'] . '</a></h3>';
        $output .= '</div>';
    }
    $output .= '</div>';

    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

// CSS dosyasını ekleyelim
function haber_eslestirici_styles() {
    wp_enqueue_style('haber-eslestirici-css', plugins_url('haber-eslestirici.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_styles');
yeni dosya

Kod:Tümünü seç

haber-eslestirici.css

Kod:Tümünü seç

.haber-listesi {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    justify-content: space-between;
}

.haber-item {
    width: 30%;
    border: 1px solid #ddd;
    padding: 10px;
    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
    text-align: center;
}

.haber-item img {
    max-width: 100%;
    height: auto;
    border-radius: 5px;
}

.haber-item h3 {
    margin: 10px 0;
    font-size: 16px;
}

.haber-item a {
    text-decoration: none;
    color: #333;
}

.haber-item a:hover {
    color: #0073aa;
}
3. Gösterim Sayısını Takip Etme
Haberlerin gösterim sayısını takip etmek için aşağıdaki kodu

Kod:Tümünü seç

functions.php
dosyanıza ekleyin:

Kod:Tümünü seç

// Gösterim sayısını takip etme
function track_post_views($post_id) {
    if (!is_single()) return;
    if (empty($post_id)) {
        global $post;
        $post_id = $post->ID;
    }
    $count = get_post_meta($post_id, 'post_views_count', true);
    if ($count == '') {
        delete_post_meta($post_id, 'post_views_count');
        add_post_meta($post_id, 'post_views_count', '0');
    } else {
        $count++;
        update_post_meta($post_id, 'post_views_count', $count);
    }
}
add_action('wp_head', 'track_post_views');

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 7:18 am
gönderen muratca61
bu chatgpt ama kullanılmadı üstteki daha iyi çeliştirilecek

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: En az gösterime sahip 3 haberi, küçük öne çıkan resim ile şık bir şekilde listeler.
Version: 1.1
Author: Sizin Adınız
*/

function haber_eslestirici_activate() {
    // Aktivasyon işlemleri (varsa)
}
register_activation_hook(__FILE__, 'haber_eslestirici_activate');

function haber_eslestirici_deactivate() {
    // Devre dışı bırakma işlemleri (varsa)
}
register_deactivation_hook(__FILE__, 'haber_eslestirici_deactivate');

function haber_eslestirici_listele() {
    // Sadece 3 adet, en az gösterime sahip haberleri getiriyoruz
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => 3,
        'meta_key'       => 'post_views_count', // Post görüntülenme sayısını sakladığınızı varsayıyoruz
        'orderby'        => 'meta_value_num',
        'order'          => 'ASC'
    );
    $query = new WP_Query($args);
    
    // Container'ı flex yapıda oluşturduk
    $output = '<div class="haber-eslestirici-container" style="display:flex; gap:20px;">';
    
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $post_id  = get_the_ID();
            $title    = get_the_title();
            $link     = get_permalink();
            // Thumbnail boyutunda öne çıkan resmi alıyoruz
            $thumbnail = get_the_post_thumbnail($post_id, 'thumbnail');
            
            $output .= '<div class="haber-card" style="text-align: center; border: 1px solid #ddd; padding: 10px; width: 30%;">';
                $output .= '<a href="' . esc_url($link) . '" target="_blank" style="text-decoration:none; color: inherit;">';
                    $output .= '<div class="haber-thumbnail" style="margin-bottom: 10px;">' . $thumbnail . '</div>';
                    $output .= '<div class="haber-title" style="font-size: 16px; font-weight: bold;">' . esc_html($title) . '</div>';
                $output .= '</a>';
            $output .= '</div>';
        }
        wp_reset_postdata();
    } else {
        $output .= '<p>Gösterilecek haber bulunamadı.</p>';
    }
    $output .= '</div>';
    
    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 7:37 am
gönderen muratca61
admin arayüzü ekleyelim aktif pasif yapalım, haber sayısını admin panelinden belirleyelim, hangi etiket ve hangi kategorili yazılara ekleneceğini belirleyebilelim

Kod:Tümünü seç

haber-eslestirici.php

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: Admin panelinden yönetilebilen özelleştirilebilir haber listesi.
Version: 2.0
Author: Sizin Adınız
*/

// Eklenti ayarlarını yükle
require_once plugin_dir_path(__FILE__) . 'admin-settings.php';

// Kısa kod ve frontend fonksiyonları
function haber_eslestirici_listele() {
    $options = get_option('haber_eslestirici_settings');
    
    // Eklenti aktif değilse boş dön
    if (!$options['aktif']) return '<p>Haber listesi şu anda pasif durumda.</p>';

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $options['haber_sayisi'],
        'meta_key' => 'post_views_count',
        'orderby' => 'meta_value_num',
        'order' => 'ASC',
    );

    // Kategori ve etiket filtreleri
    if (!empty($options['kategoriler'])) {
        $args['category__in'] = $options['kategoriler'];
    }
    if (!empty($options['etiketler'])) {
        $args['tag__in'] = $options['etiketler'];
    }

    $query = new WP_Query($args);
    $output = '<div class="haber-listesi">';

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $thumbnail = get_the_post_thumbnail_url(get_the_ID(), 'medium');
            $output .= '<div class="haber-item">';
            $output .= $thumbnail ? '<a href="'.get_permalink().'" target="_blank"><img src="'.$thumbnail.'" alt="'.get_the_title().'"></a>' : '';
            $output .= '<h3><a href="'.get_permalink().'" target="_blank">'.get_the_title().'</a></h3>';
            $output .= '</div>';
        }
    } else {
        $output .= '<p>Gösterilecek haber bulunamadı.</p>';
    }
    
    $output .= '</div>';
    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

// CSS ve JS dosyalarını yükle
function haber_eslestirici_assets() {
    wp_enqueue_style('haber-eslestirici-css', plugins_url('haber-eslestirici.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_assets');

Kod:Tümünü seç

admin-settings.php

Kod:Tümünü seç

<?php
// Admin ayar sayfasını oluştur
function haber_eslestirici_admin_menu() {
    add_options_page(
        'Haber Eşleştirici Ayarları',
        'Haber Eşleştirici',
        'manage_options',
        'haber-eslestirici',
        'haber_eslestirici_settings_page'
    );
}
add_action('admin_menu', 'haber_eslestirici_admin_menu');

// Ayarları kaydet
function haber_eslestirici_register_settings() {
    register_setting(
        'haber_eslestirici_settings_group',
        'haber_eslestirici_settings',
        'haber_eslestirici_sanitize_settings'
    );

    add_settings_section(
        'haber_eslestirici_main_section',
        'Temel Ayarlar',
        null,
        'haber-eslestirici'
    );

    // Aktif/Pasif Alanı
    add_settings_field(
        'aktif',
        'Aktif/Pasif',
        'haber_eslestirici_aktif_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Haber Sayısı Alanı
    add_settings_field(
        'haber_sayisi',
        'Gösterilecek Haber Sayısı',
        'haber_eslestirici_sayi_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Kategori Seçimi
    add_settings_field(
        'kategoriler',
        'Kategoriler',
        'haber_eslestirici_kategoriler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Etiket Seçimi
    add_settings_field(
        'etiketler',
        'Etiketler',
        'haber_eslestirici_etiketler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );
}

// Input Alanları
function haber_eslestirici_aktif_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="checkbox" name="haber_eslestirici_settings[aktif]" value="1" '.checked(1, $options['aktif'] ?? 0, false).'> Aktif';
}

function haber_eslestirici_sayi_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="number" min="1" max="10" name="haber_eslestirici_settings[haber_sayisi]" value="'.($options['haber_sayisi'] ?? 3).'">';
}

function haber_eslestirici_kategoriler_callback() {
    $categories = get_categories();
    $options = get_option('haber_eslestirici_settings');
    
    foreach ($categories as $category) {
        $checked = isset($options['kategoriler']) && in_array($category->term_id, $options['kategoriler']) ? 'checked' : '';
        echo '<label><input type="checkbox" name="haber_eslestirici_settings[kategoriler][]" value="'.$category->term_id.'" '.$checked.'> '.$category->name.'</label><br>';
    }
}

function haber_eslestirici_etiketler_callback() {
    $tags = get_tags();
    $options = get_option('haber_eslestirici_settings');
    
    foreach ($tags as $tag) {
        $checked = isset($options['etiketler']) && in_array($tag->term_id, $options['etiketler']) ? 'checked' : '';
        echo '<label><input type="checkbox" name="haber_eslestirici_settings[etiketler][]" value="'.$tag->term_id.'" '.$checked.'> '.$tag->name.'</label><br>';
    }
}

// Ayarlar Sayfası
function haber_eslestirici_settings_page() {
    ?>
    <div class="wrap">
        <h1>Haber Eşleştirici Ayarları</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('haber_eslestirici_settings_group');
            do_settings_sections('haber-eslestirici');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

// Veri Temizleme
function haber_eslestirici_sanitize_settings($input) {
    $input['haber_sayisi'] = absint($input['haber_sayisi']);
    $input['aktif'] = isset($input['aktif']) ? 1 : 0;
    $input['kategoriler'] = array_map('absint', $input['kategoriler'] ?? array());
    $input['etiketler'] = array_map('absint', $input['etiketler'] ?? array());
    return $input;
}

add_action('admin_init', 'haber_eslestirici_register_settings');

Kod:Tümünü seç

haber-eslestirici.css

Kod:Tümünü seç

.haber-listesi {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
    gap: 20px;
    padding: 20px;
}

.haber-item {
    background: #fff;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    transition: transform 0.3s ease;
}

.haber-item:hover {
    transform: translateY(-5px);
}

.haber-item img {
    width: 100%;
    height: 200px;
    object-fit: cover;
}

.haber-item h3 {
    padding: 15px;
    margin: 0;
    font-size: 1.1em;
}

.haber-item a {
    color: #333;
    text-decoration: none;
}

.haber-item a:hover {
    color: #0073aa;
}
Kullanım Talimatları
Admin Paneli Erişim:

WordPress admin panelinde Ayarlar > Haber Eşleştirici yolunu takip edin

Aktif/pasif durumu, haber sayısı, kategori ve etiketleri seçin

Kısa Kod Kullanımı:

Sayfa/Yazı editöründe [haber_eslestirici] kısa kodunu kullanın

Özellikler:

✔️ Aktif/Pasif kontrolü

✔️ 1-10 arası haber sayısı seçimi

✔️ Kategori ve etiket filtreleme

✔️ Responsive tasarım

✔️ Hover efektleri

Bu yapı sayesinde kullanıcılar:

Sadece seçili kategorilerdeki haberleri görür

Belirlenen etiketlere sahip içerikler listelenir

Yönetici panelinden tüm ayarları kolayca yönetebilir

Mobil uyumlu ve estetik bir görünüm elde eder

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 8:27 am
gönderen muratca61
eşleştirci kodu

Kod:Tümünü seç

[haber_eslestirici]

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 12:45 pm
gönderen muratca61
yeni sekmede açmıyor mavcut sekmede açıyor

Kod:Tümünü seç

haber-eslestirici.php

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: Admin panelinden yönetilebilen özelleştirilebilir haber listesi.
Version: 2.0
Author: Sizin Adınız
*/

// Eklenti ayarlarını yükle
require_once plugin_dir_path(__FILE__) . 'admin-settings.php';

// Kısa kod ve frontend fonksiyonları
function haber_eslestirici_listele() {
    $options = get_option('haber_eslestirici_settings');
    
    // Eklenti aktif değilse boş dön
    if (!$options['aktif']) return '<p>Haber listesi şu anda pasif durumda.</p>';

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => $options['haber_sayisi'],
        'meta_key' => 'post_views_count',
        'orderby' => 'meta_value_num',
        'order' => 'ASC',
    );

    // Kategori ve etiket filtreleri
    if (!empty($options['kategoriler'])) {
        $args['category__in'] = $options['kategoriler'];
    }
    if (!empty($options['etiketler'])) {
        $args['tag__in'] = $options['etiketler'];
    }

    $query = new WP_Query($args);
    $output = '<div class="haber-listesi">';

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $thumbnail = get_the_post_thumbnail_url(get_the_ID(), 'medium');
            $output .= '<div class="haber-item">';
            $output .= $thumbnail ? '<a href="' . get_permalink() . '"><img src="' . $thumbnail . '" alt="' . get_the_title() . '"></a>' : '';
            $output .= '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>';
            $output .= '</div>';
        }
    } else {
        $output .= '<p>Gösterilecek haber bulunamadı.</p>';
    }
    
    $output .= '</div>';
    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

// CSS ve JS dosyalarını yükle
function haber_eslestirici_assets() {
    wp_enqueue_style('haber-eslestirici-css', plugins_url('haber-eslestirici.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_assets');

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 1:11 pm
gönderen muratca61
BURADA etiket tercihini ve kategori tercihini textboxta kullanıcı virgüllerle girecek şekilde yapalım

Kod:Tümünü seç

admin-settings.php

Kod:Tümünü seç

<?php
// Admin ayar sayfasını oluştur
function haber_eslestirici_admin_menu() {
    add_options_page(
        'Haber Eşleştirici Ayarları',
        'Haber Eşleştirici',
        'manage_options',
        'haber-eslestirici',
        'haber_eslestirici_settings_page'
    );
}
add_action('admin_menu', 'haber_eslestirici_admin_menu');

// Ayarları kaydet
function haber_eslestirici_register_settings() {
    register_setting(
        'haber_eslestirici_settings_group',
        'haber_eslestirici_settings',
        'haber_eslestirici_sanitize_settings'
    );

    add_settings_section(
        'haber_eslestirici_main_section',
        'Temel Ayarlar',
        null,
        'haber-eslestirici'
    );

    // Aktif/Pasif Alanı
    add_settings_field(
        'aktif',
        'Aktif/Pasif',
        'haber_eslestirici_aktif_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Haber Sayısı Alanı
    add_settings_field(
        'haber_sayisi',
        'Gösterilecek Haber Sayısı',
        'haber_eslestirici_sayi_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Kategori Seçimi (Textbox: Virgülle ayrılmış kategori ID'leri)
    add_settings_field(
        'kategoriler',
        'Kategoriler',
        'haber_eslestirici_kategoriler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Etiket Seçimi (TextBox: Virgülle ayrılmış etiket ID'leri)
    add_settings_field(
        'etiketler',
        'Etiketler',
        'haber_eslestirici_etiketler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );
}
add_action('admin_init', 'haber_eslestirici_register_settings');

// Aktif/Pasif input alanı
function haber_eslestirici_aktif_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="checkbox" name="haber_eslestirici_settings[aktif]" value="1" ' . checked(1, $options['aktif'] ?? 0, false) . '> Aktif';
}

// Haber sayısı input alanı
function haber_eslestirici_sayi_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="number" min="1" max="10" name="haber_eslestirici_settings[haber_sayisi]" value="' . ($options['haber_sayisi'] ?? 3) . '">';
}

// Kategori input alanı (Virgülle ayrılmış kategori ID'leri)
function haber_eslestirici_kategoriler_callback() {
    $options = get_option('haber_eslestirici_settings');
    $value = '';
    if (isset($options['kategoriler']) && is_array($options['kategoriler'])) {
        $value = implode(',', $options['kategoriler']);
    }
    echo '<input type="text" name="haber_eslestirici_settings[kategoriler]" value="' . esc_attr($value) . '">';
    echo '<p>Kategori ID\'lerini virgülle ayrılmış olarak giriniz. Örnek: 1,2,3</p>';
}

// Etiket input alanı (Virgülle ayrılmış etiket ID'leri)
function haber_eslestirici_etiketler_callback() {
    $options = get_option('haber_eslestirici_settings');
    $value = '';
    if (isset($options['etiketler']) && is_array($options['etiketler'])) {
        $value = implode(',', $options['etiketler']);
    }
    echo '<input type="text" name="haber_eslestirici_settings[etiketler]" value="' . esc_attr($value) . '">';
    echo '<p>Etiket ID\'lerini virgülle ayrılmış olarak giriniz. Örnek: 4,5,6</p>';
}

// Ayarlar Sayfası
function haber_eslestirici_settings_page() {
    ?>
    <div class="wrap">
        <h1>Haber Eşleştirici Ayarları</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('haber_eslestirici_settings_group');
            do_settings_sections('haber-eslestirici');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

// Veri Temizleme (sanitize) işlemi: metin alanındaki virgülle ayrılmış değerleri diziye çeviriyoruz
function haber_eslestirici_sanitize_settings($input) {
    $input['haber_sayisi'] = absint($input['haber_sayisi']);
    $input['aktif'] = isset($input['aktif']) ? 1 : 0;

    // Kategoriler için: girilen stringi virgülle böl, trim yap, boş değerleri filtrele ve absint uygula.
    if ( isset($input['kategoriler']) ) {
        $input['kategoriler'] = array_map('absint', array_filter(array_map('trim', explode(',', $input['kategoriler'])), 'strlen'));
    } else {
        $input['kategoriler'] = array();
    }

    // Etiketler için: girilen stringi virgülle böl, trim yap, boş değerleri filtrele ve absint uygula.
    if ( isset($input['etiketler']) ) {
        $input['etiketler'] = array_map('absint', array_filter(array_map('trim', explode(',', $input['etiketler'])), 'strlen'));
    } else {
        $input['etiketler'] = array();
    }
    
    return $input;
}

Re: aynı içerikleri temizleme wordpress eklentisi

Gönderilme zamanı: Sal Şub 18, 2025 1:47 pm
gönderen muratca61
bunlarda
Aşağıda, gösterilecek haberlerin (yazıların) mevcut yazıyla ilişkisini (ilgili kategoriler/etiketler üzerinden) hesaplayacak şekilde iki dosyadan oluşan tam eklenti örneğini bulabilirsiniz. Admin panelinde ayrıca "İlişkilendirme Tipi" seçeneği eklenmiştir; böylece kullanıcı, manuel (admin tarafından girilen kategori/etiket) veya ilgili yazının kategorileri/etiketleri bazlı ilişkilendirme yöntemini seçebilir.

Kod:Tümünü seç

haber-eslestirici.php

Kod:Tümünü seç

<?php
/*
Plugin Name: Haber Eşleştirici
Description: Admin panelinden yönetilebilen, ilgili yazıyla alakalı haber listesini gösteren eklenti.
Version: 2.0
Author: Sizin Adınız
*/

// Admin ayarlarını yüklüyoruz
require_once plugin_dir_path(__FILE__) . 'admin-settings.php';

// Kısa kod ve frontend fonksiyonları
function haber_eslestirici_listele() {
    $options = get_option('haber_eslestirici_settings');

    // Eklenti pasif ise mesaj göster
    if ( empty($options['aktif']) || !$options['aktif'] ) {
        return '<p>Haber listesi şu anda pasif durumda.</p>';
    }

    // İlişkilendirme tipi seçeneğine göre sorgu ayarlanacak:
    // "ilgili" seçildiyse, mevcut yazının kategorileri/etiketleri esas alınır.
    // "manuel" seçildiyse, admin tarafından girilen kategori/etiket ID'leri kullanılır.
    $relationship_type = isset($options['iliskilendirme_tipi']) ? $options['iliskilendirme_tipi'] : 'manuel';

    // Varsayılan sorgu argümanları
    $args = array(
        'post_type'      => 'post',
        'posts_per_page' => $options['haber_sayisi'] ?? 3,
        'meta_key'       => 'post_views_count',
        'orderby'        => 'meta_value_num',
        'order'          => 'ASC',
    );

    if ($relationship_type == 'ilgili' && is_singular('post')) {
        global $post;
        // Mevcut yazının kategori ve etiketlerini al
        $current_categories = wp_get_post_categories($post->ID);
        $current_tags = wp_get_post_tags($post->ID, array('fields' => 'ids'));

        // Eğer her iki terim seti boş ise, manuel alana geçebiliriz
        if ( empty($current_categories) && empty($current_tags) ) {
            // Manuel modda admin ayarlarında girilen terimler kullanılacak
            if (!empty($options['kategoriler'])) {
                $args['category__in'] = $options['kategoriler'];
            }
            if (!empty($options['etiketler'])) {
                $args['tag__in'] = $options['etiketler'];
            }
        } else {
            // İlişkili yazılarda, mevcut yazıya ait terimler üzerinden sorgu oluştur
            $tax_query = array('relation' => 'OR');
            if (!empty($current_categories)) {
                $tax_query[] = array(
                    'taxonomy' => 'category',
                    'field'    => 'term_id',
                    'terms'    => $current_categories,
                );
            }
            if (!empty($current_tags)) {
                $tax_query[] = array(
                    'taxonomy' => 'post_tag',
                    'field'    => 'term_id',
                    'terms'    => $current_tags,
                );
            }
            $args['tax_query']    = $tax_query;
            $args['post__not_in'] = array($post->ID); // Mevcut yazıyı hariç tut
        }
    } else {
        // Manuel ilişkilendirme modunda: admin tarafından girilen kategori/etiket ID'leri kullanılıyor.
        if (!empty($options['kategoriler'])) {
            $args['category__in'] = $options['kategoriler'];
        }
        if (!empty($options['etiketler'])) {
            $args['tag__in'] = $options['etiketler'];
        }
    }

    $query = new WP_Query($args);
    $output = '<div class="haber-listesi">';

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $thumbnail = get_the_post_thumbnail_url(get_the_ID(), 'medium');
            $output .= '<div class="haber-item">';
            if ($thumbnail) {
                $output .= '<a href="' . get_permalink() . '"><img src="' . $thumbnail . '" alt="' . get_the_title() . '"></a>';
            }
            $output .= '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>';
            $output .= '</div>';
        }
    } else {
        $output .= '<p>Gösterilecek haber bulunamadı.</p>';
    }
    
    $output .= '</div>';
    wp_reset_postdata();
    return $output;
}
add_shortcode('haber_eslestirici', 'haber_eslestirici_listele');

// CSS dosyalarını yükle
function haber_eslestirici_assets() {
    wp_enqueue_style('haber-eslestirici-css', plugins_url('haber-eslestirici.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'haber_eslestirici_assets');

Kod:Tümünü seç

admin-settings.php

Kod:Tümünü seç

<?php
// Admin ayar sayfasını oluştur
function haber_eslestirici_admin_menu() {
    add_options_page(
        'Haber Eşleştirici Ayarları',
        'Haber Eşleştirici',
        'manage_options',
        'haber-eslestirici',
        'haber_eslestirici_settings_page'
    );
}
add_action('admin_menu', 'haber_eslestirici_admin_menu');

// Ayarları kaydet
function haber_eslestirici_register_settings() {
    register_setting(
        'haber_eslestirici_settings_group',
        'haber_eslestirici_settings',
        'haber_eslestirici_sanitize_settings'
    );

    add_settings_section(
        'haber_eslestirici_main_section',
        'Temel Ayarlar',
        null,
        'haber-eslestirici'
    );

    // Aktif/Pasif Alanı
    add_settings_field(
        'aktif',
        'Aktif/Pasif',
        'haber_eslestirici_aktif_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Haber Sayısı Alanı
    add_settings_field(
        'haber_sayisi',
        'Gösterilecek Haber Sayısı',
        'haber_eslestirici_sayi_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // İlişkilendirme Tipi Alanı
    add_settings_field(
        'iliskilendirme_tipi',
        'İlişkilendirme Tipi',
        'haber_eslestirici_iliskilendirme_tipi_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Kategori Seçimi (Textbox: Virgülle ayrılmış kategori ID'leri)
    add_settings_field(
        'kategoriler',
        'Kategoriler',
        'haber_eslestirici_kategoriler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );

    // Etiket Seçimi (Textbox: Virgülle ayrılmış etiket ID'leri)
    add_settings_field(
        'etiketler',
        'Etiketler',
        'haber_eslestirici_etiketler_callback',
        'haber-eslestirici',
        'haber_eslestirici_main_section'
    );
}
add_action('admin_init', 'haber_eslestirici_register_settings');

// Aktif/Pasif input alanı
function haber_eslestirici_aktif_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="checkbox" name="haber_eslestirici_settings[aktif]" value="1" ' . checked(1, $options['aktif'] ?? 0, false) . '> Aktif';
}

// Haber sayısı input alanı
function haber_eslestirici_sayi_callback() {
    $options = get_option('haber_eslestirici_settings');
    echo '<input type="number" min="1" max="10" name="haber_eslestirici_settings[haber_sayisi]" value="' . ($options['haber_sayisi'] ?? 3) . '">';
}

// İlişkilendirme Tipi input alanı (Radio: Manuel veya İlgili Yazının Kategorileri/Etiketleri)
function haber_eslestirici_iliskilendirme_tipi_callback() {
    $options  = get_option('haber_eslestirici_settings');
    $selected = isset($options['iliskilendirme_tipi']) ? $options['iliskilendirme_tipi'] : 'manuel';
    echo '<label><input type="radio" name="haber_eslestirici_settings[iliskilendirme_tipi]" value="manuel" ' . checked($selected, 'manuel', false) . '> Manuel (Admin tarafından belirlenen kategoriler/etiketler)</label><br>';
    echo '<label><input type="radio" name="haber_eslestirici_settings[iliskilendirme_tipi]" value="ilgili" ' . checked($selected, 'ilgili', false) . '> İlgili Yazının Kategorileri/Etiketleri</label>';
}

// Kategori input alanı (Virgülle ayrılmış kategori ID'leri)
function haber_eslestirici_kategoriler_callback() {
    $options = get_option('haber_eslestirici_settings');
    $value   = '';
    if (isset($options['kategoriler']) && is_array($options['kategoriler'])) {
        $value = implode(',', $options['kategoriler']);
    }
    echo '<input type="text" name="haber_eslestirici_settings[kategoriler]" value="' . esc_attr($value) . '">';
    echo '<p>Kategori ID\'lerini virgülle ayrılmış olarak giriniz. Örnek: 1,2,3</p>';
}

// Etiket input alanı (Virgülle ayrılmış etiket ID'leri)
function haber_eslestirici_etiketler_callback() {
    $options = get_option('haber_eslestirici_settings');
    $value   = '';
    if (isset($options['etiketler']) && is_array($options['etiketler'])) {
        $value = implode(',', $options['etiketler']);
    }
    echo '<input type="text" name="haber_eslestirici_settings[etiketler]" value="' . esc_attr($value) . '">';
    echo '<p>Etiket ID\'lerini virgülle ayrılmış olarak giriniz. Örnek: 4,5,6</p>';
}

// Ayarlar Sayfası
function haber_eslestirici_settings_page() {
    ?>
    <div class="wrap">
        <h1>Haber Eşleştirici Ayarları</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('haber_eslestirici_settings_group');
            do_settings_sections('haber-eslestirici');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

// Veri Temizleme (sanitize) işlemi: metin alanındaki virgülle ayrılmış değerleri diziye çeviriyoruz
function haber_eslestirici_sanitize_settings($input) {
    $input['haber_sayisi'] = absint($input['haber_sayisi']);
    $input['aktif']       = isset($input['aktif']) ? 1 : 0;

    // İlişkilendirme tipi
    $allowed_types = array('manuel', 'ilgili');
    $input['iliskilendirme_tipi'] = in_array($input['iliskilendirme_tipi'] ?? 'manuel', $allowed_types) ? $input['iliskilendirme_tipi'] : 'manuel';

    // Kategoriler için: girilen stringi virgülle böl, trim yap, boş değerleri filtrele ve absint uygula.
    if ( isset($input['kategoriler']) ) {
        $input['kategoriler'] = array_map('absint', array_filter(array_map('trim', explode(',', $input['kategoriler'])), 'strlen'));
    } else {
        $input['kategoriler'] = array();
    }

    // Etiketler için: girilen stringi virgülle böl, trim yap, boş değerleri filtrele ve absint uygula.
    if ( isset($input['etiketler']) ) {
        $input['etiketler'] = array_map('absint', array_filter(array_map('trim', explode(',', $input['etiketler'])), 'strlen'));
    } else {
        $input['etiketler'] = array();
    }
    
    return $input;
}
?>