ahgtasarim adlı üyeden alıntı: mesajı görüntüle
Başlangıç ID ile bitiş ID aralığına hangi değeri gireceğiz. url kısmına wp de yer alan kategorilerimi gireceğiz yoksa, direk yazını url sinimi gireceğiz. ayrıca bu URL kısmını admin panelie alırsanız daha kolay olur url belirlemek.
<?php

/*

Plugin Name: WP Veri Çekme

Description: Belirtilen ID aralığındaki WordPress yazılarını çeker ve yayınlar.

Version: 1.0

Author: R10

*/



// Eklenti sayfasını oluştur

function wp_remote_get_content_by_id_range_page() {

?>

<div class="wrap">

<h1>WP Veri Çekme</h1>

<form method="post">

<label for="api_url">URL Giriniz:</label>

<input type="text" id="api_url" name="api_url" required>



<label for="start_id">Başlangıç ID:</label>

<input type="number" id="start_id" name="start_id" required>

<label for="end_id">Bitiş ID:</label>

<input type="number" id="end_id" name="end_id" required>

<input type="submit" value="İçerikleri Çek ve Paylaş">

</form>

<?php

if (isset($_POST['api_url'], $_POST['start_id'], $_POST['end_id'])) {

$api_url = esc_url_raw($_POST['api_url']);

$start_id = intval($_POST['start_id']);

$end_id = intval($_POST['end_id']);



if ($start_id > 0 && $end_id >= $start_id) {

fetch_and_publish_content_by_range($api_url, $start_id, $end_id);

} else {

echo '<p>Lütfen geçerli bir başlangıç ve bitiş ID girin.</p>';

}

}

?>

</div>

<?php

}



// Belirtilen ID aralığındaki WordPress yazılarını çeken ve yayınlayan fonksiyon

function fetch_and_publish_content_by_range($api_url, $start_id, $end_id) {

// Belirtilen ID aralığındaki tüm geçerli yazıları çekmek için döngü

for ($id = $start_id; $id <= $end_id; $id++) {

// Belirtilen post ID'si için WordPress yazısını çekme

$target_api_url = trailingslashit($api_url) . 'wp-json/wp/v2/posts/' . $id;



// API kullanarak veri çekme

$response = wp_remote_get($target_api_url);



// Yanıtı kontrol etme

if (is_wp_error($response)) {

// Hata durumunda işlemleri burada ele alabilirsiniz.

continue; // Hata durumunda diğer ID'leri kontrol etmeye devam et

} else {

// Yanıt başarılı ise JSON verisini çözme

$post_data = json_decode(wp_remote_retrieve_body($response), true);



// Verinin beklenen yapısıyla ilgili kontrol

if (is_array($post_data) && isset($post_data['title']['rendered']) && isset($post_data['content']['rendered'])) {

// Başlık ve içerik alınabilir

$post_title = $post_data['title']['rendered'];

$post_content = $post_data['content']['rendered'];



// Yeni bir yazı oluşturma

$new_post = array(

'post_title' => $post_title,

'post_content' => $post_content,

'post_status' => 'publish',

);



// Yeni yazıyı ekleyerek ID'yi alın

$new_post_id = wp_insert_post($new_post);



if (is_wp_error($new_post_id)) {

// Ekleme hatası durumunda işlemleri burada ele alabilirsiniz.

continue; // Hatada diğer ID'leri kontrol etmeye devam et

}



// Yeni yazı başarıyla eklendiğinde bir mesaj yazdırabilirsiniz.

echo 'ID ' . $id . ' başarıyla çekildi ve yayınlandı.<br>';

} else {

// Veri beklenen yapıda değilse veya eksikse bir hata mesajı yazdırabilir veya işlem yapabilirsiniz.

echo 'ID ' . $id . ' için beklenen veri yapıda değil veya eksik.';

}

}

}

}



// Eklenti sayfasını admin menüsüne ekleyin

add_action('admin_menu', function () {

add_menu_page('WP Veri Çekme', 'WP Veri Çekme', 'manage_options', 'wp_remote_get_content_by_id_range', 'wp_remote_get_content_by_id_range_page');

});

?>

Benim de katkım olsun. URL i admin paneline ekledim.

ID yi bulabilmek için bu kodda veri çekmek istediğiniz url in sonuna wp-json/wp/v2/posts/ ekleyerek postların idlerini tespit etmeniz gerekiyor.

kodları not defterine yapıştırıp. dosyaya bir isim verin. (vericekme.php gibi) Sonrasında zip olarak sıkıştırıp wordpress admin panelinden eklentiler kısmında eklenti yükleme kısmından upload edebilirsiniz.

Sol taraftaki menüden eklenti ayarlarına erişebilirsiniz.