وباکا

آموزش تخصصی برنامه نویسی وب

بخش سوم – ساخت افزونه وردپرس برای اضافه کردن فیلد جدید به پست

در این آموزش قصد داریم تا روش ساخت افزونه را با یک مثال آموزش دهیم. در این مثال افزونه ای برای اضافه کردن یک جعبه مشخصات سفارشی به صفحه افزودن/ویرایش پست در پانل مدیریتی وردپرس پیاده سازی می کنیم.

جعبه های متای سفارشی برای پست ها

جعبه های متای سفارشی به کاربران اجازه می دهد تا مشخصات دلخواه خودشان را برای پست تعیین کنند ، بعنوان مثال ممکن است در یک سایت آموزشی بخواهید برای هر مطلب نام منبع آن یا کلمات کلیدی آنرا ذخیره کنید. برای این کار می توانید این فیلدها را به صفحه افزودن/ویرایش پست اضافه کنید.

وردپرس اجازه می دهد تا جعبه های مشخصات (meta) برای پست به صفحه افزودن/ویرایش پست اضافه کنیم. از این قابلیت برای ساخت افزونه خودمان استفاده خواهیم کرد. در این نمونه کار ، یک افزونه افزایش سئو برای وردپرس ایجاد کرده و در صفحه افزودن پست یک جعبه دارای یک ورودی ناحیه متنی(textarea) برای دریافت کلمات کلیدی پست اضافه کرده، توابع اقدام و فیلترهای لازم برای ذخیره سازی آن در بانک اطلاعاتی و نمایش آن در پوسته وردپرس را پیاده سازی خواهیم کرد.

مراحل ساخت افزونه

1- ابتدا یک پوشه با نام دلخواه در مسیر wp-content/plugins وردپرس ایجاد کنید. (ما نام پوشه را seo-meta-box گذاشته ایم.)

2- سپس یک فایل همنام با پوشه و با پسوند php در داخل پوشه افزونه ایجاد کنید. (فایل ما باید دارای نام seo-meta-box.php باشد)

3- در ابتدای فایل افزونه محتوای زیر را قرا می دهیم که شامل مشخصات افزونه می باشد:
<?php
/*
Plugin Name: custom-meta-box
Plugin URI: https://blog.webaca.ir/wp-plugins//
Description:a test for wp plugins .
Version: 1.0
Author:M Mohammadi
Author URI: mohammadi.sm@gmail.com
Text Domain: wp-postviews
*/

4- ایجاد جعبه ی مشخصات

اضافه کردن جعبه متا برای پست

برای ساخت جعبه ی مشخصات از تابع add_meta_box در وردپرس استفاده می کنیم. این تابع فقط برای ثبت و نمایش جعبه های مشخصات استفاده می شود:

بنابراین قطعه کد زیر را باید به انتهای فایل seo-meta-box.php اضافه کنیم:

<?php

function add_seo_meta_box()
{
 add_meta_box("seo-meta-box", "ویژگی های سئو", "seo_meta_box_markup", "post", "side", "high", null);
}
add_action("add_meta_boxes", "add_seo_meta_box");
function seo_meta_box_markup($object)
{
 }
?>


همانطور که در مثال فوق دیده می شود، تابع add_meta_box باید داخل قلاب add_meta_boxes فراخوانی شود. این تابع دارای هفت پارامتر ورودی است

1- اولین پارامتر شناسه جعبه ی متا است و نباید با اجزای دیگر وردپرس همنام باشد.
2- دومین پارامتر، عنوان جعبه است که فارسی هم می تواند باشد.
3- سومین پارامتر نام تابعی را تعیین می کند که اجرای جعبه را ایجاد می کند.
4- چهارمین پارامتر تعیین می کند که جعبه ی متا در کدام صفحه دیده شود (post:  صفحه پست و page: صفحه برگه)
5- پنجمین پارامتر موقعیت نمایش جعبه را نشان می دهد. (side : ستون کناری )
6- ششمین پارامتر اولویت جعبه را تعیین می کند (high : بالا – پس جعبه قبل از دیگر جعبه ها نمایش داده خواهد شد)
7- هفتمین آنها ، لیست پارامترهای ارسالی به تابع ساخت محتوای جعبه را تعیین می کند ( null : پوچ – پرامتر ندارد)
 

