2 . sayfa (Toplam 2 sayfa)
Re: wordpress devamını oku veri çekici
Gönderilme zamanı: Cum Şub 28, 2025 6:18 am
gönderen muratca61
soru devam fonksiyon ekleme
Kod:Tümünü seç Kopyala
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
Re: wordpress devamını oku veri çekici
Gönderilme zamanı: Cum Şub 28, 2025 6:21 am
gönderen muratca61
dosya klasör yapısı
Kod:Tümünü seç Kopyala
wp-content/
└── plugins/
└── devamoku/
├── devamoku.php
├── devamoku.js
└── style.css
Kod:Tümünü seç Kopyala
<?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ç Kopyala
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ç Kopyala
.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
Gönderilme zamanı: Cum Şub 28, 2025 6:55 am
gönderen muratca61
Kod:Tümünü seç Kopyala
emi ajax ile değilde Devamını Oku butonuna tıkladığımızda sayfayı yenileme esnasında yapsın.
dosya klasör yapısı
Kod:Tümünü seç Kopyala
wp-content/
└── plugins/
└── devamoku/
├── devamoku.php
└── style.css
Kod:Tümünü seç Kopyala
<?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
Gönderilme zamanı: Cum Şub 28, 2025 7:07 am
gönderen muratca61
devamoku.php
Kod:Tümünü seç Kopyala
<?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
Gönderilme zamanı: Cum Şub 28, 2025 7:30 am
gönderen muratca61
son iyi kod
Kod:Tümünü seç Kopyala
<?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
Gönderilme zamanı: Cum Şub 28, 2025 8:07 am
gönderen muratca61
SON EN İYİ KOD
Kod:Tümünü seç Kopyala
<?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
Gönderilme zamanı: Cum Şub 28, 2025 9:58 am
gönderen muratca61
deepseek son mükerrer kayıt içeriği düzenleme
Kod:Tümünü seç Kopyala
<?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');