wordpress yazı engelleme eklentisi

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

wordpress yazı engelleme eklentisi

Mesaj gönderen muratca61 »

cpgt surduk

Kod:Tümünü seç

bir wordpress shortcode eklentisi yapalım. dosya yapısı plugins/engelle ve 
shortkodumuz [engelle] adı olsun. admin panelinde aktif pasif ayarı olsun. admin 
panelinde bu eklenti arayüzünde ekle butonu ile alt alta textbox ekleyebilsin. 
bu eklenen textboxlarda girilen tümceler bir bütün olarak içerdikleri karakter 
harf rakam ne var ise bütünüyle eşleşenleri yazının ana sayfa görünümünde göstermeyecek.
muratca61
Site Admin
Mesajlar: 35964
Kayıt: Cmt Ara 21, 2024 7:56 am

Re: wordpress yazı engelleme eklentisi

Mesaj gönderen muratca61 »

1m 8s hakkında Gerekçelendirilmiş engelleme kısa kodu tasarımı
Aşağıda, isteğinize uygun basit bir WordPress eklentisi örneği yer alıyor. Bu örnekte:

Eklenti dosya yapısı: wp-content/plugins/engelle/

Kod:Tümünü seç

engelle.php

Kod:Tümünü seç

[engelle]
shortcodu tanımlanıyor.
Yönetim panelinde “aktif/pasif” seçeneği ve dinamik olarak eklenebilen metin kutuları (her biri bir tümce) yer alıyor.
Ana sayfa görünümünde (is_home()) ve eklenti aktifse, admin panelinde eklenen tümcelerin içerik içinde tam eşleşmeleri siliniyor.
Aşağıdaki kodu dosyanıza kaydedip, eklentiyi aktif hale getirebilirsiniz:

Kod:Tümünü seç

<?php
/*
Plugin Name: Engelle Shortcode Eklentisi
Description: Yazıların ana sayfa görünümünde, admin panelinde eklenen tümcelerin tam eşleşmelerini kaldıran [engelle] shortcodunu ekler. 
Version: 1.0
Author: Your Name
*/

// Yönetici panelinde menü ekleme ve ayar sayfası oluşturma
if ( is_admin() ) {
    add_action('admin_menu', 'engelle_admin_menu');
    function engelle_admin_menu(){
        add_menu_page(
            'Engelle Ayarları',         // Sayfa başlığı
            'Engelle',                  // Menü başlığı
            'manage_options',           // Yetki
            'engelle-settings',         // Menü slug
            'engelle_settings_page',    // Callback fonksiyonu
            'dashicons-hidden'          // Menü ikonu (isteğe bağlı)
        );
    }

    // Ayar sayfası arayüzü
    function engelle_settings_page(){
        // Form gönderimi kontrolü ve verilerin kaydedilmesi
        if ( isset($_POST['engelle_form_submitted']) ) {
            if ( !empty($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'engelle_settings') ) {
                $active = isset($_POST['engelle_active']) ? 1 : 0;
                update_option('engelle_active', $active);
                
                // Girilen tümceleri alırken boş olanları filtreliyoruz.
                $phrases = isset($_POST['engelle_phrases']) ? array_filter(array_map('sanitize_text_field', $_POST['engelle_phrases'])) : array();
                update_option('engelle_phrases', $phrases);
                
                echo '<div class="updated"><p>Ayarlar güncellendi.</p></div>';
            }
        }

        // Önceden kaydedilmiş ayarları çekiyoruz.
        $active = get_option('engelle_active', 0);
        $phrases = get_option('engelle_phrases', array());
        ?>
        <div class="wrap">
            <h1>Engelle Ayarları</h1>
            <form method="post">
                <?php wp_nonce_field('engelle_settings'); ?>
                <table class="form-table">
                    <tr valign="top">
                        <th scope="row">Eklenti Durumu</th>
                        <td>
                            <label>
                                <input type="checkbox" name="engelle_active" value="1" <?php checked(1, $active); ?>>
                                Aktif
                            </label>
                        </td>
                    </tr>
                    <tr valign="top">
                        <th scope="row">Engellenecek Tümceler</th>
                        <td>
                            <div id="phrase_container">
                                <?php 
                                if(!empty($phrases)){
                                    foreach($phrases as $phrase){
                                        ?>
                                        <input type="text" name="engelle_phrases[]" value="<?php echo esc_attr($phrase); ?>" style="display:block; margin-bottom:5px; width:100%;">
                                        <?php
                                    }
                                }
                                ?>
                            </div>
                            <!-- Dinamik ekleme için gizli şablon -->
                            <input type="text" class="phrase_field_template" name="engelle_phrases[]" value="" style="display:none;">
                            <button id="add_phrase" class="button">Yeni Tümce Ekle</button>
                            <p class="description">Eklemek istediğiniz tümceleri yukarıdaki kutucuklara giriniz. Yazının ana sayfa görünümünde, tam eşleşen tümcelerin görüntüsü kaldırılacaktır.</p>
                        </td>
                    </tr>
                </table>
                <p class="submit">
                    <input type="hidden" name="engelle_form_submitted" value="1">
                    <input type="submit" class="button-primary" value="Ayarları Kaydet">
                </p>
            </form>
        </div>
        <script>
        (function($){
            $(document).ready(function(){
                $('#add_phrase').on('click', function(e){
                    e.preventDefault();
                    // Gizli şablonu kopyala ve görünür yap
                    var newField = $('.phrase_field_template').clone().removeClass('phrase_field_template').show();
                    $('#phrase_container').append(newField);
                });
            });
        })(jQuery);
        </script>
        <?php
    }
}