پس از ثبت تغییرات فایل seo-meta-box.php و فعال کردن افزونه در مدیریت وردپرس صفحه افزودن پست بصورت زیر تغییر خواهد کرد:
ساخت افزونه برای وردپرس- افزودن جعبه متا برای پست ها

 

اضافه کردن فیلدهای جدید برای پست در جعبه متا

برای اضافه کردن فبلدها باید تابع سازنده اجرای جعبه متا را (در این مثال تابع seo_meta_box_markup)  را بصورت زیر بازنویسی کنیم:

در این مثال یک ورودی ناحیه متنی (textarea) برای دریافت کلمات کلیدی از کاربر برای پست در جعبه ی متا قرار داده شده است:

 
function seo_meta_box_markup($object)
{
wp_nonce_field(basename(__FILE__), "meta-box-nonce");?>
<div>
<label for="seo-keywords">واژه های کلیدی </label>
<textarea cols="32" rows="5" name="seo-keywords" ><?php echo get_post_meta($object->ID, "seo-keywords", true); ?></textarea></div>
<?php
}

توجه داشته باشید که ابتدا باید تابع wp_nonce_field فراخوانی شود تا از حمله CSRF هنگام ارسال فرم جلوگیری شود.

پس از ذخیره کردن تغییرات و بازکردن صفحه پست جدید در پانل مدیریتی وردپرس شکل زیر را خواهیم داشت:

ساخت افزونه برای وردپرس- افزودن جعبه متا برای پست ها

 

ذخیره کردن داده های متا

افزونه ما تا حالا فقط ظاهر صفحه مشخصات پست ها را تغییر می دهد و اجازه می دهد برای هر پست فیلد جدید برای کلمات کلیدی آن را وارد کنیم. در ادامه افزونه را کامل کرده و دستوراتی برای ذخیره کردن مقدار فیلد در بانک اطلاعاتی و نیز نمایش مقدار فیلدها در پوسته را آموزش خواهیم داد.

کد زیر هنگامی که کاربر روی گزینه ذخیره پیس نویسی یا انتشار کلیک می کند باید اجرا شود . بنابراین کد زیر را فایل seo-meta-box.php قرار می دهیم.

 
// saving data
function save_seo_meta_box($post_id, $post, $update)
{
if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__)))
return $post_id;if(!current_user_can("edit_post", $post_id))
return $post_id;if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE)
return $post_id;$slug = "post";
if($slug != $post->post_type)
return $post_id;
$seo_keywords = "";if(isset($_POST["seo-keywords"]))
{
$seo_keywords = $_POST["seo-keywords"];
}
update_post_meta($post_id, "seo-keywords", $seo_keywords);}add_action("save_post", "save_seo_meta_box", 10, 3);

در کد فوق تابع ما save_seo_meta_box به تابع وردپرس  save_post قلاب شده است . پس هنگام ذخیره سازی پست اجرا خواهد شد. و قطعه کد زیر بررسی می کند اگر در فرم ارسالی مشخصات پست ورودی مورد نظر ما وجود داشته باشد متای پست اصلاح می شود:

if(isset($_POST["seo-keywords"]))
{
$seo_keywords = $_POST["seo-keywords"];
}
update_post_meta($post_id, "seo-keywords", $seo_keywords);

نمایش دادن داده ها در پوسته

می خواهیم در افزونه سئوی فوق پس از اینکه برای پست ها فیلد اضافه کردیم و به آن مقدار دادیم، هنگام نمایش پست در مرورگر بتوانیم مقدار فیلد را نمایش دهیم. برای این کار :

یک تابع جدید به فایل افزونه (seo-meta-box.php) اضافه می کنیم که با دریافت کد شناسه پست، داده مورد نظر را از بانک اطلاعاتی خوانده و با فرمت خواسته شده برگرداند:
function seo_get_keywords($post_id)
{
$keywords = get_post_meta($post_id, "seo-keywords", true);
$keywords= str_replace('،' ,',',$keywords);
return $keywords;
}

 

این تابع را می توان در هر جای پوسته فراخوانی کرد. ما این تابع را برای نمایش لیست کلمات کلیدی پست در تگ meta استفاده کرده ایم

 
<meta name="keywords" content="<?php echo seo_get_keywords(get_the_ID()); ?>">

دریافت فایل کامل شده افزونه برای اضافه کردن کلمات کلیدی به پست ها در وردپرس(seo-meta-box )

 موفق باشید .  در صورت وجود هر گونه اشکال یا مشکل در نصب و اجرای افزونه با ما در میان بگذارید..

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب