wordpress yeni haber gösterim eklentisi

Genel Forum
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

copilota sorduk

Kod:Tümünü seç

selam bir wordpress uygulaması yapalım. bu uygulama yeni klasör içinde olsun. bu uygulama [habergoster] etiketinin girildiği yazıların içinde o yazı ile alakalı (etiket, kategori en az yada hiç gösterimi olmayan) yazıları güzel bir görüntüde ufak kip bir kalıp içerisinde ufak öne çıkan reim ve belirli bir sayıda başlık içerecek şekilde göstersin ve tıklamayla o yazıya gitsin. kaçtane göstereceğini admin sayfasında belirleyelim. daha başka ince ayar boyut özelliği başlık karakter sayısı ayarlarını admin sayfasındda yapabilelim....

Tabii ki, bu harika bir fikir! Bir WordPress uygulaması oluşturmak için birkaç adım izlememiz gerekecek. Öncelikle temel yapılandırmayı yaparak başlayalım ve ardından özel eklentimizi geliştirelim.

Adım 1: Yeni Klasör Oluşturma ve WordPress Kurulumu
Sunucunuzda yeni bir klasör oluşturun ve WordPress kurulum dosyalarını buraya indirin.

WordPress'i bu klasöre kurun ve yapılandırma ayarlarını yapın.

Adım 2: Yeni Bir Plugin Oluşturma
WordPress kurulumunuzda /wp-content/plugins/ dizinine gidin ve yeni bir klasör oluşturun. Örneğin:

Kod:Tümünü seç

related-posts-showcase
Bu klasörün içinde related-posts-showcase.php adında bir dosya oluşturun.

Adım 3: Plugin Dosyasını Yapılandırma
Aşağıdaki kodu

Kod:Tümünü seç

related-posts-showcase.php
dosyasına yapıştırarak eklenti temelini atın:

Kod:Tümünü seç

<?php
/**
 * Plugin Name: Related Posts Showcase
 * Description: "[habergoster]" shortcode'u ile ilgili yazıları gösterir.
 * Version: 1.0
 * Author: [Your Name]
 */