// Ana sayfa görünümünde içerikten engellenecek tümceleri kaldıran fonksiyon
function engelle_filter_content($content) {
    // Sadece ana sayfa görünümünde ve eklenti aktifse çalışır.
    if ( is_home() && get_option('engelle_active', 0) ) {
        $phrases = get_option('engelle_phrases', array());
        if ( !empty($phrases) ) {
            foreach ( $phrases as $phrase ) {
                $phrase = trim($phrase);
                if ( $phrase !== '' ) {
                    // Tam eşleşme sağlamak için str_replace kullanıyoruz.
                    $content = str_replace($phrase, '', $content);
                }
            }
        }
    }
    return $content;
}
add_filter('the_content', 'engelle_filter_content');

// [engelle] shortcodunu tanımlama
function engelle_shortcode($atts, $content = null) {
    // Eğer kısa kodun içeriği varsa, yukarıdaki filtreyle aynı işlemi uygularız.
    if ( is_home() && get_option('engelle_active', 0) ) {
        $phrases = get_option('engelle_phrases', array());
        if ( !empty($phrases) ) {
            foreach ( $phrases as $phrase ) {
                $phrase = trim($phrase);
                if ( $phrase !== '' ) {
                    $content = str_replace($phrase, '', $content);
                }
            }
        }
    }
    return $content;
}
add_shortcode('engelle', 'engelle_shortcode');













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

Re: wordpress yazı engelleme eklentisi

Mesaj gönderen muratca61 »

Kod:Tümünü seç

<?php
/*
Plugin Name: Engelle Shortcode Eklentisi
Description: Yazı içeriğinde, admin panelinde eklenen tümcelerin tam eşleşmelerini kaldıran [engelle] shortcodunu ekler.
Version: 1.1
Author: Your Name
*/

