Kategoriler
WordPress

WordPress DB tabloda belirli alanları toplu olarak almak

WordPress post tablosundan belirli alanları toplu olarak almak ve kullanmakla ilgili.

WordPress veritabanında örneğin post tablosundaki tüm verilerin yani site içerisine girilmiş postların belli bir alanını toplu olarak almak bazen gerekebilir, bu durumda benim aşağıda yaptığım örnek kullanılabilir.

$type = 'post';
$args = array (
'post_type' => $type,
'post_status' => 'publish',
'posts_per_page' => -1,
'order' => 'DESC',
);
$temp = $wp_query; //Daha sonra kullanılmak üzere
$wp_query = null;
$wp_query = new WP_Query($args);
if ( $wp_query->have_posts() ) :
	while ($wp_query->have_posts()): $wp_query->the_post();
		echo get_post_field('post_name',get_post())."\n";
	endwhile; else: endif;
$wp_query = null;
$wp_query = $temp;  //Reset

Yukarıdaki örnekte ben post tablosundaki tüm girdilerin sadece “post_name” alanını almış oluyorum, istenen farklı tablodan farklı alanlar seçilip alınabilir(örn: post_title, ID, comments vs.) ayrıca aşağıdaki bir ek bir yöntemle de bu çıktıyı metin dosyası halinde önbellekleyerek kaydedebilirim:

header('Content-type:text/plain');
include_once $_SERVER['DOCUMENT_ROOT'].'/wp-config.php';
define('WP_USE_THEMES',false);
header('HTTP/1.1 200 OK');
http_response_code(200);
header('Status: 200 All rosy');

$cachefile = 'post_names.txt'; //dosya ismi
$cachetime = 31556926; /önbellek süresi (saniye)
if(file_exists($cachefile) 
&& time() - $cachetime < filemtime($cachefile)){
	include($cachefile); exit();
}
ob_start();
$type = 'post';
$args = array (
'post_type' => $type,
'post_status' => 'publish',
'posts_per_page' => -1,
'order' => 'DESC',
);
$temp = $wp_query; //Daha sonra kullanılmak üzere
$wp_query = null;
$wp_query = new WP_Query($args);
if ( $wp_query->have_posts() ) :
	while ($wp_query->have_posts()): 
	$wp_query->the_post();
		echo get_post_field('post_name',get_post())."\n";
	endwhile; else: endif;
$wp_query = null; 
$wp_query = $temp;  //Reset
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush();

Daha sonra bu önbelleğe yani sunucu diskine kaydettiğimiz dosyayı ister direkt olarak istersek de fonksiyonumuzun bulunduğu dosyayı çağırarak kullanmak mümkün, bu sistem çok büyük WordPress veritabanına sahip web sitlerinde sorunsuz çalışmakla birlikte etkileşimin yoğun olduğu WordPress sitelerinin veritabanı sorgularını azaltarak maliyet düşüşü sağlar, önbellekleme süresini değiştirebilir ihtiyaçlara göre geliştirilebilir, farklı fonksiyonlar ile birlikte ve eklenti geliştirmekte kullanılabilir.

WordPress konusunda tüm sorularınızı Twitter’dan bana sorabilirsiniz.