// Shortcode fonksiyonu
function rps_related_posts_showcase($atts) {
    ob_start();

    // Yönetici ayarlarını al
    $settings = get_option('rps_settings');
    $post_limit = isset($settings['post_limit']) ? $settings['post_limit'] : 5;
    $title_length = isset($settings['title_length']) ? $settings['title_length'] : 50;

    // Geçerli gönderinin etiketlerini al
    $tags = wp_get_post_tags(get_the_ID(), array('fields' => 'ids'));

    // "habergoster" etiketinin ID'sini al
    $habergoster_tag = get_term_by('slug', 'habergoster', 'post_tag');
    if ($habergoster_tag) {
        $habergoster_tag_id = $habergoster_tag->term_id;
    } else {
        return ''; // Eğer "habergoster" etiketi yoksa hiçbir şey gösterme
    }

    // Eğer geçerli gönderi "habergoster" etiketine sahipse
    if (has_tag('habergoster', get_the_ID())) {

        // İlgili yazıları sorgula
        $args = array(
            'tag__in' => $tags,
            'post__not_in' => array(get_the_ID()),
            'posts_per_page' => $post_limit,
            'ignore_sticky_posts' => 1,
            'orderby' => 'rand' // İsterseniz farklı bir sıralama kullanabilirsiniz
        );
        $query = new WP_Query($args);

        if ($query->have_posts()) {
            echo '<div class="rps-related-posts">';
            while ($query->have_posts()) {
                $query->the_post();
                $title = get_the_title();
                if (mb_strlen($title) > $title_length) {
                    $title = mb_substr($title, 0, $title_length) . '...';
                }
                echo '<div class="rps-post">';
                if (has_post_thumbnail()) {
                    echo '<a href="' . get_permalink() . '">';
                    the_post_thumbnail('thumbnail');
                    echo '</a>';
                }
                echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                echo '</div>';
            }
            echo '</div>';
        }
        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() {
    ?>
    <div class="wrap">
        <h1>Related Posts Showcase Ayarları</h1>
        <form method="post" action="options.php">
            <?php settings_fields('rps_settings_group'); ?>
            <?php $settings = get_option('rps_settings'); ?>
            <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 isset($settings['post_limit']) ? 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 isset($settings['title_length']) ? esc_attr($settings['title_length']) : 50; ?>" /></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');
?>

Kod:Tümünü seç

[habergoster]

muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

en uzun

Kod:Tümünü seç

related-posts-showcase.php

Kod:Tümünü seç

<?php
/**
 * Plugin Name: Related Posts Showcase
 * Description: "[habergoster]" shortcode'u ile yazıya benzer diğer yazıları gösterir.
 * Version: 1.4
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'rps_enqueue_assets');

// Dinamik stilleri ekleme
function rps_dynamic_styles() {
    $settings = get_option('rps_settings');
    $border_radius = isset($settings['border_radius']) ? intval($settings['border_radius']) : 0;
    $row_height = isset($settings['row_height']) ? intval($settings['row_height']) : 60;
    ?>
    <style type="text/css">
    .rps-table th, .rps-table td, .rps-post {
        border-radius: <?php echo $border_radius; ?>px;
        height: <?php echo $row_height; ?>px;
    }
    </style>
    <?php
}
add_action('wp_head', 'rps_dynamic_styles');

// Yazı görüntülenme sayısını artırma fonksiyonları
function rps_set_post_views($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if (empty($count)) {
        $count = 1;
        update_post_meta($postID, $count_key, $count);
    } else {
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
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');

// Shortcode fonksiyonu
function rps_related_posts_showcase($atts) {
    ob_start();

    // Yönetici ayarlarını al
    $settings = get_option('rps_settings');
    $post_limit = isset($settings['post_limit']) ? intval($settings['post_limit']) : 5;
    $title_length = isset($settings['title_length']) ? intval($settings['title_length']) : 50;
    $table_style = isset($settings['table_style']) && $settings['table_style'] == 1;
    $row_height = isset($settings['row_height']) ? intval($settings['row_height']) : 60;
    $header_text = isset($settings['header_text']) ? esc_html($settings['header_text']) : 'İlgili Yazılar';
    $column_count = isset($settings['column_count']) ? intval($settings['column_count']) : 2;
    $border_radius = isset($settings['border_radius']) ? intval($settings['border_radius']) : 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'));

    // İ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,
            ),
        ),
    );

    // Eğer kategori ve etiket yoksa, en az görüntülenen yazıları getir
    if (empty($categories) && empty($tags)) {
        $args['orderby'] = 'meta_value_num';
        $args['meta_key'] = 'post_views_count';
        $args['order'] = 'ASC';
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {

        if ($table_style) {
            echo '<table class="rps-table" style="border-radius:' . $border_radius . 'px;">';
            echo '<thead><tr><th colspan="' . $column_count . '">' . $header_text . '</th></tr></thead><tbody>';

            $counter = 0;
            while ($query->have_posts()) {
                $query->the_post();
                $title = get_the_title();
                if (mb_strlen($title) > $title_length) {
                    $title = mb_substr($title, 0, $title_length) . '...';
                }

                if ($counter % $column_count == 0) {
                    echo '<tr class="rps-post">';
                }

                echo '<td>';
                if (has_post_thumbnail()) {
                    echo '<a href="' . get_permalink() . '">';
                    the_post_thumbnail('thumbnail');
                    echo '</a><br>';
                }
                echo '<a href="' . get_permalink() . '">' . esc_html($title) . '</a>';
                echo '</td>';

                $counter++;
                if ($counter % $column_count == 0) {
                    echo '</tr>';
                }
            }

            // Son satırı tamamla
            if ($counter % $column_count != 0) {
                $remaining = $column_count - ($counter % $column_count);
                for ($i = 0; $i < $remaining; $i++) {
                    echo '<td></td>';
                }
                echo '</tr>';
            }

            echo '</tbody></table>';
        } else {
            // Önceki stil (eğer tablo stili etkin değilse)
            echo '<div class="rps-related-posts">';
            echo '<h3>' . $header_text . '</h3>';
            while ($query->have_posts()) {
                $query->the_post();
                $title = get_the_title();
                if (mb_strlen($title) > $title_length) {
                    $title = mb_substr($title, 0, $title_length) . '...';
                }
                echo '<div class="rps-post" style="border-radius:' . $border_radius . 'px;">';
                    if (has_post_thumbnail()) {
                        echo '<div class="rps-post-image">';
                            echo '<a href="' . get_permalink() . '">';
                                the_post_thumbnail('thumbnail');
                            echo '</a>';
                        echo '</div>';
                    }
                    echo '<div class="rps-post-content">';
                        echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                    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() {
    ?>
    <div class="wrap">
        <h1>Related Posts Showcase Ayarları</h1>
        <form method="post" action="options.php">
            <?php settings_fields('rps_settings_group'); ?>
            <?php $settings = get_option('rps_settings'); ?>
            <table class="form-table">
                <!-- Mevcut ayarlar -->
                <tr valign="top">
                    <th scope="row">Gösterilecek Yazı Sayısı</th>
                    <td><input type="number" name="rps_settings[post_limit]" value="<?php echo isset($settings['post_limit']) ? 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 isset($settings['title_length']) ? esc_attr($settings['title_length']) : 50; ?>" /></td>
                </tr>
                <!-- Yeni ayarlar -->
                <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 isset($settings['row_height']) ? esc_attr($settings['row_height']) : 60; ?>" /></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 isset($settings['header_text']) ? esc_attr($settings['header_text']) : 'İlgili Yazılar'; ?>" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row">Sütun Sayısı</th>
                    <td><input type="number" name="rps_settings[column_count]" value="<?php echo isset($settings['column_count']) ? esc_attr($settings['column_count']) : 2; ?>" min="1" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row">Tablo Stili Etkinleştir</th>
                    <td>
                        <input type="checkbox" name="rps_settings[table_style]" value="1" <?php checked(1, isset($settings['table_style']) ? $settings['table_style'] : 0); ?> />
                    </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 isset($settings['border_radius']) ? esc_attr($settings['border_radius']) : 0; ?>" /></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');
?>

Kod:Tümünü seç

css/rps-styles.css

Kod:Tümünü seç

/* Tablo stili */
.rps-table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 20px;
    text-align: center;
}

.rps-table th,
.rps-table td {
    border: 1px solid #ccc;
    padding: 8px;
}

.rps-table th {
    background-color: #f2f2f2;
    font-size: 16px;
    font-weight: bold;
}

.rps-table td img {
    max-width: 100%;
    height: auto;
}

.rps-table td a {
    text-decoration: none;
    color: #333;
}

.rps-table td a:hover {
    text-decoration: underline;
}

/* Genel stil ayarları */
.rps-related-posts {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.rps-related-posts h3 {
    font-size: 18px;
    margin: 0;
    text-align: center;
}

.rps-post {
    display: flex;
    align-items: center;
    padding: 8px;
    border: 1px solid #ccc;
    transition: background-color 0.2s;
    /* Köşe yuvarlatma dinamik olarak eklenecek */
}

.rps-post:hover {
    background-color: #f5f5f5;
}

.rps-post-image {
    flex-shrink: 0;
    margin-right: 10px;
}

.rps-post-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Köşe yuvarlatma dinamik olarak eklenecek */
}

.rps-post-content {
    flex: 1;
    overflow: hidden;
}

.rps-post-content h4 {
    font-size: 14px;
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.rps-post-content h4 a {
    text-decoration: none;
    color: #333;
}

.rps-post-content h4 a:hover {
    text-decoration: underline;
}
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

son uzun dosya

Kod:Tümünü seç

/* Tablo stili */
.rps-table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 20px;
    text-align: center;
}

.rps-table th,
.rps-table td {
    border: 1px solid #ccc;
    padding: 8px;
}

.rps-table th {
    background-color: #f2f2f2;
    font-size: 16px;
    font-weight: bold;
}

.rps-table td img {
    max-width: 100%;
    height: auto;
}

.rps-table td a {
    text-decoration: none;
    color: #333;
}

.rps-table td a:hover {
    text-decoration: underline;
}

/* Genel stil ayarları */
.rps-related-posts {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.rps-related-posts h3 {
    font-size: 18px;
    margin: 0;
    text-align: center;
}

.rps-post {
    display: flex;
    align-items: center;
    padding: 8px;
    border: 1px solid #ccc;
    transition: background-color 0.2s;
    /* Köşe yuvarlatma dinamik olarak eklenecek */
}

.rps-post:hover {
    background-color: #f5f5f5;
}

.rps-post-image {
    flex-shrink: 0;
    margin-right: 10px;
}

.rps-post-image img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    /* Köşe yuvarlatma dinamik olarak eklenecek */
}

.rps-post-content {
    flex: 1;
    overflow: hidden;
}

.rps-post-content h4 {
    font-size: 14px;
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.rps-post-content h4 a {
    text-decoration: none;
    color: #333;
}

.rps-post-content h4 a:hover {
    text-decoration: underline;
}

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: 1.6
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
add_action('wp_enqueue_scripts', 'rps_enqueue_assets');

// Dinamik stilleri ekleme
function rps_dynamic_styles() {
    $settings = get_option('rps_settings');
    $border_radius = isset($settings['border_radius']) ? intval($settings['border_radius']) : 0;
    $row_height = isset($settings['row_height']) ? intval($settings['row_height']) : 60;
    $header_height = isset($settings['header_height']) ? intval($settings['header_height']) : 30;
    ?>
    <style type="text/css">
    .rps-table th, .rps-table td, .rps-post, .rps-post-image img {
        border-radius: <?php echo $border_radius; ?>px;
    }
    .rps-post {
        height: <?php echo $row_height; ?>px;
    }
    .rps-post-image, .rps-post-image img {
        width: <?php echo $row_height; ?>px;
        height: <?php echo $row_height; ?>px;
    }
    .rps-related-posts h3 {
        height: <?php echo $header_height; ?>px;
        line-height: <?php echo $header_height; ?>px;
    }
    </style>
    <?php
}
add_action('wp_head', 'rps_dynamic_styles');

// Yazı görüntülenme sayısını artırma fonksiyonları
function rps_set_post_views($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if (empty($count)) {
        $count = 1;
        update_post_meta($postID, $count_key, $count);
    } else {
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
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');

// Shortcode fonksiyonu
function rps_related_posts_showcase($atts) {
    ob_start();

    // Yönetici ayarlarını al
    $settings = get_option('rps_settings');
    $post_limit = isset($settings['post_limit']) ? intval($settings['post_limit']) : 5;
    $title_length = isset($settings['title_length']) ? intval($settings['title_length']) : 50;
    $table_style = isset($settings['table_style']) && $settings['table_style'] == 1;
    $row_height = isset($settings['row_height']) ? intval($settings['row_height']) : 60;
    $header_text = isset($settings['header_text']) ? esc_html($settings['header_text']) : 'İlgili Yazılar';
    $header_height = isset($settings['header_height']) ? intval($settings['header_height']) : 30;
    $column_count = isset($settings['column_count']) ? intval($settings['column_count']) : 2;
    $border_radius = isset($settings['border_radius']) ? intval($settings['border_radius']) : 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'));

    // İ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,
            ),
        ),
    );

    // Eğer kategori ve etiket yoksa, en az görüntülenen yazıları getir
    if (empty($categories) && empty($tags)) {
        $args['orderby'] = 'meta_value_num';
        $args['meta_key'] = 'post_views_count';
        $args['order'] = 'ASC';
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {

        if ($table_style) {
            // Tablo stili
            echo '<table class="rps-table" style="border-radius:' . $border_radius . 'px;">';
            echo '<thead><tr><th colspan="' . $column_count . '" style="height: ' . $header_height . 'px; line-height: ' . $header_height . 'px;">' . $header_text . '</th></tr></thead><tbody>';

            $counter = 0;
            while ($query->have_posts()) {
                $query->the_post();
                $title = get_the_title();
                if (mb_strlen($title) > $title_length) {
                    $title = mb_substr($title, 0, $title_length) . '...';
                }

                if ($counter % $column_count == 0) {
                    echo '<tr class="rps-post">';
                }

                echo '<td>';
                if (has_post_thumbnail()) {
                    echo '<a href="' . get_permalink() . '">';
                    the_post_thumbnail('thumbnail', array('style' => 'width: ' . $row_height . 'px; height: ' . $row_height . 'px; object-fit: cover;'));
                    echo '</a><br>';
                }
                echo '<a href="' . get_permalink() . '">' . esc_html($title) . '</a>';
                echo '</td>';

                $counter++;
                if ($counter % $column_count == 0) {
                    echo '</tr>';
                }
            }

            // Son satırı tamamla
            if ($counter % $column_count != 0) {
                $remaining = $column_count - ($counter % $column_count);
                for ($i = 0; $i < $remaining; $i++) {
                    echo '<td></td>';
                }
                echo '</tr>';
            }

            echo '</tbody></table>';
        } else {
            // Liste görünümü
            echo '<div class="rps-related-posts">';
            echo '<h3 style="height: ' . $header_height . 'px; line-height: ' . $header_height . 'px;">' . $header_text . '</h3>';
            while ($query->have_posts()) {
                $query->the_post();
                $title = get_the_title();
                if (mb_strlen($title) > $title_length) {
                    $title = mb_substr($title, 0, $title_length) . '...';
                }
                echo '<div class="rps-post" style="border-radius:' . $border_radius . 'px;">';
                    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 '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                    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() {
    ?>
    <div class="wrap">
        <h1>Related Posts Showcase Ayarları</h1>
        <form method="post" action="options.php">
            <?php settings_fields('rps_settings_group'); ?>
            <?php $settings = get_option('rps_settings'); ?>
            <table class="form-table">
                <!-- Mevcut ve yeni ayarlar -->
                <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'] ?? 60); ?>" /></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">Sütun Sayısı</th>
                    <td><input type="number" name="rps_settings[column_count]" value="<?php echo esc_attr($settings['column_count'] ?? 2); ?>" min="1" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row">Tablo Stili Etkinleştir</th>
                    <td>
                        <input type="checkbox" name="rps_settings[table_style]" value="1" <?php checked(1, $settings['table_style'] ?? 0); ?> />
                    </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'] ?? 0); ?>" /></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');
?>
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

dosya yapısı

Kod:Tümünü seç

wp-content/
└── plugins/
    └── related-posts-showcase/
        ├── related-posts-showcase.php
        └── css/
            └── rps-styles.css
        └── js/
            └── rps-scripts.js
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

çalışan kodlar ve güzel

Kod:Tümünü seç

/* Genel stil ayarları */
.rps-related-posts {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rps-related-posts h3 {
    font-size: 20px;
    margin: 0;
    text-align: center;
    height: var(--header-height);
    line-height: var(--header-height);
}

.rps-posts-wrapper {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rps-post {
    display: flex;
    align-items: center;
    padding: 8px;
    border: 1px solid #ccc;
    border-radius: var(--border-radius);
    transition: background-color 0.2s;
    height: var(--row-height);
    overflow: hidden; /* Satırın yüksekliğini aşan içerikleri gizlemek için */
}

.rps-post:hover {
    background-color: #f5f5f5;
}

.rps-post-image {
    flex-shrink: 0;
    margin-right: 10px;
    height: 100%;
}

.rps-post-image img {
    height: 100%;
    width: auto;
    object-fit: cover;
    border-radius: var(--image-border-radius);
}

.rps-post-content {
    flex: 1;
    overflow: hidden;
}

.rps-post-content h4 {
    font-size: 16px;
    margin: 0;
    line-height: 1.2;
}

.rps-post-content h4 a {
    text-decoration: none;
    color: #333;
}

.rps-post-content h4 a:hover {
    text-decoration: underline;
}

/* Responsive Tasarım */
@media (max-width: 600px) {
    .rps-post {
        flex-direction: column;
        align-items: flex-start;
        height: auto;
    }
    .rps-post-image {
        margin-right: 0;
        margin-bottom: 10px;
        height: auto;
        width: 100%;
    }
    .rps-post-image img {
        width: 100%;
        height: auto;
    }
}

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: 1.8
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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');

// Shortcode fonksiyonu
function rps_related_posts_showcase($atts) {
    ob_start();

    // Yönetici ayarlarını al
    $settings = get_option('rps_settings');
    $post_limit = intval($settings['post_limit'] ?? 5);
    $title_length = intval($settings['title_length'] ?? 50);
    $row_height = intval($settings['row_height'] ?? 80);
    $header_text = esc_html($settings['header_text'] ?? 'İlgili Yazılar');
    $header_height = intval($settings['header_height'] ?? 30);
    $border_radius = intval($settings['border_radius'] ?? 5);
    $image_border_radius = intval($settings['image_border_radius'] ?? 5);

    // 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'));

    // İ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,
            ),
        ),
    );

    // Eğer kategori ve etiket yoksa, en az görüntülenen yazıları getir
    if (empty($categories) && empty($tags)) {
        $args['orderby'] = 'meta_value_num';
        $args['meta_key'] = 'post_views_count';
        $args['order'] = 'ASC';
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        // Liste görünümü
        echo '<div class="rps-related-posts">';
        echo '<h3>' . $header_text . '</h3>'; // Başlık

        // Ana kapsayıcı div
        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) . '...';
            }
            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 '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                echo '</div>';
            echo '</div>'; // .rps-post
        }

        echo '</div>'; // .rps-posts-wrapper
        echo '</div>'; // .rps-related-posts
    } 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() {
    ?>
    <div class="wrap">
        <h1>Related Posts Showcase Ayarları</h1>
        <form method="post" action="options.php">
            <?php settings_fields('rps_settings_group'); ?>
            <?php $settings = get_option('rps_settings'); ?>
            <table class="form-table">
                <!-- Mevcut ve yeni ayarlar -->
                <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>
            </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');
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

çalışan son kodlar

Kod:Tümünü seç

/* Genel stil ayarlar覺 */
.rps-related-posts {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rps-related-posts h3 {
    font-size: 20px;
    margin: 0;
    text-align: center;
    height: var(--header-height);
    line-height: var(--header-height);
}

.rps-posts-wrapper {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rps-post {
    display: flex;
    align-items: center;
    padding: 8px;
    border: 1px solid #ccc;
    border-radius: var(--border-radius);
    transition: background-color 0.2s;
    height: var(--row-height);
    overflow: hidden;
}

.rps-post:hover {
    background-color: #f5f5f5;
}

.rps-post-image {
    flex-shrink: 0;
    margin-right: 10px;
    height: 100%;
}

.rps-post-image img {
    height: 100%;
    width: auto;
    object-fit: cover;
    border-radius: var(--image-border-radius);
}

.rps-post-content {
    flex: 1;
    overflow: hidden;
}

.rps-post-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rps-post-header h4 {
    margin: 0;
    font-size: 16px;
    line-height: 1.2;
}

.rps-post-header h4 a {
    text-decoration: none;
    color: #333;
}

.rps-post-header h4 a:hover {
    text-decoration: underline;
}

.rps-post-views {
    font-size: 14px;
    color: #555;
    display: flex;
    align-items: center;
    margin-left: 10px;
}

/* Responsive Tasar覺m */
@media (max-width: 600px) {
    .rps-post {
        flex-direction: column;
        align-items: flex-start;
        height: auto;
    }
    .rps-post-image {
        margin-right: 0;
        margin-bottom: 10px;
        height: auto;
        width: 100%;
    }
    .rps-post-image img {
        width: 100%;
        height: auto;
    }
    .rps-post-header {
        flex-direction: row;
        width: 100%;
    }
    .rps-post-header h4 {
        flex: 1;
    }
}

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: 1.9
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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 fonksiyonları
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);
    }
}
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');

// Shortcode fonksiyonu
function rps_related_posts_showcase($atts) {
    ob_start();

    // Yönetici ayarlarını al
    $settings = get_option('rps_settings');
    $post_limit = intval($settings['post_limit'] ?? 5);
    $title_length = intval($settings['title_length'] ?? 50);
    $row_height = intval($settings['row_height'] ?? 80);
    $header_text = esc_html($settings['header_text'] ?? 'İlgili Yazılar');
    $header_height = intval($settings['header_height'] ?? 30);
    $border_radius = intval($settings['border_radius'] ?? 5);
    $image_border_radius = intval($settings['image_border_radius'] ?? 5);

    // 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'));

    // İ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,
            ),
        ),
    );

    // Eğer kategori ve etiket yoksa, en az görüntülenen yazıları getir
    if (empty($categories) && empty($tags)) {
        $args['orderby'] = 'meta_value_num';
        $args['meta_key'] = 'post_views_count';
        $args['order'] = 'ASC';
    }

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        // Liste görünümü
        echo '<div class="rps-related-posts">';
        echo '<h3>' . $header_text . '</h3>'; // Başlık

        // Ana kapsayıcı div
        echo '<div class="rps-posts-wrapper">';

        while ($query->have_posts()) {
            $query->the_post();

            // Yazı başlığını al ve karakter sınırını uygula
            $title = get_the_title();
            if (mb_strlen($title) > $title_length) {
                $title = mb_substr($title, 0, $title_length) . '...';
            }

            // Yazı görüntülenme sayısını al
            $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">';

                    // Başlık ve görüntülenme sayısı kapsayıcısı
                    echo '<div class="rps-post-header">';
                        echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                        // Görüntülenme sayısı ve göz emojisi
                        echo '<div class="rps-post-views">';
                            echo '👁️ ' . intval($views);
                        echo '</div>';
                    echo '</div>'; // .rps-post-header

                echo '</div>'; // .rps-post-content
            echo '</div>'; // .rps-post
        }

        echo '</div>'; // .rps-posts-wrapper
        echo '</div>'; // .rps-related-posts
    } 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() {
    ?>
    <div class="wrap">
        <h1>Related Posts Showcase Ayarları</h1>
        <form method="post" action="options.php">
            <?php settings_fields('rps_settings_group'); ?>
            <?php $settings = get_option('rps_settings'); ?>
            <table class="form-table">
                <!-- Mevcut ve yeni ayarlar -->
                <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>
            </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');
?>
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

çalışan ve güzel çalışan cgpt

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.0
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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 fonksiyonları
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);
    }
}
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');

