پایگاه داده وردپرس

جدول محتوا

کلاسی به اسم wpdb وجود دارد که باعث میشه بدون درگیر شدن در مرحله اتصال به دیتابیس انواع کوئری crud به معنی (create – read – update – delete) را روی آن اجرا کرد

$var_name = $wpdb->get_results("SELECT * FROM $wpdb->users");

در قسمت $wpdb->users اینجا به جدول یوزرها اشاره شده، برای نمایش موقت میتوان از کد زیر استفاده نمود

echo '<pre>';
var_dump($var_name); 
echo '</pre>';

یا

echo $var_name[0]->user_login;

میتوان نوع نمایش خروجی را تنظیم کرد

$var_name = $wpdb->get_results("SELECT * FROM $wpdb->users",نوع خروجی);
OBJECT - مقدار پیش فرض 
ARRAY_A - خروجی آرایه کلید و مقدار
ARRAY_N - خروجی آرایه ایندکس و مقدار

اگر خروجی روی ARRAY_A تنظیم بشه برای نمایش به صورت زیر عمل میکنیم

echo $var_name[0]['user_login'];

اگر خروجی روی ARRAY_N تنظیم بشه برای نمایش به صورت زیر عمل میکنیم

echo $var_name[0][1];

برای نمایش با استفاده از حلقه

foreach ($var_name as $item) {
    echo $item->user_login;
}

جدول های غیر رسمی

برای انتخاب جدول هایی که پیش فرض وردپرس نیستند ابتدا در یک متغیر، prefix (همان پیشوند جدول که در ابتدای نصب تنظیم میکنیم که به صورت پیش فرض wp است) جداول را با نام جدول جمع میکنیم

$var_name =  $wpdb->prefix .'my_table_name';$var_name2 = $wpdb->get_results("SELECT * FROM {$var_name}");echo '<pre>';var_dump($var_name2); echo '</pre>';

برای گرفتن یک ردیف از get_row استفاده میکنیم

$var_name =  $wpdb->prefix .'my_table_name';

$var_name2 = $wpdb->get_row("SELECT * FROM {$var_name} WHERE id = 1");

echo '<pre>';
var_dump($var_name2); 
echo '</pre>';

*اگر از شرط استفاده نشود اولین سطر یا ردیف را برمیگرداند

*در این حالت میتواند نوع خروجی را مشخص کرد

برای گرفتن یک ردیف از get_col استفاده میکنیم

$var_name2 = $wpdb->get_col("SELECT column_name FROM {$var_name} WHERE id = 1",row_number);

column_name نام ستونی که میخواهیم اطلاعات را دریافت کنیم

row_number یعنی میتوان به آن مقدار عددی داد و از ان ردیف به بعد را در خروجی نمایش میدهد

get_var

زمانی که میخواهیم مثلا تعداد کاربران یا جمع سبد خرید یا میانگین بگیریم از get_var استفاده میکنیم

$var_name = $wpdb->get_var("SELECT COUNT(*) FROM {$table_name}");

echo $var_name;

یا مثلا برای جمع قیمت ها

$var_name = $wpdb->get_var("SELECT SUM(price col name) FROM {$table_name}");

*در اینحالت هم میتوان از row offset , colum offset استفاده کرد

insert کردن دیتا

متد prepare تا 99.99 درصد از sql injection جلوگیری میکنه

$name = 'عرفان';
$family = 'حسنی';
$tel = 1234567890;

$var_name = $wpdb->query($wpdb->prepare("INSERT INTO {$table_name} (name,family,tel) VALUES (%s,%s,%d)",$name,$family,$tel));

*name,family,tel این مقادیر نام ستون هایی هستن که در دیتابیس تعریف کردیم

*(%s,%s,%d) دراین قسمت اعتبار سنجی نوع داده ها را انجام میدیم یعنی %s یعنی استرینگ، %d یعنی اینتیجر و %f یعنی اعشاری یا فلوت

مقادیر ورودی را به صورت آرایه نیز میتوان پاس داد

$var_name = $wpdb->query($wpdb->prepare("INSERT INTO {$table_name} (name,family,tel) VALUES (%s,%s,%d)",[$name,$family,$tel]));

ولی حالت بهینه به صورت زیر میباشد

$data = ['name'=>$name,'family'=>$family,'tel'=>$tel];
$format = ['%s','%s','%d'];

$var_name = $wpdb->insert($table_name,$data,$format);

echo $wpdb->insert_id;

echo $wpdb->insert_id; آخرین آیدی را که insert شده را برمیگرداند

بروز رسانی (update)

$id = 23;
$name = 'احسان';
$family = 'کرمی';
$tel = 1234567890;
$var_name = $wpdb->query($wpdb->prepare("UPDATE {$table_name} SET name = %s,family = %s WHERE id = %d AND status = %d",$name,$family,$id,1));

*name,family,tel این مقادیر نام ستون هایی هستن که در دیتابیس تعریف کردیم

ساختار بهینه تر

$data = ['name'=>$name,'family'=>$family];
$where = ['id'=>1,'status' => 1];
$where = ['id'=>$id];
$format = ['%s','%s'];
$where_format = ['%d'];
$var_name = $wpdb->update($table_name,$data,$where,$format,$where_format);

حذف delete

$id = 2;
$var_name = $wpdb->query($wpdb->prepare("DELETE FROM {$table_name} WHERE id = %d ",$id));

حالت بهینه

$id = 2;
$where = ['id'=>$id];
$where_format = ['%d'];
$var_name = $wpdb->delete($table_name,$where,null);

*where , where_format هر دو اختیاری هستند ولی برای امنیت بیشتر بهتر است که تعیین شود

پاکسازی داده های ورودی

sanitize_text_field($var_name);

*$var_name حاوی دیتاهایی که باید پاکسازی شود

برای textarea از حالت زیر استفاده میشود

sanitize_textarea_field();
sanitize_email();

میتوان به صورت تو در تو نیز استفاده کرد مثلا تابع sanitize_text_field را داخل مقدار بالا قرار دهیم

wp_strip_all_tags();

تگ ها را ازبین میبرد

is_email($email);

در وردپرس برای تشخیص ایمیل از تابع بالا استفاده میشود، که مقدار true , false برمیگرداند

sanitize_title();

برای ساخت اسلاگ بیشتر کاربرد دارد و فاصله ها را با – پر میکند

sanitize_user();

برای ساخت نام کاربری استفاده میشه که مقدار true,false برمیگرداند که مشخص میکند این نام کاربری شامل کاراکتر هایی هست که وردپرس پشتیبانی میکنه

*موارد بالا روی وردودی تمرکز دارند و موارد زیر برای چک کردن دیتا هست وقتی از دیتابیس خوانده و میخواهد نمایش داده شود

esc_html(data);

تگ ها و کاراکتر ها را از کار می اندازد

esc_url();

اگر مقادیر مخرب در url باشد آن را حذف میکند

esc_js();

ایمن کردن js وقتی روی یک لینک کلیک میشود و یک کد js اجرا میکند

esc_attr();

زمانی که میخواهیم یک attribute را مقدار دهی کنیم از این تابع استفاده میکنیم

esc_textarea();

مثل تابع قبل ولی برای textarea چون چند خطی است

*این موارد esc در توسعه قالب و افزونه برای جلوگیری از xss , injection مهم هستند