Re: wordpress yeni haber gösterim eklentisi
Gönderilme zamanı: Cum Şub 21, 2025 7:50 am
hatalıysa js sil ve üstteki kodu ekle
learning
https://mrt.muratca61.keenetic.link/phpbb/
https://mrt.muratca61.keenetic.link/phpbb/viewtopic.php?t=35
hatalıysa js sil ve üstteki kodu ekle
son tıklamalı artırmalıKod:Tümünü seç
<?php /** * Plugin Name: Related Posts Showcase * Description: "[habergoster]" kısa kodu ile yazıya benzer diğer yazıları gösterir. * Version: 2.1 * Author: [Your Name] */ // CSS ve JS dosyalarını kuyruğa alma function rps_enqueue_assets() { wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__)); wp_enqueue_script('rps-scripts', plugins_url('js/rps-scripts.js', __FILE__), array('jquery'), null, true); wp_localize_script('rps-scripts', 'rps_ajax_obj', array( 'ajax_url' => admin_url('admin-ajax.php'), )); } add_action('wp_enqueue_scripts', 'rps_enqueue_assets'); // Dinamik stilleri ekleme function rps_dynamic_styles() { $settings = get_option('rps_settings'); $border_radius = intval($settings['border_radius'] ?? 5); $row_height = intval($settings['row_height'] ?? 80); $header_height = intval($settings['header_height'] ?? 30); $image_border_radius = intval($settings['image_border_radius'] ?? 5); echo '<style type="text/css"> :root { --border-radius: ' . $border_radius . 'px; --row-height: ' . $row_height . 'px; --header-height: ' . $header_height . 'px; --image-border-radius: ' . $image_border_radius . 'px; } .rps-related-posts h3 { height: var(--header-height); line-height: var(--header-height); } </style>'; } add_action('wp_head', 'rps_dynamic_styles'); // Yazı görüntülenme sayısını artırma fonksiyonu (AJAX ile kullanılacak) function rps_set_post_views($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if ($count == '') { $count = 1; update_post_meta($postID, $count_key, $count); } else { $count++; update_post_meta($postID, $count_key, $count); } } // Önceki otomatik artış kodunu kapatıyoruz: // function rps_track_post_views($post_id) { // if (!is_single()) return; // if (empty($post_id)) { // global $post; // $post_id = $post->ID; // } // rps_set_post_views($post_id); // } // add_action('wp_head', 'rps_track_post_views'); // AJAX Handler: Gönderi görüntülenme sayısını artırıp yeni değeri döndürür function rps_ajax_increment_view() { $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } rps_set_post_views($post_id); $views = get_post_meta($post_id, 'post_views_count', true); wp_send_json_success(array('views' => intval($views))); } add_action('wp_ajax_rps_increment_view', 'rps_ajax_increment_view'); add_action('wp_ajax_nopriv_rps_increment_view', 'rps_ajax_increment_view'); // Shortcode fonksiyonu function rps_related_posts_showcase($atts) { ob_start(); // Yönetici ayarlarını al $settings = get_option('rps_settings'); // Ayarlar için varsayılan değerler $min_views = intval($settings['min_views'] ?? 0); $max_views = intval($settings['max_views'] ?? PHP_INT_MAX); $post_limit = intval($settings['post_limit'] ?? 5); $title_length = intval($settings['title_length'] ?? 50); $header_text = $settings['header_text'] ?? 'İlgili Yazılar'; $start_date = $settings['start_date'] ?? ''; $end_date = $settings['end_date'] ?? ''; $hours_filter = (isset($settings['hours_filter']) && $settings['hours_filter'] !== '') ? intval($settings['hours_filter']) : 0; // Geçerli gönderinin ID'sini al $post_id = get_the_ID(); // Geçerli gönderinin kategorilerini ve etiketlerini al $categories = wp_get_post_categories($post_id); $tags = wp_get_post_tags($post_id, array('fields' => 'ids')); // Meta sorgusu $meta_query = array( 'relation' => 'OR', array( 'key' => 'post_views_count', 'value' => array($min_views, $max_views), 'type' => 'NUMERIC', 'compare' => 'BETWEEN', ), array( 'key' => 'post_views_count', 'compare' => 'NOT EXISTS', ), ); if ($min_views > 0) { $meta_query = array( array( 'key' => 'post_views_count', 'value' => array($min_views, $max_views), 'type' => 'NUMERIC', 'compare' => 'BETWEEN', ), ); } // Tarih sorgusu: Sadece dolu olan kriterler, 'post_date' kolonuna göre uygulanacak. $date_conditions = array(); if ($hours_filter > 0) { $after_date = date('Y-m-d H:i:s', strtotime("-{$hours_filter} hours")); $date_conditions[] = array( 'column' => 'post_date', 'after' => $after_date, 'inclusive' => true, ); } if (!empty($start_date)) { $date_conditions[] = array( 'column' => 'post_date', 'after' => $start_date, 'inclusive' => true, ); } if (!empty($end_date)) { $date_conditions[] = array( 'column' => 'post_date', 'before' => $end_date, 'inclusive' => true, ); } if (!empty($date_conditions)) { if (count($date_conditions) > 1) { $date_query = array_merge(array('relation' => 'AND'), $date_conditions); } else { $date_query = $date_conditions; } } else { $date_query = array(); } // İlgili yazıları sorgula $args = array( 'post__not_in' => array($post_id), 'posts_per_page' => $post_limit, 'ignore_sticky_posts' => 1, 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $categories, ), array( 'taxonomy' => 'post_tag', 'field' => 'term_id', 'terms' => $tags, ), ), 'meta_query' => $meta_query, ); if (!empty($date_query)) { $args['date_query'] = $date_query; } $query = new WP_Query($args); if ($query->have_posts()) { echo '<div class="rps-related-posts">'; echo '<h3>' . esc_html($header_text) . '</h3>'; echo '<div class="rps-posts-wrapper">'; while ($query->have_posts()) { $query->the_post(); $title = get_the_title(); if (mb_strlen($title) > $title_length) { $title = mb_substr($title, 0, $title_length) . '...'; } $views = get_post_meta(get_the_ID(), 'post_views_count', true); $views = $views ? $views : 0; echo '<div class="rps-post">'; if (has_post_thumbnail()) { echo '<div class="rps-post-image">'; echo '<a href="' . get_permalink() . '">'; the_post_thumbnail('full'); echo '</a>'; echo '</div>'; } echo '<div class="rps-post-content">'; echo '<div class="rps-post-header">'; echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>'; //<!-- Görüntülenme sayısını tıklanabilir hale getiriyoruz --> echo '<div class="rps-post-views" data-post-id="' . get_the_ID() . '">👁️ ' . intval($views) . '</div>'; echo '</div>'; echo '</div>'; echo '</div>'; } echo '</div>'; echo '</div>'; } else { echo '<p>İlgili yazı bulunamadı.</p>'; } wp_reset_postdata(); return ob_get_clean(); } add_shortcode('habergoster', 'rps_related_posts_showcase'); // Yönetici ayarları fonksiyonları (değişiklik yok) function rps_register_settings() { register_setting('rps_settings_group', 'rps_settings'); } add_action('admin_init', 'rps_register_settings'); function rps_settings_page() { $settings = get_option('rps_settings'); ?> <div class="wrap"> <h1>Related Posts Showcase Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields('rps_settings_group'); ?> <table class="form-table"> <!-- Ayar alanları --> <tr valign="top"> <th scope="row">Gösterilecek Yazı Sayısı</th> <td><input type="number" name="rps_settings[post_limit]" value="<?php echo esc_attr($settings['post_limit'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlık Karakter Sınırı</th> <td><input type="number" name="rps_settings[title_length]" value="<?php echo esc_attr($settings['title_length'] ?? 50); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Satır Yüksekliği (px)</th> <td><input type="number" name="rps_settings[row_height]" value="<?php echo esc_attr($settings['row_height'] ?? 80); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Üst Başlık Metni</th> <td><input type="text" name="rps_settings[header_text]" value="<?php echo esc_attr($settings['header_text'] ?? 'İlgili Yazılar'); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlık Yüksekliği (px)</th> <td><input type="number" name="rps_settings[header_height]" value="<?php echo esc_attr($settings['header_height'] ?? 30); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Köşe Yuvarlatma (px)</th> <td><input type="number" name="rps_settings[border_radius]" value="<?php echo esc_attr($settings['border_radius'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Resim Köşe Yuvarlatma (px)</th> <td><input type="number" name="rps_settings[image_border_radius]" value="<?php echo esc_attr($settings['image_border_radius'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Minimum Görüntülenme Sayısı</th> <td><input type="number" name="rps_settings[min_views]" value="<?php echo esc_attr($settings['min_views'] ?? 0); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Maksimum Görüntülenme Sayısı</th> <td><input type="number" name="rps_settings[max_views]" value="<?php echo esc_attr($settings['max_views'] ?? 10000); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Geçmiş Saat Filtresi (saat)</th> <td><input type="number" name="rps_settings[hours_filter]" value="<?php echo esc_attr($settings['hours_filter'] ?? ''); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlangıç Tarihi</th> <td><input type="date" name="rps_settings[start_date]" value="<?php echo esc_attr($settings['start_date'] ?? ''); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Bitiş Tarihi</th> <td><input type="date" name="rps_settings[end_date]" value="<?php echo esc_attr($settings['end_date'] ?? ''); ?>" /></td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } function rps_add_settings_page() { add_options_page('Related Posts Showcase', 'Related Posts Showcase', 'manage_options', 'related-posts-showcase', 'rps_settings_page'); } add_action('admin_menu', 'rps_add_settings_page'); ?>
bu tıklama sadece belirlenen kullanıcı için ama diğer tarafları bozdumu bilmiyorumKod:Tümünü seç
<?php /** * Plugin Name: Related Posts Showcase * Description: "[habergoster]" kısa kodu ile yazıya benzer diğer yazıları gösterir. * Version: 2.3 * Author: [Your Name] */ // CSS ve JS dosyalarını kuyruğa alma function rps_enqueue_assets() { wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__)); wp_enqueue_script('rps-scripts', plugins_url('js/rps-scripts.js', __FILE__), array('jquery'), null, true); wp_localize_script('rps-scripts', 'rps_ajax_obj', array( 'ajax_url' => admin_url('admin-ajax.php'), )); } add_action('wp_enqueue_scripts', 'rps_enqueue_assets'); // Dinamik stilleri ekleme function rps_dynamic_styles() { $settings = get_option('rps_settings'); $border_radius = intval($settings['border_radius'] ?? 5); $row_height = intval($settings['row_height'] ?? 80); $header_height = intval($settings['header_height'] ?? 30); $image_border_radius = intval($settings['image_border_radius'] ?? 5); echo '<style type="text/css"> :root { --border-radius: ' . $border_radius . 'px; --row-height: ' . $row_height . 'px; --header-height: ' . $header_height . 'px; --image-border-radius: ' . $image_border_radius . 'px; } .rps-related-posts h3 { height: var(--header-height); line-height: var(--header-height); } /* İsteğe bağlı: tıklama yapılamayan ikonlar için stil */ .rps-post-views.no-click { cursor: default; pointer-events: none; opacity: 0.7; } </style>'; } add_action('wp_head', 'rps_dynamic_styles'); // Yazı görüntülenme sayısını artırma fonksiyonu (AJAX ile kullanılacak) function rps_set_post_views($postID) { $count_key = 'post_views_count'; $count = get_post_meta($postID, $count_key, true); if ($count == '') { $count = 1; update_post_meta($postID, $count_key, $count); } else { $count++; update_post_meta($postID, $count_key, $count); } } // AJAX Handler: Gönderi görüntülenme sayısını artırıp yeni değeri döndürür function rps_ajax_increment_view() { $post_id = intval($_POST['post_id']); if (!$post_id) { wp_send_json_error('Geçersiz gönderi ID'); } rps_set_post_views($post_id); $views = get_post_meta($post_id, 'post_views_count', true); wp_send_json_success(array('views' => intval($views))); } add_action('wp_ajax_rps_increment_view', 'rps_ajax_increment_view'); add_action('wp_ajax_nopriv_rps_increment_view', 'rps_ajax_increment_view'); // Shortcode fonksiyonu function rps_related_posts_showcase($atts) { ob_start(); // Yönetici ayarlarını al $settings = get_option('rps_settings'); // Ayarlar için varsayılan değerler $min_views = intval($settings['min_views'] ?? 0); $max_views = intval($settings['max_views'] ?? PHP_INT_MAX); $post_limit = intval($settings['post_limit'] ?? 5); $title_length = intval($settings['title_length'] ?? 50); $header_text = $settings['header_text'] ?? 'İlgili Yazılar'; $start_date = $settings['start_date'] ?? ''; $end_date = $settings['end_date'] ?? ''; $hours_filter = (isset($settings['hours_filter']) && $settings['hours_filter'] !== '') ? intval($settings['hours_filter']) : 0; // Geçerli gönderinin ID'sini al $post_id = get_the_ID(); // Geçerli gönderinin kategorilerini ve etiketlerini al $categories = wp_get_post_categories($post_id); $tags = wp_get_post_tags($post_id, array('fields' => 'ids')); // Meta sorgusu $meta_query = array( 'relation' => 'OR', array( 'key' => 'post_views_count', 'value' => array($min_views, $max_views), 'type' => 'NUMERIC', 'compare' => 'BETWEEN', ), array( 'key' => 'post_views_count', 'compare' => 'NOT EXISTS', ), ); if ($min_views > 0) { $meta_query = array( array( 'key' => 'post_views_count', 'value' => array($min_views, $max_views), 'type' => 'NUMERIC', 'compare' => 'BETWEEN', ), ); } // Tarih sorgusu: Sadece dolu olan kriterler, 'post_date' kolonuna göre uygulanacak. $date_conditions = array(); if ($hours_filter > 0) { $after_date = date('Y-m-d H:i:s', strtotime("-{$hours_filter} hours")); $date_conditions[] = array( 'column' => 'post_date', 'after' => $after_date, 'inclusive' => true, ); } if (!empty($start_date)) { $date_conditions[] = array( 'column' => 'post_date', 'after' => $start_date, 'inclusive' => true, ); } if (!empty($end_date)) { $date_conditions[] = array( 'column' => 'post_date', 'before' => $end_date, 'inclusive' => true, ); } if (!empty($date_conditions)) { if (count($date_conditions) > 1) { $date_query = array_merge(array('relation' => 'AND'), $date_conditions); } else { $date_query = $date_conditions; } } else { $date_query = array(); } // İlgili yazıları sorgula $args = array( 'post__not_in' => array($post_id), 'posts_per_page' => $post_limit, 'ignore_sticky_posts' => 1, 'orderby' => 'rand', 'tax_query' => array( 'relation' => 'OR', array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $categories, ), array( 'taxonomy' => 'post_tag', 'field' => 'term_id', 'terms' => $tags, ), ), 'meta_query' => $meta_query, ); if (!empty($date_query)) { $args['date_query'] = $date_query; } $query = new WP_Query($args); if ($query->have_posts()) { echo '<div class="rps-related-posts">'; echo '<h3>' . esc_html($header_text) . '</h3>'; echo '<div class="rps-posts-wrapper">'; while ($query->have_posts()) { $query->the_post(); $title = get_the_title(); if (mb_strlen($title) > $title_length) { $title = mb_substr($title, 0, $title_length) . '...'; } $views = get_post_meta(get_the_ID(), 'post_views_count', true); $views = $views ? $views : 0; // Sadece belirlenen kullanıcılar tıklama yapabilsin. $current_user = wp_get_current_user(); $allowed_users = array_map('trim', explode(',', $settings['clickable_users'] ?? '')); if (is_user_logged_in() && in_array($current_user->user_login, $allowed_users)) { // Kullanıcı yetkili: tıklanabilir ikon $view_icon = '<div class="rps-post-views" data-post-id="' . get_the_ID() . '">👁️ ' . intval($views) . '</div>'; } else { // Kullanıcı yetkili değil: tıklanamaz ikon $view_icon = '<div class="rps-post-views no-click">👁️ ' . intval($views) . '</div>'; } echo '<div class="rps-post">'; if (has_post_thumbnail()) { echo '<div class="rps-post-image">'; echo '<a href="' . get_permalink() . '">'; the_post_thumbnail('full'); echo '</a>'; echo '</div>'; } echo '<div class="rps-post-content">'; echo '<div class="rps-post-header">'; echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>'; echo $view_icon; echo '</div>'; echo '</div>'; echo '</div>'; } echo '</div>'; echo '</div>'; } else { echo '<p>İlgili yazı bulunamadı.</p>'; } wp_reset_postdata(); return ob_get_clean(); } add_shortcode('habergoster', 'rps_related_posts_showcase'); // Yönetici ayarları fonksiyonları function rps_register_settings() { register_setting('rps_settings_group', 'rps_settings'); } add_action('admin_init', 'rps_register_settings'); function rps_settings_page() { $settings = get_option('rps_settings'); ?> <div class="wrap"> <h1>Related Posts Showcase Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields('rps_settings_group'); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Gösterilecek Yazı Sayısı</th> <td><input type="number" name="rps_settings[post_limit]" value="<?php echo esc_attr($settings['post_limit'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlık Karakter Sınırı</th> <td><input type="number" name="rps_settings[title_length]" value="<?php echo esc_attr($settings['title_length'] ?? 50); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Satır Yüksekliği (px)</th> <td><input type="number" name="rps_settings[row_height]" value="<?php echo esc_attr($settings['row_height'] ?? 80); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Üst Başlık Metni</th> <td><input type="text" name="rps_settings[header_text]" value="<?php echo esc_attr($settings['header_text'] ?? 'İlgili Yazılar'); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlık Yüksekliği (px)</th> <td><input type="number" name="rps_settings[header_height]" value="<?php echo esc_attr($settings['header_height'] ?? 30); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Köşe Yuvarlatma (px)</th> <td><input type="number" name="rps_settings[border_radius]" value="<?php echo esc_attr($settings['border_radius'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Resim Köşe Yuvarlatma (px)</th> <td><input type="number" name="rps_settings[image_border_radius]" value="<?php echo esc_attr($settings['image_border_radius'] ?? 5); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Minimum Görüntülenme Sayısı</th> <td><input type="number" name="rps_settings[min_views]" value="<?php echo esc_attr($settings['min_views'] ?? 0); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Maksimum Görüntülenme Sayısı</th> <td><input type="number" name="rps_settings[max_views]" value="<?php echo esc_attr($settings['max_views'] ?? 10000); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Geçmiş Saat Filtresi (saat)</th> <td><input type="number" name="rps_settings[hours_filter]" value="<?php echo esc_attr($settings['hours_filter'] ?? ''); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Başlangıç Tarihi</th> <td><input type="date" name="rps_settings[start_date]" value="<?php echo esc_attr($settings['start_date'] ?? ''); ?>" /></td> </tr> <tr valign="top"> <th scope="row">Bitiş Tarihi</th> <td><input type="date" name="rps_settings[end_date]" value="<?php echo esc_attr($settings['end_date'] ?? ''); ?>" /></td> </tr> <!-- Virgülle ayrılmış tıklanabilir kullanıcılar alanı --> <tr valign="top"> <th scope="row">Tıklanabilir Kullanıcılar (virgül ile ayrılmış)</th> <td> <input type="text" name="rps_settings[clickable_users]" value="<?php echo esc_attr($settings['clickable_users'] ?? ''); ?>" /> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } function rps_add_settings_page() { add_options_page('Related Posts Showcase', 'Related Posts Showcase', 'manage_options', 'related-posts-showcase', 'rps_settings_page'); } add_action('admin_menu', 'rps_add_settings_page'); ?>