plugin altında yeni bir klasör içinde bir wordpress uygulaması yapalım.
1-bu uygulama yazının içeriğine eklenenkodunu kullanıcıya Devamını Oku linki olarak gösterecek.Kod:Tümünü seç
[devamini_oku]
2-Okuyucu linke tıklayınca sayfa yenilenirken yazının içeriğinde gömülü olan bir web adresini tarayıp bulacak.
3-bu linki /var/www/html/wp/wp-content/plugins/icerik-cekici konumundaki icerik-cekici.php ile yazının içeriğini çekerek yazıya ekleyecek.
4-yazıda mevcut olan aynı yazıları eklemeyecek. sadece yazıları ekleyecek.
5- işlem tamamlandığında [devamini_oku] kodunu silecek.
6-bunlar Devamını Oku linkine tıklanıp sayfa yenilenirken gerçekleşecek.
7-sadece aynı olamayan yazıları çekecek resimler görseller çekilmeyecek
icerik-cekici.php kodu aşağıda verilendir.Kod:Tümünü seç
<?php /* Plugin Name: İçerik Çekici Description: URL'den içerik çeker, otomatik başlık/etiket oluşturur, görsel işler. Version: 7.0 Author: Sizin Adınız */ if (!defined('ABSPATH')) exit; // Gerekli dosyaları yükle require_once plugin_dir_path(__FILE__) . 'includes/class-baslik-olusturucu.php'; require_once plugin_dir_path(__FILE__) . 'includes/class-etiket-olusturucu.php'; require_once plugin_dir_path(__FILE__) . 'includes/functions.php'; // Admin menüsü ekle add_action('admin_menu', 'icerik_cekici_menu'); function icerik_cekici_menu() { add_menu_page( 'İçerik Çekici', 'İçerik Çek', 'manage_options', 'icerik-cekici', 'icerik_cekici_admin_page', 'dashicons-download' ); } // Admin arayüzü function icerik_cekici_admin_page() { ?> <div class="wrap"> <h1>İçerik Çekici 🚀</h1> <form method="post"> <input type="url" name="hedef_url" placeholder="https://ornek.com" style="width: 400px; padding: 8px;" required> <?php wp_nonce_field('icerik_cekici_action', 'icerik_cekici_nonce'); ?> <input type="submit" name="cek" class="button button-primary" value="İçeriği Çek" style="margin-top: 10px;"> </form> <?php icerik_cekici_sonuc_goster(); ?> </div> <?php } // İşlem sonuçlarını göster function icerik_cekici_sonuc_goster() { if (!isset($_POST['cek'])) return; try { // Güvenlik kontrolü if (!wp_verify_nonce($_POST['icerik_cekici_nonce'], 'icerik_cekici_action')) { throw new Exception('Güvenlik ihlali tespit edildi!'); } $url = esc_url_raw($_POST['hedef_url']); // İçeriği çek ve işle $icerik = icerik_cekici_icerik_al($url); // Başlık oluştur $baslik_olusturucu = new BaslikOlusturucu($url); // Yazıyı oluştur $post_id = wp_insert_post([ 'post_title' => sanitize_text_field($baslik_olusturucu->baslik), 'post_content' => wp_kses_post($icerik->metin), 'post_status' => 'draft', 'post_author' => get_current_user_id(), ]); // Etiketleri ekle $etiket_olusturucu = new EtiketOlusturucu($icerik->metin); $etiketler = $etiket_olusturucu->etiketleri_olustur(); if (!empty($etiketler)) { wp_set_post_tags($post_id, $etiketler); } // Öne çıkan görsel if ($icerik->gorsel_id) { set_post_thumbnail($post_id, $icerik->gorsel_id); } // Başarı mesajı echo sprintf( '<div class="notice notice-success"><p>✅ İçerik oluşturuldu! <a href="%s">Düzenle</a></p></div>', esc_url(get_edit_post_link($post_id)) ); } catch (Exception $e) { echo sprintf( '<div class="notice notice-error"><p>⛔ Hata: %s</p></div>', esc_html($e->getMessage()) ); } }
wordpress devamını oku veri çekici
wordpress devamını oku veri çekici
Re: wordpress devamını oku veri çekici
1. Klasör ve Dosya Yapısını Oluşturma
Yeni Klasör: wp-content/plugins altında örneğinadında bir klasör oluşturun.Kod:Tümünü seç
icerik-devam
Ana Dosya: Klasör içindeadında bir ana dosya oluşturun. Bu dosyada eklenti başlığı ve temel tanımlamalar yer alacak.Kod:Tümünü seç
icerik-devam.php
Bağımlılık: Eğer mevcut icerik-cekici.php dosyasındaki işlevleri kullanacaksanız, bu dosyayı (ya da gerekli fonksiyonları) ana dosyaya require_once ile dahil edin.
2. [devamini_oku] Shortcode’unun Oluşturulması
İçeriğe eklenecekkodunun yerine, kullanıcıya “Devamını Oku” bağlantısı gösterecek bir shortcode tanımlayacağız. Örneğin:Kod:Tümünü seç
[devamini_oku]Kod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğinde yer alan [devamini_oku] kodunu "Devamını Oku" linkine çevirir ve tıklanıldığında içerikten gömülü URL'yi bulup, içerik çekici fonksiyonu ile yeni içerik ekler. Version: 1.0 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; // Aşağıdaki fonksiyonlar, icerik-cekici işlevlerinin tek dosya içerisinde çalışması için eklenmiştir. // Eğer daha önce tanımlanmışlarsa, tekrar tanımlamamak için if (!function_exists()) kullanıyoruz. if ( ! function_exists('icerik_cekici_html_al') ) { // HTML çekme fonksiyonu function icerik_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept-Language' => 'tr-TR,tr;q=0.9' ], 'timeout' => 45, 'sslverify' => false ]); if(is_wp_error($response)) { error_log("[HTML Cekme Hatasi] " . $response->get_error_message()); return false; } return wp_remote_retrieve_body($response); } } if ( ! function_exists('icerik_cekici_icerik_al') ) { // İçerik çekme ve işleme fonksiyonu function icerik_cekici_icerik_al($url) { $html = icerik_cekici_html_al($url); if(!$html) return (object)['metin' => '', 'gorsel_id' => null]; $dom = new DOMDocument(); libxml_use_internal_errors(true); $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); $icerik = (object)['metin' => '', 'gorsel_id' => null]; $xpath = new DOMXPath($dom); // 1. Tüm bağlantıları kaldır $links = $xpath->query('//a'); foreach($links as $link) { $fragment = $dom->createDocumentFragment(); while($link->childNodes->length > 0) { $fragment->appendChild($link->childNodes->item(0)); } $link->parentNode->replaceChild($fragment, $link); } // 2. Ana içeriği işle (paragraflar ve resimler) $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)] | //img[not(ancestor::header|aside|footer)]'); foreach($nodes as $node) { if($node->tagName === 'p') { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if(!empty($text)) { $icerik->metin .= '<p>' . $text . '</p>'; } } elseif($node->tagName === 'img') { $src = $node->getAttribute('src'); if(empty($src)) continue; $image_url = icerik_normalize_url($src, $url); $upload_id = icerik_cekici_gorsel_yukle($image_url); if($upload_id) { $node->setAttribute('src', wp_get_attachment_url($upload_id)); $node->removeAttribute('srcset'); $node->removeAttribute('data-src'); if(!$icerik->gorsel_id) $icerik->gorsel_id = $upload_id; } $icerik->metin .= $dom->saveHTML($node); } } // 3. Son işlemler: HTML güvenliği ve boş paragrafların temizlenmesi $icerik->metin = wp_kses_post($icerik->metin); $icerik->metin = force_balance_tags($icerik->metin); $icerik->metin = preg_replace('/<p[^>]*>\s*<\/p>/', '', $icerik->metin); return $icerik; } } if ( ! function_exists('icerik_cekici_gorsel_yukle') ) { // Görsel yükleme fonksiyonu function icerik_cekici_gorsel_yukle($image_url) { $parsed_url = parse_url($image_url); if(!$parsed_url || !isset($parsed_url['host'])) { error_log("[Gecersiz URL] " . $image_url); return false; } // URL oluşturma $image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . ($parsed_url['path'] ?? ''); if(isset($parsed_url['query'])) { $image_url .= '?' . $parsed_url['query']; } // Uzantı kontrolü $ext = strtolower(pathinfo($parsed_url['path'] ?? '', PATHINFO_EXTENSION)); if(!in_array($ext, ['jpg','jpeg','png','gif','webp'])) { error_log("[Gecersiz Uzanti] " . $ext); return false; } // İndirme işlemi $tmp_file = download_url($image_url); if(is_wp_error($tmp_file)) { error_log("[Indirme Hatasi] " . $tmp_file->get_error_message()); return false; } // Yükleme işlemi $file_array = [ 'name' => sanitize_file_name(basename($parsed_url['path'] ?? '')) ?: uniqid('img_').".$ext", 'tmp_name' => $tmp_file ]; $upload_id = media_handle_sideload($file_array, 0); @unlink($tmp_file); if(is_wp_error($upload_id)) { error_log("[Yukleme Hatasi] " . $upload_id->get_error_message()); return false; } return $upload_id; } } if ( ! function_exists('icerik_normalize_url') ) { // URL normalizasyon fonksiyonu function icerik_normalize_url($image_url, $base_url) { if(strpos($image_url, 'http') === 0) return $image_url; $parsed_base = parse_url($base_url); $base = $parsed_base['scheme'] . '://' . $parsed_base['host']; $base_path = isset($parsed_base['path']) ? rtrim($parsed_base['path'], '/') : ''; $image_path = ltrim($image_url, '/'); if($base_path && strpos($image_path, $base_path) === 0) { return $base . '/' . $image_path; } return $base . ($base_path ? "$base_path/" : '/') . $image_path; } } /** * [devamini_oku] Shortcode İşleyicisi * * Yazı içeriğinde gömülü URL'yi bulur ve içerik çekici fonksiyonuyla içeriği getirir. * Eğer ?devamini_oku=1 parametresi yoksa, kullanıcıya "Devamını Oku" linki sunar. */ function devamini_oku_shortcode_handler( $atts, $content = null ) { if ( isset( $_GET['devamini_oku'] ) && $_GET['devamini_oku'] == '1' ) { global $post; $post_content = $post->post_content; if ( preg_match( '/(https?:\/\/[^\s"]+)/i', $post_content, $matches ) ) { $url = $matches[1]; $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { // Çekilen içerikten <img> etiketlerini kaldırıyoruz $new_content = preg_replace( '/<img[^>]+\>/i', '', $fetched_content->metin ); remove_shortcode( 'devamini_oku' ); return $new_content; } } return ''; } $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">Devamını Oku</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );
Re: wordpress devamını oku veri çekici
aşağıdaki kodla
plugin altında yeni bir klasör içinde bir wordpress uygulaması yapalım.
1-bu uygulama yazının içeriğine eklenen [devamini_oku]
kodunu kullanıcıya Devamını Oku linki olarak gösterecek.
2-Okuyucu linke tıklayınca sayfa yenilenirken yazının içeriğinde gömülü olan bir web adresini tarayıp bulacak. (bu link Hürriyet ve Kaynak yazılarına gömülü)
3-bu linki yazının içeriğini çekerek yazıya ekleyecek. sadece bu linkteki yazıyı çekecek
4-yazıda mevcut olan aynı yazıları eklemeyecek. sadece yazıları ekleyecek.
5- işlem tamamlandığında [devamini_oku] kodunu silecek.
6-bunlar Devamını Oku linkine tıklanıp sayfa yenilenirken gerçekleşecek.
7-sadece aynı olamayan yazıları çekecek resimler görseller çekilmeyecek . bu işlemi gerçekleştirmeyen kod aşağıda kontrol eder misin ve düzeltilirse kodun tamamını verir misin
Kod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku - Debug Versiyonu Description: Yazı içeriğinde yer alan [devamini_oku] kodunu "Devamını Oku" linkine çevirir. Linke tıklandığında, yazı içindeki gömülü URL tespit edilir, içerik çekilir ve ekrana getirilir. (Debug mesajları ekrandadır) Version: 1.0 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; // WP_DEBUG ayarlarının aktif olduğundan emin olun (bu test sırasında faydalıdır) if ( ! defined('WP_DEBUG') ) { define('WP_DEBUG', true); } if ( ! defined('WP_DEBUG_LOG') ) { define('WP_DEBUG_LOG', true); } // ----------------------------------------------------- // İçerik Çekici Fonksiyonlar // ----------------------------------------------------- if ( ! function_exists('icerik_cekici_html_al') ) { function icerik_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept-Language' => 'tr-TR,tr;q=0.9' ], 'timeout' => 45, 'sslverify' => false ]); if ( is_wp_error($response) ) { error_log("[HTML Çekme Hatası] " . $response->get_error_message()); return false; } return wp_remote_retrieve_body($response); } } if ( ! function_exists('icerik_cekici_icerik_al') ) { function icerik_cekici_icerik_al($url) { $html = icerik_cekici_html_al($url); if ( ! $html ) { return (object)[ 'metin' => '', 'gorsel_id' => null ]; } $dom = new DOMDocument(); libxml_use_internal_errors(true); $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); $icerik = (object)[ 'metin' => '', 'gorsel_id' => null ]; $xpath = new DOMXPath($dom); // Tüm <a> etiketlerini kaldırıyoruz $links = $xpath->query('//a'); foreach ( $links as $link ) { $fragment = $dom->createDocumentFragment(); while ( $link->childNodes->length > 0 ) { $fragment->appendChild( $link->childNodes->item(0) ); } $link->parentNode->replaceChild( $fragment, $link ); } // Ana içeriği işle: <p> ve <img> etiketleri $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)] | //img[not(ancestor::header|aside|footer)]'); foreach ( $nodes as $node ) { if ( $node->tagName === 'p' ) { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if ( ! empty($text) ) { $icerik->metin .= '<p>' . $text . '</p>'; } } elseif ( $node->tagName === 'img' ) { $src = $node->getAttribute('src'); if ( empty($src) ) { continue; } $image_url = icerik_normalize_url($src, $url); $upload_id = icerik_cekici_gorsel_yukle($image_url); if ( $upload_id ) { $node->setAttribute('src', wp_get_attachment_url($upload_id)); $node->removeAttribute('srcset'); $node->removeAttribute('data-src'); if ( ! $icerik->gorsel_id ) { $icerik->gorsel_id = $upload_id; } } $icerik->metin .= $dom->saveHTML($node); } } // Son düzenlemeler $icerik->metin = wp_kses_post($icerik->metin); $icerik->metin = force_balance_tags($icerik->metin); $icerik->metin = preg_replace('/<p[^>]*>\s*<\/p>/', '', $icerik->metin); return $icerik; } } if ( ! function_exists('icerik_cekici_gorsel_yukle') ) { function icerik_cekici_gorsel_yukle($image_url) { $parsed_url = parse_url($image_url); if ( ! $parsed_url || ! isset($parsed_url['host']) ) { error_log("[Geçersiz URL] " . $image_url); return false; } $image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . ($parsed_url['path'] ?? ''); if ( isset($parsed_url['query']) ) { $image_url .= '?' . $parsed_url['query']; } $ext = strtolower(pathinfo($parsed_url['path'] ?? '', PATHINFO_EXTENSION)); if ( ! in_array($ext, ['jpg','jpeg','png','gif','webp']) ) { error_log("[Geçersiz Uzantı] " . $ext); return false; } $tmp_file = download_url($image_url); if ( is_wp_error($tmp_file) ) { error_log("[İndirme Hatası] " . $tmp_file->get_error_message()); return false; } $file_array = [ 'name' => sanitize_file_name(basename($parsed_url['path'] ?? '')) ?: uniqid('img_').".$ext", 'tmp_name' => $tmp_file ]; $upload_id = media_handle_sideload($file_array, 0); @unlink($tmp_file); if ( is_wp_error($upload_id) ) { error_log("[Yükleme Hatası] " . $upload_id->get_error_message()); return false; } return $upload_id; } } if ( ! function_exists('icerik_normalize_url') ) { function icerik_normalize_url($image_url, $base_url) { if ( strpos($image_url, 'http') === 0 ) { return $image_url; } $parsed_base = parse_url($base_url); $base = $parsed_base['scheme'] . '://' . $parsed_base['host']; $base_path = isset($parsed_base['path']) ? rtrim($parsed_base['path'], '/') : ''; $image_path = ltrim($image_url, '/'); if ( $base_path && strpos($image_path, $base_path) === 0 ) { return $base . '/' . $image_path; } return $base . ($base_path ? "$base_path/" : '/') . $image_path; } } // ----------------------------------------------------- // [devamini_oku] Shortcode İşleyicisi // ----------------------------------------------------- function devamini_oku_shortcode_handler( $atts, $content = null ) { // Eğer URL parametresi mevcutsa (devamini_oku=1) içerik çekmeye çalışıyoruz. if ( isset($_GET['devamini_oku']) && $_GET['devamini_oku'] == '1' ) { global $post; $post_content = $post->post_content; // Debug: Post içeriğini hem log dosyasına hem de ekrana yazdırıyoruz. error_log("Post Content: " . $post_content); echo '<div style="background:#fee;padding:10px;margin-bottom:10px;">Debug: Post Content: ' . esc_html($post_content) . '</div>'; // Yazı içeriğinde ilk bulunan "https://" ile başlayan URL'yi tespit ediyoruz. if ( preg_match( '/(https?:\/\/[^\s"]+)/i', $post_content, $matches ) ) { $url = $matches[1]; error_log("Bulunan URL: " . $url); echo '<div style="background:#efe;padding:10px;margin-bottom:10px;">Debug: Bulunan URL: ' . esc_html($url) . '</div>'; $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { error_log("Çekilen içeriğin uzunluğu: " . strlen($fetched_content->metin)); echo '<div style="background:#eef;padding:10px;margin-bottom:10px;">Debug: Çekilen içeriğin uzunluğu: ' . strlen($fetched_content->metin) . '</div>'; $new_content = preg_replace( '/<img[^>]+\>/i', '', $fetched_content->metin ); remove_shortcode( 'devamini_oku' ); // URL parametresini temizlemek için JavaScript ekliyoruz. $script = '<script> if(window.history.replaceState){ var url = new URL(window.location); url.searchParams.delete("devamini_oku"); window.history.replaceState(null, "", url.toString()); } </script>'; return $new_content . $script; } else { error_log("Çekilen içerik boş geldi."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Çekilen içerik boş geldi.</div>'; } } else { error_log("Post içeriğinde URL bulunamadı."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Post içeriğinde URL bulunamadı.</div>'; } return ''; } // Eğer devamini_oku parametresi yoksa, "Devamını Oku" linkini gösteriyoruz. $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">Devamını Oku</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );
Re: wordpress devamını oku veri çekici
copilota sorduk
Kod:Tümünü seç
aşağıdaki kodla plugin altında yeni bir klasör içinde bir wordpress uygulaması yapalım. 1-bu uygulama yazının içeriğine eklenen [devamini_oku] kodunu kullanıcıya Devamını Oku linki olarak gösterecek. 2-Okuyucu linke tıklayınca sayfa yenilenirken yazının içeriğinde gömülü olan bir web adresini tarayıp bulacak. (bu link Hürriyet ve Kaynak yazılarına gömülü) 3-bu linki yazının içeriğini çekerek yazıya ekleyecek. sadece bu linkteki yazıyı çekecek 4-yazıda mevcut olan aynı yazıları eklemeyecek. sadece yazıları ekleyecek. 5- işlem tamamlandığında [devamini_oku] kodunu silecek. 6-bunlar Devamını Oku linkine tıklanıp sayfa yenilenirken gerçekleşecek. 7-sadece aynı olamayan yazıları çekecek resimler görseller çekilmeyecek . bu işlemi gerçekleştirmeyen kod aşağıda kontrol eder misin ve düzeltilirse kodun tamamını verir misin <?php /* Plugin Name: İçerik Devamını Oku - Debug Versiyonu Description: Yazı içeriğinde yer alan [devamini_oku] kodunu "Devamını Oku" linkine çevirir. Linke tıklandığında, yazı içindeki gömülü URL tespit edilir, içerik çekilir ve ekrana getirilir. (Debug mesajları ekrandadır) Version: 1.0 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; // WP_DEBUG ayarlarının aktif olduğundan emin olun (bu test sırasında faydalıdır) if ( ! defined('WP_DEBUG') ) { define('WP_DEBUG', true); } if ( ! defined('WP_DEBUG_LOG') ) { define('WP_DEBUG_LOG', true); } // ----------------------------------------------------- // İçerik Çekici Fonksiyonlar // ----------------------------------------------------- if ( ! function_exists('icerik_cekici_html_al') ) { function icerik_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept-Language' => 'tr-TR,tr;q=0.9' ], 'timeout' => 45, 'sslverify' => false ]); if ( is_wp_error($response) ) { error_log("[HTML Çekme Hatası] " . $response->get_error_message()); return false; } return wp_remote_retrieve_body($response); } } if ( ! function_exists('icerik_cekici_icerik_al') ) { function icerik_cekici_icerik_al($url) { $html = icerik_cekici_html_al($url); if ( ! $html ) { return (object)[ 'metin' => '', 'gorsel_id' => null ]; } $dom = new DOMDocument(); libxml_use_internal_errors(true); $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); $icerik = (object)[ 'metin' => '', 'gorsel_id' => null ]; $xpath = new DOMXPath($dom); // Tüm <a> etiketlerini kaldırıyoruz $links = $xpath->query('//a'); foreach ( $links as $link ) { $fragment = $dom->createDocumentFragment(); while ( $link->childNodes->length > 0 ) { $fragment->appendChild( $link->childNodes->item(0) ); } $link->parentNode->replaceChild( $fragment, $link ); } // Ana içeriği işle: <p> ve <img> etiketleri $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)] | //img[not(ancestor::header|aside|footer)]'); foreach ( $nodes as $node ) { if ( $node->tagName === 'p' ) { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if ( ! empty($text) ) { $icerik->metin .= '<p>' . $text . '</p>'; } } elseif ( $node->tagName === 'img' ) { $src = $node->getAttribute('src'); if ( empty($src) ) { continue; } $image_url = icerik_normalize_url($src, $url); $upload_id = icerik_cekici_gorsel_yukle($image_url); if ( $upload_id ) { $node->setAttribute('src', wp_get_attachment_url($upload_id)); $node->removeAttribute('srcset'); $node->removeAttribute('data-src'); if ( ! $icerik->gorsel_id ) { $icerik->gorsel_id = $upload_id; } } $icerik->metin .= $dom->saveHTML($node); } } // Son düzenlemeler $icerik->metin = wp_kses_post($icerik->metin); $icerik->metin = force_balance_tags($icerik->metin); $icerik->metin = preg_replace('/<p[^>]*>\s*<\/p>/', '', $icerik->metin); return $icerik; } } if ( ! function_exists('icerik_cekici_gorsel_yukle') ) { function icerik_cekici_gorsel_yukle($image_url) { $parsed_url = parse_url($image_url); if ( ! $parsed_url || ! isset($parsed_url['host']) ) { error_log("[Geçersiz URL] " . $image_url); return false; } $image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . ($parsed_url['path'] ?? ''); if ( isset($parsed_url['query']) ) { $image_url .= '?' . $parsed_url['query']; } $ext = strtolower(pathinfo($parsed_url['path'] ?? '', PATHINFO_EXTENSION)); if ( ! in_array($ext, ['jpg','jpeg','png','gif','webp']) ) { error_log("[Geçersiz Uzantı] " . $ext); return false; } $tmp_file = download_url($image_url); if ( is_wp_error($tmp_file) ) { error_log("[İndirme Hatası] " . $tmp_file->get_error_message()); return false; } $file_array = [ 'name' => sanitize_file_name(basename($parsed_url['path'] ?? '')) ?: uniqid('img_').".$ext", 'tmp_name' => $tmp_file ]; $upload_id = media_handle_sideload($file_array, 0); @unlink($tmp_file); if ( is_wp_error($upload_id) ) { error_log("[Yükleme Hatası] " . $upload_id->get_error_message()); return false; } return $upload_id; } } if ( ! function_exists('icerik_normalize_url') ) { function icerik_normalize_url($image_url, $base_url) { if ( strpos($image_url, 'http') === 0 ) { return $image_url; } $parsed_base = parse_url($base_url); $base = $parsed_base['scheme'] . '://' . $parsed_base['host']; $base_path = isset($parsed_base['path']) ? rtrim($parsed_base['path'], '/') : ''; $image_path = ltrim($image_url, '/'); if ( $base_path && strpos($image_path, $base_path) === 0 ) { return $base . '/' . $image_path; } return $base . ($base_path ? "$base_path/" : '/') . $image_path; } } // ----------------------------------------------------- // [devamini_oku] Shortcode İşleyicisi // ----------------------------------------------------- function devamini_oku_shortcode_handler( $atts, $content = null ) { // Eğer URL parametresi mevcutsa (devamini_oku=1) içerik çekmeye çalışıyoruz. if ( isset($_GET['devamini_oku']) && $_GET['devamini_oku'] == '1' ) { global $post; $post_content = $post->post_content; // Debug: Post içeriğini hem log dosyasına hem de ekrana yazdırıyoruz. error_log("Post Content: " . $post_content); echo '<div style="background:#fee;padding:10px;margin-bottom:10px;">Debug: Post Content: ' . esc_html($post_content) . '</div>'; // Yazı içeriğinde ilk bulunan "https://" ile başlayan URL'yi tespit ediyoruz. if ( preg_match( '/(https?:\/\/[^\s"]+)/i', $post_content, $matches ) ) { $url = $matches[1]; error_log("Bulunan URL: " . $url); echo '<div style="background:#efe;padding:10px;margin-bottom:10px;">Debug: Bulunan URL: ' . esc_html($url) . '</div>'; $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { error_log("Çekilen içeriğin uzunluğu: " . strlen($fetched_content->metin)); echo '<div style="background:#eef;padding:10px;margin-bottom:10px;">Debug: Çekilen içeriğin uzunluğu: ' . strlen($fetched_content->metin) . '</div>'; $new_content = preg_replace( '/<img[^>]+\>/i', '', $fetched_content->metin ); remove_shortcode( 'devamini_oku' ); // URL parametresini temizlemek için JavaScript ekliyoruz. $script = '<script> if(window.history.replaceState){ var url = new URL(window.location); url.searchParams.delete("devamini_oku"); window.history.replaceState(null, "", url.toString()); } </script>'; return $new_content . $script; } else { error_log("Çekilen içerik boş geldi."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Çekilen içerik boş geldi.</div>'; } } else { error_log("Post içeriğinde URL bulunamadı."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Post içeriğinde URL bulunamadı.</div>'; } return ''; } // Eğer devamini_oku parametresi yoksa, "Devamını Oku" linkini gösteriyoruz. $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">Devamını Oku</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );
Re: wordpress devamını oku veri çekici
deepseek sordukcevap hata veriyorKod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku - Debug Versiyonu Description: Yazı içeriğinde yer alan [devamini_oku] kodunu "Devamını Oku" linkine çevirir. Linke tıklandığında, yazı içindeki gömülü URL tespit edilir, içerik çekilir ve ekrana getirilir. (Debug mesajları ekrandadır) Version: 1.0 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; // WP_DEBUG ayarlarının aktif olduğundan emin olun (bu test sırasında faydalıdır) if ( ! defined('WP_DEBUG') ) { define('WP_DEBUG', true); } if ( ! defined('WP_DEBUG_LOG') ) { define('WP_DEBUG_LOG', true); } // ----------------------------------------------------- // İçerik Çekici Fonksiyonlar // ----------------------------------------------------- if ( ! function_exists('icerik_cekici_html_al') ) { function icerik_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept-Language' => 'tr-TR,tr;q=0.9' ], 'timeout' => 45, 'sslverify' => false ]); if ( is_wp_error($response) ) { error_log("[HTML Çekme Hatası] " . $response->get_error_message()); return false; } return wp_remote_retrieve_body($response); } } if ( ! function_exists('icerik_cekici_icerik_al') ) { function icerik_cekici_icerik_al($url) { $html = icerik_cekici_html_al($url); if ( ! $html ) { return (object)[ 'metin' => '', 'gorsel_id' => null ]; } $dom = new DOMDocument(); libxml_use_internal_errors(true); $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); $icerik = (object)[ 'metin' => '', 'gorsel_id' => null ]; $xpath = new DOMXPath($dom); // Tüm <a> etiketlerini kaldırıyoruz $links = $xpath->query('//a'); foreach ( $links as $link ) { $fragment = $dom->createDocumentFragment(); while ( $link->childNodes->length > 0 ) { $fragment->appendChild( $link->childNodes->item(0) ); } $link->parentNode->replaceChild( $fragment, $link ); } // Ana içeriği işle: <p> ve <img> etiketleri $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)] | //img[not(ancestor::header|aside|footer)]'); foreach ( $nodes as $node ) { if ( $node->tagName === 'p' ) { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if ( ! empty($text) ) { $icerik->metin .= '<p>' . $text . '</p>'; } } elseif ( $node->tagName === 'img' ) { $src = $node->getAttribute('src'); if ( empty($src) ) { continue; } $image_url = icerik_normalize_url($src, $url); $upload_id = icerik_cekici_gorsel_yukle($image_url); if ( $upload_id ) { $node->setAttribute('src', wp_get_attachment_url($upload_id)); $node->removeAttribute('srcset'); $node->removeAttribute('data-src'); if ( ! $icerik->gorsel_id ) { $icerik->gorsel_id = $upload_id; } } $icerik->metin .= $dom->saveHTML($node); } } // Son düzenlemeler $icerik->metin = wp_kses_post($icerik->metin); $icerik->metin = force_balance_tags($icerik->metin); $icerik->metin = preg_replace('/<p[^>]*>\s*<\/p>/', '', $icerik->metin); return $icerik; } } if ( ! function_exists('icerik_cekici_gorsel_yukle') ) { function icerik_cekici_gorsel_yukle($image_url) { $parsed_url = parse_url($image_url); if ( ! $parsed_url || ! isset($parsed_url['host']) ) { error_log("[Geçersiz URL] " . $image_url); return false; } $image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . ($parsed_url['path'] ?? ''); if ( isset($parsed_url['query']) ) { $image_url .= '?' . $parsed_url['query']; } $ext = strtolower(pathinfo($parsed_url['path'] ?? '', PATHINFO_EXTENSION)); if ( ! in_array($ext, ['jpg','jpeg','png','gif','webp']) ) { error_log("[Geçersiz Uzantı] " . $ext); return false; } $tmp_file = download_url($image_url); if ( is_wp_error($tmp_file) ) { error_log("[İndirme Hatası] " . $tmp_file->get_error_message()); return false; } $file_array = [ 'name' => sanitize_file_name(basename($parsed_url['path'] ?? '')) ?: uniqid('img_').".$ext", 'tmp_name' => $tmp_file ]; $upload_id = media_handle_sideload($file_array, 0); @unlink($tmp_file); if ( is_wp_error($upload_id) ) { error_log("[Yükleme Hatası] " . $upload_id->get_error_message()); return false; } return $upload_id; } } if ( ! function_exists('icerik_normalize_url') ) { function icerik_normalize_url($image_url, $base_url) { if ( strpos($image_url, 'http') === 0 ) { return $image_url; } $parsed_base = parse_url($base_url); $base = $parsed_base['scheme'] . '://' . $parsed_base['host']; $base_path = isset($parsed_base['path']) ? rtrim($parsed_base['path'], '/') : ''; $image_path = ltrim($image_url, '/'); if ( $base_path && strpos($image_path, $base_path) === 0 ) { return $base . '/' . $image_path; } return $base . ($base_path ? "$base_path/" : '/') . $image_path; } } // ----------------------------------------------------- // [devamini_oku] Shortcode İşleyicisi // ----------------------------------------------------- function devamini_oku_shortcode_handler( $atts, $content = null ) { // Eğer URL parametresi mevcutsa (devamini_oku=1) içerik çekmeye çalışıyoruz. if ( isset($_GET['devamini_oku']) && $_GET['devamini_oku'] == '1' ) { global $post; $post_content = $post->post_content; // Debug: Post içeriğini hem log dosyasına hem de ekrana yazdırıyoruz. error_log("Post Content: " . $post_content); echo '<div style="background:#fee;padding:10px;margin-bottom:10px;">Debug: Post Content: ' . esc_html($post_content) . '</div>'; // Yazı içeriğinde ilk bulunan "https://" ile başlayan URL'yi tespit ediyoruz. if ( preg_match( '/(https?:\/\/[^\s"]+)/i', $post_content, $matches ) ) { $url = $matches[1]; error_log("Bulunan URL: " . $url); echo '<div style="background:#efe;padding:10px;margin-bottom:10px;">Debug: Bulunan URL: ' . esc_html($url) . '</div>'; $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { error_log("Çekilen içeriğin uzunluğu: " . strlen($fetched_content->metin)); echo '<div style="background:#eef;padding:10px;margin-bottom:10px;">Debug: Çekilen içeriğin uzunluğu: ' . strlen($fetched_content->metin) . '</div>'; $new_content = preg_replace( '/<img[^>]+\>/i', '', $fetched_content->metin ); remove_shortcode( 'devamini_oku' ); // URL parametresini temizlemek için JavaScript ekliyoruz. $script = '<script> if(window.history.replaceState){ var url = new URL(window.location); url.searchParams.delete("devamini_oku"); window.history.replaceState(null, "", url.toString()); } </script>'; return $new_content . $script; } else { error_log("Çekilen içerik boş geldi."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Çekilen içerik boş geldi.</div>'; } } else { error_log("Post içeriğinde URL bulunamadı."); echo '<div style="background:#fcc;padding:10px;margin-bottom:10px;">Debug: Post içeriğinde URL bulunamadı.</div>'; } return ''; } // Eğer devamini_oku parametresi yoksa, "Devamını Oku" linkini gösteriyoruz. $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">Devamını Oku</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );Kod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğindeki [devamini_oku] kodunu "Devamını Oku" linkine çevirir. İçerik çekme işlemi güvenli bir şekilde gerçekleştirilir. Version: 2.0 Author: Sizin Adınız */ if (!defined('ABSPATH')) exit; // ----------------------------------------------------- // Güvenlik ve Hata Ayıklama Ayarları // ----------------------------------------------------- if (!defined('WP_DEBUG_LOG')) define('WP_DEBUG_LOG', true); // ----------------------------------------------------- // İçerik Çekme Fonksiyonları (Görselsiz) // ----------------------------------------------------- function icerik_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' ], 'timeout' => 30, 'sslverify' => false ]); return is_wp_error($response) ? false : wp_remote_retrieve_body($response); } function icerik_cekici_icerik_al($url) { $html = icerik_cekici_html_al($url); if (!$html) return ''; $dom = new DOMDocument(); @$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8')); $xpath = new DOMXPath($dom); // Sadece metin paragraflarını al $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)]'); $metin = ''; foreach ($nodes as $node) { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if (!empty($text)) $metin .= '<p>' . esc_html($text) . '</p>'; } return $metin; } // ----------------------------------------------------- // Shortcode İşleyici (Güvenlik Önlemli) // ----------------------------------------------------- function devamini_oku_shortcode_handler($atts, $content = null) { global $post; // İşlem tetiklendiyse if (isset($_GET['devamini_oku']) && $_GET['devamini_oku'] == $post->ID) { // Nonce kontrolü if (!wp_verify_nonce($_GET['_wpnonce'], 'devam_oku_' . $post->ID)) { wp_die('Geçersiz işlem!'); } // URL'yi post içinden al if (preg_match('/https?:\/\/[^\s"]+/i', $post->post_content, $matches)) { $url = esc_url_raw($matches[0]); $yeni_icerik = icerik_cekici_icerik_al($url); if (!empty($yeni_icerik)) { // Orijinal içerikten kopyaları temizle $temiz_icerik = preg_replace('/\[devamini_oku\]/', '', $post->post_content); $paragraflar = explode('</p>', $yeni_icerik); foreach ($paragraflar as $p) { $p = trim($p); if (!empty($p) && strpos($temiz_icerik, $p) === false) { $temiz_icerik .= $p . '</p>'; } } // Postu güncelle ve yönlendir wp_update_post([ 'ID' => $post->ID, 'post_content' => $temiz_icerik ]); } } wp_redirect(get_permalink($post->ID)); exit; } // Link oluştur return '<a href="' . esc_url(wp_nonce_url( add_query_arg('devamini_oku', $post->ID, get_permalink()), 'devam_oku_' . $post->ID )) . '">Devamını Oku</a>'; } add_shortcode('devamini_oku', 'devamini_oku_shortcode_handler');
Re: wordpress devamını oku veri çekici
cgpt sorulduKod:Tümünü seç
plugin klasörü altında yeni bir klasör içinde bir wordpress uygulaması yapalım. 1-bu uygulama yazının içeriğine eklenen [devamini_oku] kodunu kullanıcıya Devamını Oku linki olarak gösterecek. 2-Okuyucu linke tıklayınca sayfa yenilenirken yazının içeriğinde gömülü olan bir web adresini tarayıp bulacak. (Adres Hürriyet veya Kaynak yazılarında gömülü) 3-bu linkin içeriğindeki haberin sadece yazılarını çekerek yazının içeriğini çekerek, yazıya ekleyecek. 4-yazıda mevcut olan aynı yazıları eklemeyecek. sadece yazıları ekleyecek. 5- işlem tamamlandığında [devamini_oku] kodunu silecek. 6-bunlar Devamını Oku linkine tıklanıp sayfa yenilenirken gerçekleşecek. 7-sadece aynı olamayan yazıları çekecek resimler görseller çekilmeyecekdosya yapısıKod:Tümünü seç
wp-content/ └── plugins/ └── devamini-oku/ └── devamini-oku.phpKod:Tümünü seç
<?php /* Plugin Name: Devamını Oku Description: Yazı içeriğinde eklenen [devamini_oku] shortcode’unu “Devamını Oku” linkine çevirir, linke tıklandığında gömülü URL’den yalnızca metinleri çekerek yazıya ekler ve shortcode’u kaldırır. Version: 1.0 Author: Your Name */ if ( ! defined( 'ABSPATH' ) ) exit; class DevaminiOkuPlugin { public function __construct() { // Shortcode kaydı add_shortcode('devamini_oku', array($this, 'devamini_oku_shortcode')); // Linke tıklanarak sayfa yenilendiğinde işlemi tetikle add_action('template_redirect', array($this, 'process_devamini_oku')); // Yazı içeriğini filtreleyerek güncelle add_filter('the_content', array($this, 'update_content')); } // 1. [devamini_oku] shortcode’unu linke çevirir. public function devamini_oku_shortcode($atts, $content = null) { // Mevcut sayfanın URL'sine devamini_oku parametresi eklenir. $current_url = add_query_arg('devamini_oku', '1', get_permalink()); return '<a href="' . esc_url($current_url) . '">Devamını Oku</a>'; } // 2. ve 6. Linke tıklandığında sayfa yenilendiğinde çalışır. public function process_devamini_oku() { if ( isset($_GET['devamini_oku']) && $_GET['devamini_oku'] == '1' && is_single() ) { // İşlemin bir defaya mahsus çalışması için bir bayrak (transient veya query var) kullanabilirsiniz. // Örneğin: update_post_meta() ile post meta üzerinden "devamini_oku_yapildi" flag'i eklenebilir. add_filter('the_content', array($this, 'append_remote_content')); } } // 3. ve 4. Uzaktaki içerik çekilip mevcut içeriğe eklenir. public function append_remote_content($content) { // [devamini_oku] etiketini içerikten kaldır. $content = str_replace('[devamini_oku]', '', $content); // Yazı içeriğinden gömülü URL’yi bul (örneğin, ilk http(s):// ifadesi) if (preg_match('/https?:\/\/[^\s"<>]+/', $content, $matches)) { $embedded_url = $matches[0]; // Uzak içerik çekimi $response = wp_remote_get($embedded_url); if (is_wp_error($response)) { return $content; // Hata durumunda mevcut içeriği değiştirme } $remote_html = wp_remote_retrieve_body($response); // HTML parse – DOMDocument ile paragrafları çekiyoruz. libxml_use_internal_errors(true); $dom = new DOMDocument(); $dom->loadHTML($remote_html); $xpath = new DOMXPath($dom); // Burada örnek olarak <p> etiketlerini çekiyoruz. İhtiyaca göre düzenleyebilirsiniz. $paragraphs = $xpath->query('//p'); $new_text = ''; if ($paragraphs->length) { foreach ($paragraphs as $p) { $text = trim($p->textContent); // 4. Aynı metin zaten mevcutsa eklemiyoruz. if (!empty($text) && strpos($content, $text) === false) { $new_text .= '<p>' . esc_html($text) . '</p>'; } } } // Yeni metin varsa mevcut içeriğe ekle if (!empty($new_text)) { $content .= $new_text; } } return $content; } // Yazı içeriğini güncellemek için (örneğin, filtre ile çalışıyorsa) public function update_content($content) { // Eğer daha önce eklenmişse [devamini_oku] shortcode'unun ekrana yansımasını engelle. return str_replace('[devamini_oku]', '', $content); } } new DevaminiOkuPlugin();
Re: wordpress devamını oku veri çekici
copilot soruldu
şöyle yapalım hali hazırda içerik çeken uygulamam var şu konumdabuna bağlantı kurup çekebilirmiyiz içeriği . burada hangi dosyanın kodunu istiyorsan paylaşırımKod:Tümünü seç
/wp-content/plugins/icerik-cekici/ ├── icerik-cekici.php └── includes/ ├── class-baslik-olusturucu.php └── functions.phpmevcut kodKod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerini arar, gömülü linkteki yazı içeriğini çekip yazıya ekler. Version: 1.1 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; // HTML çekme fonksiyonu if ( ! function_exists('icerik_devami_cekici_html_al') ) { function icerik_devami_cekici_html_al($url) { $response = wp_remote_get($url, [ 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Accept-Language' => 'tr-TR,tr;q=0.9' ], 'timeout' => 15, 'sslverify' => false ]); if(is_wp_error($response)) { error_log("[HTML Çekme Hatası] " . $response->get_error_message()); return false; } return wp_remote_retrieve_body($response); } } // İçerik çekme ve işleme fonksiyonu if ( ! function_exists('icerik_devami_icerik_al') ) { function icerik_devami_icerik_al($url) { $html = icerik_devami_cekici_html_al($url); if(!$html) return (object)['metin' => '', 'gorsel_id' => null]; $dom = new DOMDocument(); libxml_use_internal_errors(true); $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); @$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); libxml_clear_errors(); $icerik = (object)['metin' => '', 'gorsel_id' => null]; $xpath = new DOMXPath($dom); // Tüm bağlantıları kaldır $links = $xpath->query('//a'); foreach($links as $link) { $fragment = $dom->createDocumentFragment(); while($link->childNodes->length > 0) { $fragment->appendChild($link->childNodes->item(0)); } $link->parentNode->replaceChild($fragment, $link); } // Ana içeriği işle (paragraflar ve resimler) $nodes = $xpath->query('//p[not(ancestor::header|aside|footer)] | //img[not(ancestor::header|aside|footer)]'); foreach($nodes as $node) { if($node->tagName === 'p') { $text = preg_replace('/\s+/', ' ', trim($node->textContent)); if(!empty($text)) { $icerik->metin .= '<p>' . $text . '</p>'; } } elseif($node->tagName === 'img') { $src = $node->getAttribute('src'); if(empty($src)) continue; $image_url = icerik_devami_normalize_url($src, $url); $upload_id = icerik_devami_gorsel_yukle($image_url); if($upload_id) { $node->setAttribute('src', wp_get_attachment_url($upload_id)); $node->removeAttribute('srcset'); $node->removeAttribute('data-src'); if(!$icerik->gorsel_id) $icerik->gorsel_id = $upload_id; } $icerik->metin .= $dom->saveHTML($node); } } // Son işlemler: HTML güvenliği ve boş paragrafların temizlenmesi $icerik->metin = wp_kses_post($icerik->metin); $icerik->metin = force_balance_tags($icerik->metin); $icerik->metin = preg_replace('/<p[^>]*>\s*<\/p>/', '', $icerik->metin); return $icerik; } } // Görsel yükleme fonksiyonu if ( ! function_exists('icerik_devami_gorsel_yukle') ) { function icerik_devami_gorsel_yukle($image_url) { $parsed_url = parse_url($image_url); if(!$parsed_url || !isset($parsed_url['host'])) { error_log("[Geçersiz URL] " . $image_url); return false; } // URL oluşturma $image_url = $parsed_url['scheme'] . '://' . $parsed_url['host'] . ($parsed_url['path'] ?? ''); if(isset($parsed_url['query'])) { $image_url .= '?' . $parsed_url['query']; } // Uzantı kontrolü $ext = strtolower(pathinfo($parsed_url['path'] ?? '', PATHINFO_EXTENSION)); if(!in_array($ext, ['jpg','jpeg','png','gif','webp'])) { error_log("[Geçersiz Uzantı] " . $ext); return false; } // İndirme işlemi $tmp_file = download_url($image_url); if(is_wp_error($tmp_file)) { error_log("[İndirme Hatası] " . $tmp_file->get_error_message()); return false; } // Yükleme işlemi $file_array = [ 'name' => sanitize_file_name(basename($parsed_url['path'] ?? '')) ?: uniqid('img_').".$ext", 'tmp_name' => $tmp_file ]; $upload_id = media_handle_sideload($file_array, 0); @unlink($tmp_file); if(is_wp_error($upload_id)) { error_log("[Yükleme Hatası] " . $upload_id->get_error_message()); return false; } return $upload_id; } } // URL normalizasyon fonksiyonu if ( ! function_exists('icerik_devami_normalize_url') ) { function icerik_devami_normalize_url($image_url, $base_url) { if(strpos($image_url, 'http') === 0) return $image_url; $parsed_base = parse_url($base_url); $base = $parsed_base['scheme'] . '://' . $parsed_base['host']; $base_path = isset($parsed_base['path']) ? rtrim($parsed_base['path'], '/') : ''; $image_path = ltrim($image_url, '/'); if($base_path && strpos($image_path, $base_path) === 0) { return $base . '/' . $image_path; } return $base . ($base_path ? "$base_path/" : '/') . $image_path; } } /** * [devamini_oku] Shortcode İşleyicisi * * Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerini arar, gömülü linkteki yazı içeriğini çekip ekler. */ function devamini_oku_shortcode_handler( $atts, $content = null ) { global $post; // Kelimeleri tanımla $aranan_kelimeler = '(Hürriyet|Kaynak)'; // Desen oluştur $pattern = '/<a[^>]*href=["\'](.*?)["\'][^>]*>' . $aranan_kelimeler . '<\/a>/i'; if ( isset( $_GET['devamini_oku'] ) && $_GET['devamini_oku'] == '1' ) { // Yazı içeriğinde deseni ara if ( preg_match( $pattern, $post->post_content, $matches ) ) { $url = esc_url_raw( $matches[1] ); $fetched_content = icerik_devami_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { remove_shortcode( 'devamini_oku' ); return $fetched_content->metin; } } return '<p>' . __( 'İçerik bulunamadı.', 'devamini-oku' ) . '</p>'; } $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">' . __( 'Devamını Oku', 'devamini-oku' ) . '</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );bunu verdi bu neKod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerini arar, gömülü linkteki yazı içeriğini çekip yazıya ekler. Version: 1.2 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; /** * [devamini_oku] Shortcode İşleyicisi * * Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerini arar, gömülü linkteki yazı içeriğini çekip ekler. */ function devamini_oku_shortcode_handler( $atts, $content = null ) { global $post; // Kelimeleri tanımla $aranan_kelimeler = '(Hürriyet|Kaynak)'; // Desen oluştur $pattern = '/<a[^>]*href=["\'](.*?)["\'][^>]*>' . $aranan_kelimeler . '<\/a>/i'; if ( isset( $_GET['devamini_oku'] ) && $_GET['devamini_oku'] == '1' ) { // Yazı içeriğinde deseni ara if ( preg_match( $pattern, $post->post_content, $matches ) ) { $url = esc_url_raw( $matches[1] ); // 'icerik-cekici' eklentisindeki içerik alma fonksiyonunu kullan if ( function_exists( 'icerik_cekici_icerik_al' ) ) { $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { remove_shortcode( 'devamini_oku' ); return $fetched_content->metin; } else { return '<p>' . __( 'İçerik alınamadı.', 'devamini-oku' ) . '</p>'; } } else { return '<p>' . __( 'İçerik çekici eklentisi etkin değil veya fonksiyon bulunamadı.', 'devamini-oku' ) . '</p>'; } } return '<p>' . __( 'İçerik bulunamadı.', 'devamini-oku' ) . '</p>'; } $link = add_query_arg( 'devamini_oku', '1' ); return '<a href="' . esc_url( $link ) . '">' . __( 'Devamını Oku', 'devamini-oku' ) . '</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );
Re: wordpress devamını oku veri çekici
copilot
bu içeriği bu adresle gösteriyorKod:Tümünü seç
add_action( 'wp_loaded', 'test_icerik_cekici' ); function test_icerik_cekici() { if ( isset( $_GET['test_icerik'] ) && $_GET['test_icerik'] == '1' ) { $test_url = 'https://www.hurriyet.com.tr/teknoloji'; // Test için geçerli bir Hürriyet URL'si girin if ( function_exists( 'icerik_cekici_icerik_al' ) ) { $icerik = icerik_cekici_icerik_al( $test_url ); echo '<h1>Test Sonucu:</h1>'; echo '<pre>'; print_r( $icerik ); echo '</pre>'; } else { echo 'Fonksiyon bulunamadı.'; } exit; } }Kod:Tümünü seç
https://siteniz.com/?test_icerik=1
Re: wordpress devamını oku veri çekici
copilot son dosya ile hala olmadı
şu içerikleşu kodla çekim hala olmuyor ama hata da vermiyorKod:Tümünü seç
/wp-content/plugins/icerik-cekici/ ├── icerik-cekici.php └── includes/ ├── class-baslik-olusturucu.php └── functions.php
Kod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerine bağlı linklerin içeriğini çekip yazıya ekler. Version: 1.4 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; /** * [devamini_oku] Shortcode İşleyicisi */ function devamini_oku_shortcode_handler( $atts, $content = null ) { global $post; // Kelimeleri tanımla $aranan_kelimeler = '(Hürriyet|Kaynak)'; // Yazı içeriğini ham haliyle al $content = $post->post_content; // Desen oluştur $pattern = '/<a[^>]*href=["\'](.*?)["\'][^>]*>\s*' . $aranan_kelimeler . '\s*<\/a>/iu'; if ( isset( $_GET['devamini_oku'] ) && $_GET['devamini_oku'] == '1' ) { error_log('Devamini Oku: Parametre tespit edildi.'); // Yazı içeriğinde deseni ara if ( preg_match( $pattern, $content, $matches ) ) { $url = esc_url_raw( $matches[1] ); error_log('Devamini Oku: URL bulundu - ' . $url); // 'icerik-cekici' eklentisindeki içerik alma fonksiyonunu kullan if ( function_exists( 'icerik_cekici_icerik_al' ) ) { error_log('Devamini Oku: Fonksiyon mevcut, içerik çekiliyor.'); $fetched_content = icerik_cekici_icerik_al( $url ); if ( ! empty( $fetched_content->metin ) ) { error_log('Devamini Oku: İçerik başarıyla alındı.'); // İçeriği döndür return $fetched_content->metin; } else { error_log('Devamini Oku: İçerik alınamadı veya boş.'); return '<p>' . __( 'İçerik alınamadı.', 'devamini-oku' ) . '</p>'; } } else { error_log('Devamini Oku: Fonksiyon bulunamadı.'); return '<p>' . __( 'İçerik çekici eklentisi etkin değil veya fonksiyon bulunamadı.', 'devamini-oku' ) . '</p>'; } } else { error_log('Devamini Oku: Eşleşme bulunamadı.'); return '<p>' . __( 'İçerik bulunamadı.', 'devamini-oku' ) . '</p>'; } } // "Devamını Oku" linki oluştur $link = add_query_arg( 'devamini_oku', '1', get_permalink( $post->ID ) ); return '<a href="' . esc_url( $link ) . '">' . __( 'Devamını Oku', 'devamini-oku' ) . '</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );sadece linki çıkartıp yazıya eklemeKod:Tümünü seç
<?php /* Plugin Name: İçerik Devamını Oku Description: Yazı içeriğinde "Hürriyet" veya "Kaynak" kelimelerine bağlı linkleri bulur ve 'Devamını Oku' tıklandığında linki yazıya ekler. Version: 1.5 Author: Sizin Adınız */ if ( ! defined( 'ABSPATH' ) ) exit; /** * [devamini_oku] Shortcode İşleyicisi */ function devamini_oku_shortcode_handler( $atts, $content = null ) { global $post; // Kelimeleri tanımla $aranan_kelimeler = '(Hürriyet|Kaynak)'; // Yazı içeriğini ham haliyle al $content = $post->post_content; // Desen oluştur $pattern = '/<a[^>]*href=["\'](.*?)["\'][^>]*>\s*' . $aranan_kelimeler . '\s*<\/a>/iu'; if ( isset( $_GET['devamini_oku'] ) && $_GET['devamini_oku'] == '1' ) { // Yazı içeriğinde deseni ara if ( preg_match( $pattern, $content, $matches ) ) { $url = esc_url_raw( $matches[1] ); // Linki yazıya ekle return '<p>Bulunan Link: <a href="' . esc_url( $url ) . '">' . esc_html( $url ) . '</a></p>'; } else { return '<p>' . __( 'Link bulunamadı.', 'devamini-oku' ) . '</p>'; } } // "Devamını Oku" linki oluştur $link = add_query_arg( 'devamini_oku', '1', get_permalink( $post->ID ) ); return '<a href="' . esc_url( $link ) . '">' . __( 'Devamını Oku', 'devamini-oku' ) . '</a>'; } add_shortcode( 'devamini_oku', 'devamini_oku_shortcode_handler' );
Re: wordpress devamını oku veri çekici
yeniden deniyoruz cgpt pc1 de sorduk24 saniye hakkında Devamını oku kısa kodu oluşturmaKod:Tümünü seç
wordpress için bir shortcode yapalım. [devaminioku] olsun. bu kod kullanıcı tarafından eklendiği gönderinin son kelimesinin bitimine gelecek şekilde minimal Devamını Oku butonu yerleştirecek. bu eklentiyi plugins klasöründe "devamoku" klasörü içinde oluşturalım. bu eklentinin admin sayfasında aktif pasif ayarı olsun. giriş yapmış kullanıcı , admin , herkese görünür ayarları olsun. bunu oluşturalım sonrasında fonksiyonlarını oluşturalım.
Aşağıdaki örnek, istediğiniz özellikleri barındıran bir WordPress eklentisi oluşturmanıza yardımcı olacaktır. Bu örnekte:
Shortcode:shortcode’u, kullanıcı gönderiye eklediğinde, buton HTML kodunu (minimal "Devamını Oku" butonu) ekler.Kod:Tümünü seç
[devaminioku]
Admin Ayar Sayfası: Eklentiyi aktif/pasif yapabileceğiniz ve butonun görünürlüğünü (herkese, yalnızca giriş yapmış kullanıcılar veya sadece admin) ayarlayabileceğiniz bir sayfa oluşturulur.
Klasör Yapısı: Bu dosyayı wp-content/plugins//Kod:Tümünü seç
devamokuyoluna yerleştirin. (Eğer isterseniz, minimal CSS için aynı klasörde bir style.css dosyası oluşturabilirsiniz.)Kod:Tümünü seç
devamoku.php
Aşağıda örnek kodları bulabilirsiniz:Kod: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 son kelimesine minimal "Devamını Oku" butonu ekler. Ayrıca admin panelinden aktif/pasif ve görünürlük ayarları yapılır. Version: 1.0 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' ) ); // Ön yüz stil dosyası ekle (opsiyonel) add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); } // Ayarlarımızı register ediyoruz public function register_settings() { register_setting( 'devamoku_options_group', $this->option_name ); } // Admin menüye ayar sayfası ekleniyor public function add_admin_menu() { add_options_page( 'Devamını Oku Ayarları', 'Devamını Oku', 'manage_options', 'devamoku-settings', array( $this, 'settings_page' ) ); } // Ayar sayfasının içeriği 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 } // Opsiyonel: Stil dosyasını ekliyoruz (aynı klasörde style.css dosyası olmalı) public function enqueue_scripts() { wp_enqueue_style( 'devamoku-style', plugin_dir_url( __FILE__ ) . 'style.css' ); } // [devaminioku] shortcode’u çalıştıran fonksiyon 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, 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 olarak kullanılır. $button = '<a href="#" class="devamoku-button">Devamını Oku</a>'; return $button; } } new DevamokuPlugin();(opsiyonel, butonun minimal görünümü için)Kod:Tümünü seç
style.css
AçıklamalarKod: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; }
Shortcode Kullanımı: Yazı düzenleyicisinde istediğiniz yere [devaminioku] eklediğinizde, yukarıdaki fonksiyon çalışır. Ayarlarda eklenti aktif değilse veya görünürlük şartları sağlanmıyorsa buton görünmez.
Admin Ayar Sayfası: WordPress admin panelindeOku yoluyla erişebileceğiniz sayfada, eklentiyi aktif/pasif yapabilir ve butonun hangi kullanıcılar için görünür olacağını belirleyebilirsiniz.Ayarlar > Devamını
Butonun Yerleşimi: Shortcode eklendiği konumda, metnin son kelimesine eklenmiş gibi inline çalışır. (Kullanıcının gönderi içeriğinde shortcode’u doğru konuma eklemesi yeterlidir.)
Bu örneği kendi ihtiyaçlarınıza göre genişletebilir veya özelleştirebilirsiniz.