// Yönetici panelinde menü ekleme ve ayar sayfası oluşturma
if ( is_admin() ) {
    add_action('admin_menu', 'engelle_admin_menu');
    function engelle_admin_menu(){
        add_menu_page(
            'Engelle Ayarları',         // Sayfa başlığı
            'Engelle',                  // Menü başlığı
            'manage_options',           // Yetki
            'engelle-settings',         // Menü slug
            'engelle_settings_page',    // Callback fonksiyonu
            'dashicons-hidden'          // Menü ikonu (isteğe bağlı)
        );
    }

    // Ayar sayfası arayüzü
    function engelle_settings_page(){
        // Form gönderimi kontrolü ve verilerin kaydedilmesi
        if ( isset($_POST['engelle_form_submitted']) ) {
            if ( !empty($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'engelle_settings') ) {
                $active = isset($_POST['engelle_active']) ? 1 : 0;
                update_option('engelle_active', $active);
                
                // Girilen tümceleri alırken boş olanları filtreleyelim
                $phrases = isset($_POST['engelle_phrases']) ? array_filter(array_map('sanitize_text_field', $_POST['engelle_phrases'])) : array();
                update_option('engelle_phrases', $phrases);
                
                echo '<div class="updated"><p>Ayarlar güncellendi.</p></div>';
            }
        }

        // Önceden kaydedilmiş ayarları çekiyoruz
        $active = get_option('engelle_active', 0);
        $phrases = get_option('engelle_phrases', array());
        ?>
        <div class="wrap">
            <h1>Engelle Ayarları</h1>
            <form method="post">
                <?php wp_nonce_field('engelle_settings'); ?>
                <table class="form-table">
                    <tr valign="top">
                        <th scope="row">Eklenti Durumu</th>
                        <td>
                            <label>
                                <input type="checkbox" name="engelle_active" value="1" <?php checked(1, $active); ?>>
                                Aktif
                            </label>
                        </td>
                    </tr>
                    <tr valign="top">
                        <th scope="row">Engellenecek Tümceler</th>
                        <td>
                            <div id="phrase_container">
                                <?php 
                                if(!empty($phrases)){
                                    foreach($phrases as $phrase){
                                        ?>
                                        <input type="text" name="engelle_phrases[]" value="<?php echo esc_attr($phrase); ?>" style="display:block; margin-bottom:5px; width:100%;">
                                        <?php
                                    }
                                }
                                ?>
                            </div>
                            <!-- Dinamik ekleme için gizli şablon -->
                            <input type="text" class="phrase_field_template" name="engelle_phrases[]" value="" style="display:none;">
                            <button id="add_phrase" class="button">Yeni Tümce Ekle</button>
                            <p class="description">Eklemek istediğiniz tümceleri yukarıdaki kutucuklara giriniz. Yazı içeriğinde, tam eşleşen tümcelerin görüntüsü kaldırılacaktır.</p>
                        </td>
                    </tr>
                </table>
                <p class="submit">
                    <input type="hidden" name="engelle_form_submitted" value="1">
                    <input type="submit" class="button-primary" value="Ayarları Kaydet">
                </p>
            </form>
        </div>
        <script>
        (function($){
            $(document).ready(function(){
                $('#add_phrase').on('click', function(e){
                    e.preventDefault();
                    // Gizli şablonu kopyala ve görünür yap
                    var newField = $('.phrase_field_template').clone().removeClass('phrase_field_template').show();
                    $('#phrase_container').append(newField);
                });
            });
        })(jQuery);
        </script>
        <?php
    }
}

// Yazı/gönderi içeriğinde, ayarlardan kaydedilen tümceleri kaldıran fonksiyon
function engelle_filter_content($content) {
    if ( get_option('engelle_active', 0) ) {
        $phrases = get_option('engelle_phrases', array());
        if ( !empty($phrases) ) {
            foreach ( $phrases as $phrase ) {
                $phrase = trim($phrase);
                if ( $phrase !== '' ) {
                    // Tam eşleşme sağlamak için str_replace ile kaldırıyoruz
                    $content = str_replace($phrase, '', $content);
                }
            }
        }
    }
    return $content;
}
add_filter('the_content', 'engelle_filter_content');

// [engelle] shortcodunu tanımlama (shortcode içerisinde de aynı işlem uygulanır)
function engelle_shortcode($atts, $content = null) {
    if ( get_option('engelle_active', 0) ) {
        $phrases = get_option('engelle_phrases', array());
        if ( !empty($phrases) ) {
            foreach ( $phrases as $phrase ) {
                $phrase = trim($phrase);
                if ( $phrase !== '' ) {
                    $content = str_replace($phrase, '', $content);
                }
            }
        }
    }
    return $content;
}
add_shortcode('engelle', 'engelle_shortcode');
Cevapla