// 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'] ?? '';

    // 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',
        // `post_views_count` meta verisi olan yazılar için
        array(
            'key'     => 'post_views_count',
            'value'   => array($min_views, $max_views),
            'type'    => 'NUMERIC',
            'compare' => 'BETWEEN',
        ),
        // `post_views_count` meta verisi olmayan yazılar için
        array(
            'key'     => 'post_views_count',
            'compare' => 'NOT EXISTS',
        ),
    );

    // Eğer minimum görüntülenme sayısı 1 veya daha büyükse, `NOT EXISTS` durumunu kaldırıyoruz
    if ($min_views > 0) {
        $meta_query = array(
            array(
                'key'     => 'post_views_count',
                'value'   => array($min_views, $max_views),
                'type'    => 'NUMERIC',
                'compare' => 'BETWEEN',
            ),
        );
    }

    // Tarih sorgusu
    $date_query = array();
    if (!empty($start_date) || !empty($end_date)) {
        $date_query[] = array(
            'after'     => $start_date,
            'before'    => $end_date,
            'inclusive' => true,
        );
    }

    // İ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()) {
        // Liste görünümü
        echo '<div class="rps-related-posts">';
        echo '<h3>' . esc_html($header_text) . '</h3>'; // Başlık

        // Ana kapsayıcı div
        echo '<div class="rps-posts-wrapper">';

        while ($query->have_posts()) {
            $query->the_post();

            // Yazı başlığını al ve karakter sınırını uygula
            $title = get_the_title();
            if (mb_strlen($title) > $title_length) {
                $title = mb_substr($title, 0, $title_length) . '...';
            }

            // Yazı görüntülenme sayısını al
            $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">';
                    // Başlık ve görüntülenme sayısı kapsayıcısı
                    echo '<div class="rps-post-header">';
                        echo '<h4><a href="' . get_permalink() . '">' . esc_html($title) . '</a></h4>';
                        echo '<div class="rps-post-views">';
                            echo '👁️ ' . intval($views);
                        echo '</div>';
                    echo '</div>'; // .rps-post-header
                echo '</div>'; // .rps-post-content
            echo '</div>'; // .rps-post
        }

        echo '</div>'; // .rps-posts-wrapper
        echo '</div>'; // .rps-related-posts
    } 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">
                <!-- Mevcut ve yeni ayarlar -->
                <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>
                <!-- Yeni eklenen ayarlar -->
                <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">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
}

