2. sayfa (Toplam 2 sayfa)

Re: wordpress yeni haber gösterim eklentisi

Gönderilme zamanı: Cum Şub 21, 2025 7:50 am
gönderen muratca61
hatalıysa js sil ve üstteki kodu ekle

Re: wordpress yeni haber gösterim eklentisi

Gönderilme zamanı: Cum Şub 21, 2025 8:08 am
gönderen muratca61
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');
?>

Re: wordpress yeni haber gösterim eklentisi

Gönderilme zamanı: Cum Şub 21, 2025 8:15 am
gönderen muratca61
bu tıklama sadece belirlenen kullanıcı için ama diğer tarafları bozdumu bilmiyorum

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.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');
?>