soru devam fonksiyon eklemeKod:Tümünü seç
evet güzel şimdi fonksiyon ekleyeceğiz. fonksiyon şu şekilde: kullanıcı bu butona tıkladığında bu yazının kendi içinde Kaynak yazısını bulacak. Bu yazının kendisi bir link içermekte. bu linkin içeriğinde ana <p></p> etiketleri içerisindeki yazıları çekerek mevcut yazıya ekleyecek. burada dikkat edilecek konu aynı cümleleri tekrar eklemeyecek. bunu sayfa yenileme i
wordpress devamını oku veri çekici
Re: wordpress devamını oku veri çekici
Re: wordpress devamını oku veri çekici
dosya klasör yapısıKod:Tümünü seç
wp-content/ └── plugins/ └── devamoku/ ├── devamoku.php ├── devamoku.js └── style.cssKod:Tümünü seç
devamoku.php-------------------------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderinin son kelimesine minimal "Devamını Oku" butonu ekler. Butona tıklandığında, yazı içindeki "Kaynak" linkinde bulunan sayfanın ana <p></p> etiketlerindeki metinleri, mevcut yazıya AJAX ile ekler (tekrarlayan cümleler eklenmez). Version: 1.1 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { // Shortcode kaydı add_shortcode( 'devaminioku', array( $this, 'shortcode_handler' ) ); // Admin menü ekle add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Ayarları kaydetmek için add_action( 'admin_init', array( $this, 'register_settings' ) ); // Stil ve script dosyalarını ekle add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } public function settings_page() { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields( 'devamoku_options_group' ); ?> <?php do_settings_sections( 'devamoku_options_group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected( $active, 'yes' ); ?>>Aktif</option> <option value="no" <?php selected( $active, 'no' ); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected( $visibility, 'everyone' ); ?>>Herkese</option> <option value="logged_in" <?php selected( $visibility, 'logged_in' ); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected( $visibility, 'admin' ); ?>>Sadece Admin</option> </select> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } // Stil ve JS dosyalarını ekliyoruz public function enqueue_assets() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); wp_enqueue_script( 'devamoku-js', plugin_dir_url( __FILE__ ) . 'devamoku.js', array( 'jquery' ), '1.0', true ); wp_localize_script( 'devamoku-js', 'devamoku_vars', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) ); } // [devaminioku] shortcode’u: Butonu, gönderi içeriğine inline ekliyoruz. public function shortcode_handler( $atts, $content = null ) { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; // Eklenti pasifse hiçbir şey döndürme if ( $active !== 'yes' ) { return ''; } // Görünürlük kontrolü: Eğer sadece admin ise ve admin değilse boş döndür if ( $visibility === 'admin' && ! current_user_can( 'administrator' ) ) { return ''; } // Görünürlük kontrolü: Eğer sadece giriş yapmış kullanıcı ise ve kullanıcı giriş yapmamışsa boş döndür if ( $visibility === 'logged_in' && ! is_user_logged_in() ) { return ''; } // Buton HTML'si (buton, gönderinin son kelimesine eklenmesi için inline kullanılabilir) $button = '<a href="#" class="devamoku-button">Devamını Oku</a>'; return $button; } } new DevamokuPlugin(); /* * AJAX isteği ile Kaynak linkinde bulunan sayfanın içeriğini çekip, * <p> etiketleri içerisindeki metinleri döndüren fonksiyon. */ function devamoku_fetch_ajax() { if ( ! isset( $_POST['source_url'] ) ) { wp_send_json_error('Kaynak URL eksik.'); } $source_url = esc_url_raw( $_POST['source_url'] ); $response = wp_remote_get( $source_url ); if ( is_wp_error( $response ) ) { wp_send_json_error('Kaynak içeriği alınırken hata oluştu.'); } $body = wp_remote_retrieve_body( $response ); if ( empty( $body ) ) { wp_send_json_error('Kaynak içeriği boş.'); } // HTML içeriğini DOMDocument ile parse ediyoruz libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML( mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8') ); libxml_clear_errors(); $paragraphs = $dom->getElementsByTagName('p'); $content = ''; foreach ( $paragraphs as $p ) { $text = trim( $p->textContent ); if ( ! empty( $text ) ) { $content .= '<p>' . $text . '</p>'; } } wp_send_json_success( $content ); } add_action( 'wp_ajax_devamoku_fetch', 'devamoku_fetch_ajax' ); add_action( 'wp_ajax_nopriv_devamoku_fetch', 'devamoku_fetch_ajax' );Kod:Tümünü seç
devamoku.js-------------------------------------------------------------------------------------------------------------------------------------------Kod:Tümünü seç
jQuery(document).ready(function($) { $('.devamoku-button').on('click', function(e) { e.preventDefault(); // Yazı içeriğinde "Kaynak" kelimesi içeren linki esnek bir şekilde bulmaya çalış var kaynakLink = $('.entry-content a').filter(function() { return $(this).text().toLowerCase().includes("kaynak"); }).first(); if (!kaynakLink.length) { alert('Kaynak linki bulunamadı!'); return; } var sourceUrl = kaynakLink.attr('href'); if (!sourceUrl) { alert('Kaynak linki geçersiz!'); return; } // Butonu devre dışı bırak var button = $(this); button.prop('disabled', true); $.ajax({ type: 'POST', url: devamoku_vars.ajax_url, data: { action: 'devamoku_fetch', source_url: sourceUrl }, success: function(response) { if (response.success) { var fetchedContent = response.data; var currentContent = $('.entry-content').text(); // Geçici bir DOM nesnesi oluştur ve <p> etiketlerini işle var tempDiv = $('<div>').html(fetchedContent); tempDiv.find('p').each(function() { var sentence = $(this).text().trim(); if (currentContent.indexOf(sentence) === -1) { $('.entry-content').append('<p>' + sentence + '</p>'); } }); } else { alert('Kaynak içeriği alınamadı: ' + response.data); } button.prop('disabled', false); }, error: function() { alert('Bir hata oluştu.'); button.prop('disabled', false); } }); }); });
isteğe bağlıKod:Tümünü seç
style.cssKod:Tümünü seç
.devamoku-button { font-size: 14px; color: #0073aa; text-decoration: none; border: 1px solid #0073aa; padding: 2px 5px; margin-left: 5px; } .devamoku-button:hover { background-color: #0073aa; color: #fff; }Açıklamalar
Butonun Çalışması:
[devaminioku] shortcode’u, gönderi içerisinde butonu yerleştirir.
Butona tıklandığında, JavaScript dosyası (.devamoku.js) yazı içeriğinde (örneğin .entry-content altında) “Kaynak” kelimesini içeren ilk linki arar.
Link bulunamazsa kullanıcıya uyarı verir.
AJAX İşlemi:
Bulunan linkin URL’si AJAX ile PHP tarafındaki <code>devamoku_fetch_ajax</code> fonksiyonuna gönderilir.
Bu fonksiyon, URL’den HTML içeriği çeker, DOMDocument kullanarak <code><p></code> etiketleri içerisindeki metinleri ayrıştırır ve döndürür.
Tekrar Eden Cümlelerin Filtrelenmesi:
AJAX’den gelen içerik, geçici bir DOM objesine aktarılır.
Her bir paragrafın metni, mevcut yazının (örneğin .entry-content içindeki) metniyle karşılaştırılır; eğer cümle mevcutsa eklenmez.
Sayfa Yenileme Olmadan İşlem:
Tüm işlem AJAX üzerinden yapılarak sayfa yenileme gerektirmeden içerik dinamik olarak eklenir.
Bu örneği ihtiyaçlarınıza göre genişletebilir, temanızın yapısına göre .entry-content seçicisini değiştirebilir veya ek güvenlik kontrolleri ekleyebilirsiniz.
Re: wordpress devamını oku veri çekici
dosya klasör yapısıKod:Tümünü seç
emi ajax ile değilde Devamını Oku butonuna tıkladığımızda sayfayı yenileme esnasında yapsın.Kod:Tümünü seç
wp-content/ └── plugins/ └── devamoku/ ├── devamoku.php └── style.cssKod:Tümünü seç
devamoku.phpKod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderinin sonuna minimal "Devamını Oku" butonu ekler. Butona tıklandığında sayfa yeniden yüklenir ve yazı içindeki kaynak linkinin içeriğindeki <p> etiketlerindeki metinler, mevcut yazıya eklenir (tekrar eden cümleler eklenmez). Version: 1.2 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { // Shortcode kaydı add_shortcode( 'devaminioku', array( $this, 'shortcode_handler' ) ); // Admin menü ekleme add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Ayarları kaydetmek için add_action( 'admin_init', array( $this, 'register_settings' ) ); // Stil dosyasını ekleme add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } public function settings_page() { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields( 'devamoku_options_group' ); ?> <?php do_settings_sections( 'devamoku_options_group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected( $active, 'yes' ); ?>>Aktif</option> <option value="no" <?php selected( $active, 'no' ); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected( $visibility, 'everyone' ); ?>>Herkese</option> <option value="logged_in" <?php selected( $visibility, 'logged_in' ); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected( $visibility, 'admin' ); ?>>Sadece Admin</option> </select> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } public function enqueue_assets() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); } // [devaminioku] shortcode’u: Butonun URL'sine mevcut URL’ye devamnoku_fetch parametresi eklenir. public function shortcode_handler( $atts, $content = null ) { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; // Eklenti pasif ise buton gösterilmez if ( $active !== 'yes' ) { return ''; } // Kullanıcı görünürlük kontrolleri if ( $visibility === 'admin' && ! current_user_can( 'administrator' ) ) { return ''; } if ( $visibility === 'logged_in' && ! is_user_logged_in() ) { return ''; } // Mevcut URL’ye devamnoku_fetch=1 parametresini ekleyip butonu oluşturuyoruz. $current_url = add_query_arg( 'devamoku_fetch', '1' ); return '<a href="'.esc_url($current_url).'" class="devamoku-button">Devamını Oku</a>'; } } new DevamokuPlugin(); /* * Sayfa yeniden yüklendiğinde GET parametresi varsa, * yazının içeriğine, kaynak linkindeki harici içeriği ekleyen fonksiyon. */ function devamoku_append_content( $content ) { if ( is_singular() && isset($_GET['devamoku_fetch']) && $_GET['devamoku_fetch'] == '1' ) { // Yazı içeriğindeki kaynak linkini arıyoruz (örnekte hurriyet.com.tr ile başlayan link) libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); libxml_clear_errors(); $sourceUrl = ''; $links = $dom->getElementsByTagName('a'); foreach ( $links as $link ) { $href = $link->getAttribute('href'); if ( strpos($href, 'https://www.hurriyet.com.tr/') === 0 ) { $sourceUrl = $href; break; } } if ( empty($sourceUrl) ) { return $content; } // Harici içeriği alıyoruz $response = wp_remote_get( $sourceUrl ); if ( is_wp_error($response) ) { return $content; } $body = wp_remote_retrieve_body( $response ); if ( empty($body) ) { return $content; } // Harici içeriği DOMDocument ile parse edip <p> etiketlerini çekiyoruz libxml_use_internal_errors(true); $dom2 = new DOMDocument(); $dom2->loadHTML(mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); $paragraphs = $dom2->getElementsByTagName('p'); $fetchedContent = ''; foreach ( $paragraphs as $p ) { $text = trim($p->textContent); if ( ! empty($text) ) { // Eğer cümle zaten mevcut içerikte yoksa ekle if ( strpos($content, $text) === false ) { $fetchedContent .= '<p>' . $text . '</p>'; } } } // Harici içeriği mevcut içeriğe ekliyoruz $content .= $fetchedContent; } return $content; } add_filter('the_content', 'devamoku_append_content');
Re: wordpress devamını oku veri çekici
devamoku.phpKod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderiye "Devamını Oku" butonu ekler. Butona tıklandığında sayfa yeniden yüklenir, gönderideki https://www.hurriyet.com.tr/ ile başlayan linkin içeriğindeki <p> etiketlerindeki metinler, mevcut içeriğe kalıcı olarak eklenir. Aynı cümleler veya admin tarafından belirlenen iptal satırları tekrar eklenmez. Version: 1.4 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { // Shortcode kaydı add_shortcode( 'devaminioku', array( $this, 'shortcode_handler' ) ); // Admin menü ekle add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Ayarları kaydetmek için add_action( 'admin_init', array( $this, 'register_settings' ) ); // Stil dosyasını ekle add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } public function settings_page() { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; $ignore_lines = isset( $settings['ignore_lines'] ) ? $settings['ignore_lines'] : ''; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields( 'devamoku_options_group' ); ?> <?php do_settings_sections( 'devamoku_options_group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected( $active, 'yes' ); ?>>Aktif</option> <option value="no" <?php selected( $active, 'no' ); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected( $visibility, 'everyone' ); ?>>Herkese</option> <option value="logged_in" <?php selected( $visibility, 'logged_in' ); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected( $visibility, 'admin' ); ?>>Sadece Admin</option> </select> </td> </tr> <tr valign="top"> <th scope="row">İptal Edilecek Satırlar</th> <td> <textarea name="<?php echo $this->option_name; ?>[ignore_lines]" rows="5" cols="50"><?php echo esc_textarea( $ignore_lines ); ?></textarea> <p class="description">Her satıra bir cümle gelecek şekilde yazın. Bu cümleler, harici içerik çekildikten sonra gönderiye eklenirken, eğer çekilen metinle tam olarak eşleşiyorsa eklenmeyecektir.</p> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } public function enqueue_assets() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); } // [devaminioku] shortcode’u: Mevcut URL’ye ?devamoku_fetch=1 ekleyerek buton oluşturur. public function shortcode_handler( $atts, $content = null ) { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; // Eklenti pasifse buton gösterilmez. if ( $active !== 'yes' ) { return ''; } // Görünürlük kontrolleri if ( $visibility === 'admin' && ! current_user_can( 'administrator' ) ) { return ''; } if ( $visibility === 'logged_in' && ! is_user_logged_in() ) { return ''; } // Mevcut URL’ye devamnoku_fetch=1 parametresi eklenmiş buton oluşturulur. $current_url = add_query_arg( 'devamoku_fetch', '1' ); return '<a href="' . esc_url( $current_url ) . '" class="devamoku-button">Devamını Oku</a>'; } } new DevamokuPlugin(); /* * Sayfa yenileme sırasında, GET parametresi varsa, * gönderideki kaynak linkinden çekilen içeriği kalıcı olarak ekler. * Bu işlem sırasında, admin tarafından belirlenen "iptal edilecek satırlar" de kontrol edilir. */ function devamoku_append_content( $content ) { if ( is_singular() && isset($_GET['devamoku_fetch']) && $_GET['devamoku_fetch'] == '1' ) { $post_id = get_the_ID(); $settings = get_option('devamoku_settings'); // Admin tarafından girilmiş iptal edilecek satırları alalım $ignore_lines = array(); if ( isset($settings['ignore_lines']) && !empty($settings['ignore_lines']) ) { $lines = explode("\n", $settings['ignore_lines']); foreach ( $lines as $line ) { $line = trim($line); if ( !empty($line) ) { $ignore_lines[] = $line; } } } // Mevcut gönderideki kaynak linkini arıyoruz (https://www.hurriyet.com.tr/ ile başlayan) libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); libxml_clear_errors(); $sourceUrl = ''; $links = $dom->getElementsByTagName('a'); foreach ( $links as $link ) { $href = $link->getAttribute('href'); if ( strpos($href, 'https://www.hurriyet.com.tr/') === 0 ) { $sourceUrl = $href; break; } } if ( empty($sourceUrl) ) { return $content; } // Harici içeriği çekiyoruz $response = wp_remote_get( $sourceUrl ); if ( is_wp_error($response) ) { return $content; } $body = wp_remote_retrieve_body( $response ); if ( empty($body) ) { return $content; } // Harici içeriği DOMDocument ile parse edip <p> etiketlerindeki metinleri çekiyoruz libxml_use_internal_errors(true); $dom2 = new DOMDocument(); $dom2->loadHTML(mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); $paragraphs = $dom2->getElementsByTagName('p'); $newContentToAppend = ''; foreach ( $paragraphs as $p ) { $text = trim($p->textContent); if ( ! empty($text) ) { // Hem mevcut içerikte yoksa hem de admin tarafından iptal edilecek satırlar arasında değilse ekle if ( strpos($content, $text) === false && !in_array($text, $ignore_lines) ) { $newContentToAppend .= '<p>' . $text . '</p>'; } } } // Eğer eklenmesi gereken yeni içerik varsa, gönderiyi güncelliyoruz if ( ! empty($newContentToAppend) ) { $updated_content = $content . $newContentToAppend; // Sonsuz döngüye girmemesi için filter'ı geçici olarak kaldırıyoruz remove_filter('the_content', 'devamoku_append_content'); wp_update_post( array( 'ID' => $post_id, 'post_content' => $updated_content ) ); add_filter('the_content', 'devamoku_append_content'); // URL'deki GET parametresini kaldırarak tekrar güncelleme yapılmasını engelliyoruz. $redirect_url = remove_query_arg('devamoku_fetch'); wp_redirect( $redirect_url ); exit; } } return $content; } add_filter('the_content', 'devamoku_append_content');
Re: wordpress devamını oku veri çekici
son iyi kodKod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderiye "Devamını Oku" butonu ekler. Butona tıklandığında sayfa yeniden yüklenir, gönderideki https://www.hurriyet.com.tr/ ile başlayan linkin içeriğindeki <p> etiketlerindeki metinler, mevcut içeriğe kalıcı olarak eklenir. Aynı cümleler veya admin tarafından belirlenen iptal satırları eklenmez; ayrıca, ignore listesinde yer alan ifadeler gönderi içeriğinden kaldırılır. Version: 1.5 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { // Shortcode kaydı add_shortcode( 'devaminioku', array( $this, 'shortcode_handler' ) ); // Admin menü ekle add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Ayarları kaydetmek için add_action( 'admin_init', array( $this, 'register_settings' ) ); // Stil dosyasını ekle add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } public function settings_page() { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; $ignore_lines = isset( $settings['ignore_lines'] ) ? $settings['ignore_lines'] : ''; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields( 'devamoku_options_group' ); ?> <?php do_settings_sections( 'devamoku_options_group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected( $active, 'yes' ); ?>>Aktif</option> <option value="no" <?php selected( $active, 'no' ); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected( $visibility, 'everyone' ); ?>>Herkese</option> <option value="logged_in" <?php selected( $visibility, 'logged_in' ); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected( $visibility, 'admin' ); ?>>Sadece Admin</option> </select> </td> </tr> <tr valign="top"> <th scope="row">İptal Edilecek Satırlar</th> <td> <textarea name="<?php echo $this->option_name; ?>[ignore_lines]" rows="5" cols="50"><?php echo esc_textarea( $ignore_lines ); ?></textarea> <p class="description">Her satıra bir cümle gelecek şekilde yazın. Bu cümleler, dışarıdan çekilen içerik eklenirken veya mevcut içerikten kaldırılır.</p> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } public function enqueue_assets() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); } // [devaminioku] shortcode’u: Mevcut URL’ye ?devamoku_fetch=1 ekleyerek buton oluşturur. public function shortcode_handler( $atts, $content = null ) { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; // Eklenti pasifse buton gösterilmez. if ( $active !== 'yes' ) { return ''; } // Görünürlük kontrolleri if ( $visibility === 'admin' && ! current_user_can( 'administrator' ) ) { return ''; } if ( $visibility === 'logged_in' && ! is_user_logged_in() ) { return ''; } // Mevcut URL’ye devamnoku_fetch=1 parametresi eklenmiş buton oluşturulur. $current_url = add_query_arg( 'devamoku_fetch', '1' ); return '<a href="' . esc_url( $current_url ) . '" class="devamoku-button">Devamını Oku</a>'; } } new DevamokuPlugin(); /* * Sayfa yenileme sırasında, GET parametresi varsa, * gönderideki kaynak linkinden çekilen içeriği kalıcı olarak ekler. * Bu esnada, admin tarafından belirlenen "İptal Edilecek Satırlar" içerikleri: * - Eklenmeden önce ignore listesinde varsa eklemiyoruz. * - Ve eğer içerikte zaten varsa, o metinleri kaldırıyoruz. */ function devamoku_append_content( $content ) { if ( is_singular() && isset($_GET['devamoku_fetch']) && $_GET['devamoku_fetch'] == '1' ) { $post_id = get_the_ID(); $settings = get_option('devamoku_settings'); // Admin tarafından girilmiş iptal edilecek satırları alalım $ignore_lines = array(); if ( isset($settings['ignore_lines']) && !empty($settings['ignore_lines']) ) { $lines = explode("\n", $settings['ignore_lines']); foreach ( $lines as $line ) { $line = trim($line); if ( !empty($line) ) { $ignore_lines[] = $line; } } } // Mevcut gönderideki kaynak linkini arıyoruz (https://www.hurriyet.com.tr/ ile başlayan) libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); libxml_clear_errors(); $sourceUrl = ''; $links = $dom->getElementsByTagName('a'); foreach ( $links as $link ) { $href = $link->getAttribute('href'); if ( strpos($href, 'https://www.hurriyet.com.tr/') === 0 ) { $sourceUrl = $href; break; } } if ( empty($sourceUrl) ) { // Eğer ignore satırları varsa, mevcut içerikten de temizleyelim if ( !empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $content = str_replace($line, '', $content); } } return $content; } // Harici içeriği çekiyoruz $response = wp_remote_get( $sourceUrl ); if ( is_wp_error($response) ) { return $content; } $body = wp_remote_retrieve_body( $response ); if ( empty($body) ) { return $content; } // Harici içeriği DOMDocument ile parse edip <p> etiketlerindeki metinleri çekiyoruz libxml_use_internal_errors(true); $dom2 = new DOMDocument(); $dom2->loadHTML(mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); $paragraphs = $dom2->getElementsByTagName('p'); $newContentToAppend = ''; foreach ( $paragraphs as $p ) { $text = trim($p->textContent); // Shortcode'ları kaldırıyoruz $text = strip_shortcodes($text); if ( ! empty($text) ) { // Eğer ignore listesinde varsa, eklemiyoruz if ( in_array($text, $ignore_lines) ) { continue; } // Eğer mevcut içerikte bu cümle yoksa ekle if ( strpos($content, $text) === false ) { $newContentToAppend .= '<p>' . $text . '</p>'; } } } // Eğer eklenmesi gereken yeni içerik varsa, gönderiyi güncelliyoruz if ( ! empty($newContentToAppend) ) { $updated_content = $content . $newContentToAppend; // Mevcut içerikten ignore listesi ifadelerini tamamen kaldırıyoruz if ( ! empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $updated_content = str_replace($line, '', $updated_content); } } // Sonsuz döngüye girmemesi için filter'ı geçici olarak kaldırıyoruz remove_filter('the_content', 'devamoku_append_content'); wp_update_post( array( 'ID' => $post_id, 'post_content' => $updated_content ) ); add_filter('the_content', 'devamoku_append_content'); // URL'deki GET parametresini kaldırarak tekrar güncelleme yapılmasını engelliyoruz. $redirect_url = remove_query_arg('devamoku_fetch'); wp_redirect( $redirect_url ); exit; } else { // Eğer yeni içerik eklenmemişse, yine mevcut içerikten ignore satırlarını kaldıralım if ( ! empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $content = str_replace($line, '', $content); } } } } return $content; } add_filter('the_content', 'devamoku_append_content');
Re: wordpress devamını oku veri çekici
SON EN İYİ KOD
Kod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderiye "Devamını Oku" butonu ekler. Butona tıklandığında sayfa yeniden yüklenir, gönderideki herhangi bir linkten çekilen içeriğin <p> etiketlerindeki metinler, mevcut içeriğe kalıcı olarak eklenir. Aynı cümleler veya admin tarafından belirlenen iptal satırları eklenmez; ayrıca, ignore listesinde yer alan ifadeler gönderi içeriğinden kaldırılır. Version: 1.5 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if ( ! defined( 'ABSPATH' ) ) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { // Shortcode kaydı add_shortcode( 'devaminioku', array( $this, 'shortcode_handler' ) ); // Admin menü ekle add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); // Ayarları kaydetmek için add_action( 'admin_init', array( $this, 'register_settings' ) ); // Stil dosyasını ekle add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } public function settings_page() { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; $ignore_lines = isset( $settings['ignore_lines'] ) ? $settings['ignore_lines'] : ''; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields( 'devamoku_options_group' ); ?> <?php do_settings_sections( 'devamoku_options_group' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected( $active, 'yes' ); ?>>Aktif</option> <option value="no" <?php selected( $active, 'no' ); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected( $visibility, 'everyone' ); ?>>Herkese</option> <option value="logged_in" <?php selected( $visibility, 'logged_in' ); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected( $visibility, 'admin' ); ?>>Sadece Admin</option> </select> </td> </tr> <tr valign="top"> <th scope="row">İptal Edilecek Satırlar</th> <td> <textarea name="<?php echo $this->option_name; ?>[ignore_lines]" rows="5" cols="50"><?php echo esc_textarea( $ignore_lines ); ?></textarea> <p class="description">Her satıra bir cümle gelecek şekilde yazın. Bu cümleler, dışarıdan çekilen içerik eklenirken veya mevcut içerikten kaldırılır.</p> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } public function enqueue_assets() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); } // [devaminioku] shortcode’u: Mevcut URL’ye ?devamoku_fetch=1 ekleyerek buton oluşturur. public function shortcode_handler( $atts, $content = null ) { $settings = get_option( $this->option_name ); $active = isset( $settings['active'] ) ? $settings['active'] : 'yes'; $visibility = isset( $settings['visibility'] ) ? $settings['visibility'] : 'everyone'; // Eklenti pasifse buton gösterilmez. if ( $active !== 'yes' ) { return ''; } // Görünürlük kontrolleri if ( $visibility === 'admin' && ! current_user_can( 'administrator' ) ) { return ''; } if ( $visibility === 'logged_in' && ! is_user_logged_in() ) { return ''; } // Mevcut URL’ye devamoku_fetch=1 parametresi eklenmiş buton oluşturulur. $current_url = add_query_arg( 'devamoku_fetch', '1' ); return '<a href="' . esc_url( $current_url ) . '" class="devamoku-button">Devamını Oku</a>'; } } new DevamokuPlugin(); /* * Sayfa yenileme sırasında, GET parametresi varsa, * gönderideki kaynak linkinden çekilen içeriği kalıcı olarak ekler. * Bu esnada, admin tarafından belirlenen "İptal Edilecek Satırlar" içerikleri: * - Eklenmeden önce ignore listesinde varsa eklemiyoruz. * - Ve eğer içerikte zaten varsa, o metinleri kaldırıyoruz. */ function devamoku_append_content( $content ) { if ( is_singular() && isset($_GET['devamoku_fetch']) && $_GET['devamoku_fetch'] == '1' ) { $post_id = get_the_ID(); $settings = get_option('devamoku_settings'); // Admin tarafından girilmiş iptal edilecek satırları alalım $ignore_lines = array(); if ( isset($settings['ignore_lines']) && !empty($settings['ignore_lines']) ) { $lines = explode("\n", $settings['ignore_lines']); foreach ( $lines as $line ) { $line = trim($line); if ( !empty($line) ) { $ignore_lines[] = $line; } } } // Mevcut gönderideki kaynak linkini arıyoruz (HTTP ile başlayan herhangi bir link) libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); libxml_clear_errors(); $sourceUrl = ''; $links = $dom->getElementsByTagName('a'); foreach ( $links as $link ) { $href = $link->getAttribute('href'); if ( strpos($href, 'http') === 0 ) { // Artık herhangi bir "http" ile başlayan link seçiliyor $sourceUrl = $href; break; } } if ( empty($sourceUrl) ) { // Eğer ignore satırları varsa, mevcut içerikten de temizleyelim if ( !empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $content = str_replace($line, '', $content); } } return $content; } // Harici içeriği çekiyoruz $response = wp_remote_get( $sourceUrl ); if ( is_wp_error($response) ) { return $content; } $body = wp_remote_retrieve_body( $response ); if ( empty($body) ) { return $content; } // Harici içeriği DOMDocument ile parse edip <p> etiketlerindeki metinleri çekiyoruz libxml_use_internal_errors(true); $dom2 = new DOMDocument(); $dom2->loadHTML(mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); $paragraphs = $dom2->getElementsByTagName('p'); $newContentToAppend = ''; foreach ( $paragraphs as $p ) { $text = trim($p->textContent); // Shortcode'ları kaldırıyoruz $text = strip_shortcodes($text); if ( ! empty($text) ) { // Eğer ignore listesinde varsa, eklemiyoruz if ( in_array($text, $ignore_lines) ) { continue; } // Eğer mevcut içerikte bu cümle yoksa ekle if ( strpos($content, $text) === false ) { $newContentToAppend .= '<p>' . $text . '</p>'; } } } // Eğer eklenmesi gereken yeni içerik varsa, gönderiyi güncelliyoruz if ( ! empty($newContentToAppend) ) { $updated_content = $content . $newContentToAppend; // Mevcut içerikten ignore listesi ifadelerini tamamen kaldırıyoruz if ( ! empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $updated_content = str_replace($line, '', $updated_content); } } // Sonsuz döngüye girmemesi için filter'ı geçici olarak kaldırıyoruz remove_filter('the_content', 'devamoku_append_content'); wp_update_post( array( 'ID' => $post_id, 'post_content' => $updated_content ) ); add_filter('the_content', 'devamoku_append_content'); // URL'deki GET parametresini kaldırarak tekrar güncelleme yapılmasını engelliyoruz. $redirect_url = remove_query_arg('devamoku_fetch'); wp_redirect( $redirect_url ); exit; } else { // Eğer yeni içerik eklenmemişse, yine mevcut içerikten ignore satırlarını kaldıralım if ( ! empty($ignore_lines) ) { foreach ( $ignore_lines as $line ) { $content = str_replace($line, '', $content); } } } } return $content; } add_filter('the_content', 'devamoku_append_content');
Re: wordpress devamını oku veri çekici
deepseek son mükerrer kayıt içeriği düzenlemeKod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Plugin URI: http://ornek.com Description: [devaminioku] shortcode’u ile gönderiye "Devamını Oku" butonu ekler. Butona tıklandığında sayfa yeniden yüklenir, gönderideki herhangi bir linkten çekilen içeriğin <p> etiketlerindeki metinler, mevcut içeriğe kalıcı olarak eklenir. Aynı cümleler veya admin tarafından belirlenen iptal satırları eklenmez; ayrıca, ignore listesinde yer alan ifadeler gönderi içeriğinden kaldırılır. Version: 1.6 Author: Adınız Author URI: http://ornek.com License: GPL2 */ if (!defined('ABSPATH')) { exit; } class DevamokuPlugin { private $option_name = 'devamoku_settings'; public function __construct() { add_shortcode('devaminioku', array($this, 'shortcode_handler')); add_action('admin_menu', array($this, 'add_admin_menu')); add_action('admin_init', array($this, 'register_settings')); add_action('wp_enqueue_scripts', array($this, 'enqueue_assets')); } public function register_settings() { register_setting('devamoku_options_group', $this->option_name); } public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array($this, 'settings_page') ); } public function settings_page() { $settings = get_option($this->option_name); $active = isset($settings['active']) ? $settings['active'] : 'yes'; $visibility = isset($settings['visibility']) ? $settings['visibility'] : 'everyone'; $ignore_lines = isset($settings['ignore_lines']) ? $settings['ignore_lines'] : ''; ?> <div class="wrap"> <h1>Devamını Oku Ayarları</h1> <form method="post" action="options.php"> <?php settings_fields('devamoku_options_group'); ?> <?php do_settings_sections('devamoku_options_group'); ?> <table class="form-table"> <tr valign="top"> <th scope="row">Eklenti Durumu</th> <td> <select name="<?php echo $this->option_name; ?>[active]"> <option value="yes" <?php selected($active, 'yes'); ?>>Aktif</option> <option value="no" <?php selected($active, 'no'); ?>>Pasif</option> </select> </td> </tr> <tr valign="top"> <th scope="row">Buton Görünürlüğü</th> <td> <select name="<?php echo $this->option_name; ?>[visibility]"> <option value="everyone" <?php selected($visibility, 'everyone'); ?>>Herkese</option> <option value="logged_in" <?php selected($visibility, 'logged_in'); ?>>Giriş Yapmış Kullanıcılar</option> <option value="admin" <?php selected($visibility, 'admin'); ?>>Sadece Admin</option> </select> </td> </tr> <tr valign="top"> <th scope="row">İptal Edilecek Satırlar</th> <td> <textarea name="<?php echo $this->option_name; ?>[ignore_lines]" rows="5" cols="50"><?php echo esc_textarea($ignore_lines); ?></textarea> <p class="description">Her satıra bir cümle gelecek şekilde yazın. Bu cümleler, dışarıdan çekilen içerik eklenirken veya mevcut içerikten kaldırılır.</p> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } public function enqueue_assets() { wp_enqueue_style('devamoku-style', plugin_dir_url(__FILE__) . 'style.css'); } public function shortcode_handler($atts, $content = null) { $settings = get_option($this->option_name); $active = isset($settings['active']) ? $settings['active'] : 'yes'; $visibility = isset($settings['visibility']) ? $settings['visibility'] : 'everyone'; if ($active !== 'yes') return ''; if ($visibility === 'admin' && !current_user_can('administrator')) return ''; if ($visibility === 'logged_in' && !is_user_logged_in()) return ''; $current_url = add_query_arg('devamoku_fetch', '1'); return '<a href="' . esc_url($current_url) . '" class="devamoku-button">Devamını Oku</a>'; } } new DevamokuPlugin(); function normalize_text($text) { $text = mb_strtolower(trim($text), 'UTF-8'); $text = preg_replace('/[^\p{L}\p{N}\s]/u', '', $text); $text = preg_replace('/\s+/', ' ', $text); return $text; } function split_sentences($text) { $sentences = preg_split('/(?<=[.!?])\s+/', $text, -1, PREG_SPLIT_NO_EMPTY); return array_map('trim', $sentences); } function devamoku_append_content($content) { if (is_singular() && isset($_GET['devamoku_fetch']) && $_GET['devamoku_fetch'] == '1') { $post_id = get_the_ID(); $settings = get_option('devamoku_settings'); $ignore_lines = array(); if (isset($settings['ignore_lines']) && !empty($settings['ignore_lines'])) { $lines = explode("\n", $settings['ignore_lines']); foreach ($lines as $line) { $line = trim($line); if (!empty($line)) $ignore_lines[] = $line; } } libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML('<?xml encoding="utf-8" ?>' . $content); libxml_clear_errors(); $sourceUrl = ''; $links = $dom->getElementsByTagName('a'); foreach ($links as $link) { $href = $link->getAttribute('href'); if (strpos($href, 'http') === 0) { $sourceUrl = $href; break; } } if (empty($sourceUrl)) { if (!empty($ignore_lines)) { foreach ($ignore_lines as $line) { $content = str_replace($line, '', $content); } } return $content; } // Mevcut içerik analizi $existing_paragraphs = $dom->getElementsByTagName('p'); $existing_paragraph_texts = array(); $existing_sentences = array(); foreach ($existing_paragraphs as $p) { $p_text = trim(strip_shortcodes($p->textContent)); $p_text_normalized = normalize_text($p_text); $existing_paragraph_texts[] = $p_text_normalized; $sentences = split_sentences($p_text); foreach ($sentences as $sentence) { $sentence_normalized = normalize_text(trim($sentence)); if (!in_array($sentence_normalized, $existing_sentences)) { $existing_sentences[] = $sentence_normalized; } } } // Harici içerik çekme $response = wp_remote_get($sourceUrl); if (is_wp_error($response)) return $content; $body = wp_remote_retrieve_body($response); if (empty($body)) return $content; libxml_use_internal_errors(true); $dom2 = new DOMDocument(); $dom2->loadHTML(mb_convert_encoding($body, 'HTML-ENTITIES', 'UTF-8')); libxml_clear_errors(); $paragraphs = $dom2->getElementsByTagName('p'); $newContentToAppend = ''; foreach ($paragraphs as $p) { $text = trim(strip_shortcodes($p->textContent)); if (empty($text)) continue; if (in_array($text, $ignore_lines)) continue; $text_normalized = normalize_text($text); if (in_array($text_normalized, $existing_paragraph_texts)) continue; $sentences = split_sentences($text); $has_duplicate = false; foreach ($sentences as $sentence) { $sentence_normalized = normalize_text(trim($sentence)); if (in_array($sentence_normalized, $existing_sentences)) { $has_duplicate = true; break; } } if (!$has_duplicate) { $newContentToAppend .= '<p>' . $text . '</p>'; $existing_paragraph_texts[] = $text_normalized; foreach ($sentences as $sentence) { $sentence_normalized = normalize_text(trim($sentence)); if (!in_array($sentence_normalized, $existing_sentences)) { $existing_sentences[] = $sentence_normalized; } } } } if (!empty($newContentToAppend)) { $updated_content = $content . $newContentToAppend; if (!empty($ignore_lines)) { foreach ($ignore_lines as $line) { $updated_content = str_replace($line, '', $updated_content); } } remove_filter('the_content', 'devamoku_append_content'); wp_update_post(array( 'ID' => $post_id, 'post_content' => $updated_content )); add_filter('the_content', 'devamoku_append_content'); $redirect_url = remove_query_arg('devamoku_fetch'); wp_redirect($redirect_url); exit; } else { if (!empty($ignore_lines)) { foreach ($ignore_lines as $line) { $content = str_replace($line, '', $content); } } } } return $content; } add_filter('the_content', 'devamoku_append_content');