// Admin menüye ayar sayfasını ekle
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');
?>
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

gün bazlı tüm değerler girilecek

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.0
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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 fonksiyonları
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);
    }
}
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');

// 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'] ?? '';
    $days_filter  = isset($settings['days_filter']) && $settings['days_filter'] !== '' ? intval($settings['days_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
    $date_query = array();
    if ($days_filter > 0) {
        // Kullanıcının girdiği gün filtresine göre tarih değeri hesaplanıyor
        $after_date = date('Y-m-d H:i:s', strtotime("-{$days_filter} days"));
        $date_query[] = array(
            'after'     => $after_date,
            'inclusive' => true,
        );
    } elseif (!empty($start_date) || !empty($end_date)) {
        $date_query[] = array(
            'after'     => $start_date,
            'before'    => $end_date,
            'inclusive' => true,
        );
    }

    // İ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>';
                        echo '<div class="rps-post-views">👁️ ' . 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ı
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ş Gün Filtresi (gün)</th>
                    <td><input type="number" name="rps_settings[days_filter]" value="<?php echo esc_attr($settings['days_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');
?>
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

saat bazlı bu fena değil

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.0
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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 fonksiyonları
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);
    }
}
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');

// 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: yalnızca dolu filtreler dikkate alınacak
    $date_query = array();
    if ($hours_filter > 0) {
        // Saat filtresi mevcutsa onu kullan; diğer tarih alanları dikkate alınmaz.
        $after_date = date('Y-m-d H:i:s', strtotime("-{$hours_filter} hours"));
        $date_query[] = array(
            'after'     => $after_date,
            'inclusive' => true,
        );
    } else {
        // Saat filtresi boşsa, başlangıç/bitiş tarih alanlarından dolu olanları ekle.
        $date_filter = array('inclusive' => true);
        if (!empty($start_date)) {
            $date_filter['after'] = $start_date;
        }
        if (!empty($end_date)) {
            $date_filter['before'] = $end_date;
        }
        // Eğer date_filter'da en az bir tarih değeri varsa, sorguya ekle.
        if (count($date_filter) > 1) {
            $date_query[] = $date_filter;
        }
    }

    // İ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>';
                        echo '<div class="rps-post-views">👁️ ' . 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ı
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>
            </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');
?>
muratca61
Site Admin
Mesajlar: 35899
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yeni haber gösterim eklentisi

Mesaj gönderen muratca61 »

bu gibi

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.0
 * Author: [Your Name]
 */

// CSS dosyasını kuyruğa alma
function rps_enqueue_assets() {
    wp_enqueue_style('rps-styles', plugins_url('css/rps-styles.css', __FILE__));
}
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 fonksiyonları
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);
    }
}
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');

// 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) {
        // Geçmiş saat filtresi kullanılıyorsa
        $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>';
                        echo '<div class="rps-post-views">👁️ ' . 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ı
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>
            </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');
?>
Cevapla