son olarak şu şekilde güncelleyelim gösterim sayısı en düşük olan yani sıfırdan başlayarak öncelik versin
11 saniye hakkında Akıl yürütüldü
Aşağıdaki örnekte, haber sorgusunu oluştururken 'order' => 'ASC' kullanarak gösterim sayısı (post_views_count) en düşük olanların (örneğin, sıfırdan başlayanların) listede ilk sırada yer almasını sağlıyoruz.
Aşağıda güncellenmiş dosya içeriklerini bulabilirsiniz:
Kod:Tümünü seç
haber-eslestirici.phpKod: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ı; burada 'order' => 'ASC' ile // gösterim sayısı (post_views_count) en düşükten başlayarak sıralanır. $args = array( 'post_type' => 'post', 'posts_per_page' => $options['haber_sayisi'] ?? 3, 'meta_key' => 'post_views_count', 'orderby' => 'meta_value_num', 'order' => 'ASC', // En düşük gösterim sayısına sahip yazılar önce gelir ); 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.phpKod: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; } ?>