آموزش ساخت متاباکس در وردپرس

آموزش ساخت متاباکس در وردپرسسلام؛
در این قسمت از آموزش وردپرس به تحلیل و بررسی متا باکس ها و نحوه ایجاد آنها در وردپرس خواهیم پرداخت.
با ما همراه باشید…

متا باکس چیست؟

متاباکس ها (MetaBox) در وب سایت های وردپرسی در واقع بخش های دلخواهی در نوشته ها و برگه های شما در وب سایت هستند که دارای فیلدهای ویژه ای برای دریافت اطلاعات هستند. برخی متاباکس های پیشفرض وردپرس عبارتند از: تصویر شاخص، دسته ها، انتشار و….
حتما دیده اید که در برخی موارد با افزودن افزونه خاصی به وب سایت های وردپرسی مانند yoast wordpress seo ، در صفحه افزودن نوشته در قسمت پیشخوان وردپرس برگه متاباکس جدیدی اضافه می کند و یا با فعال کردن تصویر شاخص در سایت وردپرسی، متاباکس تصویر شاخص اضافه خواهد شد.که این موارد استقاده های متاباکس در وب سایت های وردپرسی هستند.
برای درک بهتر این موضوع مثالی برای شما می زنم فرض کنید می خواهید یک وب سایت فروشگاهی با استفاده از سیستم مدیریت محتوای وردپرس ایجاد کنید. شما وردپرس را نصب کرده و محصولات را از قسمت نوشته ها وارد می کنید و در این هنگام می خواهید که هنگام نوشتن محصول، فیلد های اضافه ای برای دریافت مشخصات محصول وجود داشته باشد: برای مثال فیلد رنگ، اندازه، قیمت ، گالری تصاویر و…. حال این فیلد ها وجود ندارند.چه باید کرد؟ در این صورت می توانید از متاباکس وردپرس استفاده کنید.

آموزش ایجاد متاباکس در وردپرس

وردپرس برای اضافه کردن متا باکس ها، در صفحه ی مدیریت، به سادگی یک تابع ارائه می کند: add_meta_box.
وارد کردنCODEX برای این تابع به خوبی انجام شده است، اما در اینجا یک مرور کوتاه بر آن آمده است. این یک نمونه است:

$id به عنوان ID html کد باکس قرار می گیرد. این کار در صورتی که شما در حال بارگذاری CSS سفارشی یا جاوا اسکریپت در صفحه ی ویرایش به منظور رسیدگی به گزینه ها هستید، بسیار مفید است. در غیر این صورت، این امرچندان هم مهم نیست.
$title در بالای متا باکس نشان داده شده است.
$callback تابعی است که در واقع از متا باکس خروجی می گیرد. این موضوع را در مرحله ۲ مورد بررسی قرار خواهیم داد.
$page جایی است که می خواهید متا باکس در آنجا نمایش داده شود. این باید به یک “post” و یا یک “page” و یا ” some_custom_post_type ” مرتبط باشد.
$context جایی است که متا باکس نمایش داده می شود. گزینه ی “normal” آن را در زیر ویرایشگر پست قرار می دهد. گزینه ی “side” آن را به نوار کناری سمت راست صفحه ی ویرایش منتقل می کند (به وسیله ی دسته بندی ها، تگ ها و غیر). گزینه ی “advanced” نیز باکس را در همان ستونی که ویرایشگر پست وجود دارد، قرار می دهد.
$priority به وردپرس می گوید که مکان متا باکس در چه ناحیه ای باشد. گزینه های “high”، “default” یا “low” به ترتیب متا باکس ها را در نزدیکی بالای صفحه، در موقعیت طبیعی آنها و یا در پایین صفحه قرار می دهد. از آنجایی که همه ی متا باکس ها قادر به کشید شدن هستند، $priority کار چندان بزگی نیست.
سرانجام $callback_args اجازه می دهد تا داده هایتان را به شکل یک آرایه به تابع $callback منتقل کنید. ما قصد نداریم از آن در این اینجا استفاده، اما می تواند برای انتقال برخی داده ها به متا باکس مفید باشد. فرض کنید که افزونه ی شما چندین گزینه داشت که محتویات نمایش داده شده در متا باکس ها را تحت تاثیر قرار می داد. شما می توانید اطلاعات این گزینه ها را از طریق آرایه ی $callback_args منتقل می کند.
بنابراین، شکل add_meta_box ما شبیه به این خواهد بود.

نمی توانیم این را به تنهایی در فایل افزونه استفاده کنید. نتیجه ی انجام این کار، صفحه ی سفید مرگ و خطای مصیبت بار PHPمثل: فراخوانی به تابع تعریف نشده، خواهد بود. چرا؟ زیرا قبل از آن وردپرس بارگذاری شود، تابع add_meta_box را فراخوانی کرده بودیم. بنابراین نیاز داریم که از یک قلاب وردپرس استفاده کنیم، که بخشی از API پلاگین است. در واقع، توابع به یک عملکرد داده شده به وردپرس یا قلاب فیلتر، قلاب می شود، بنابراین زمانی که این قلاب بارگذاری شود، این توابع شروع به کار خواهند کرد. با پیچیدن تماس add_meta_box ما در یک تابع، و سپس اتصال آن تابع به قلاب عملکرد add_meta_boxes، از خطاهای مصیب بار جلوگیری خواهیم کرد.
کد ما برای اضافه کردن متاباکس به صفحه ی پستهایمان، چیزی شبیه به این خواهد بود:

برای اضافه کردن متا باکس کد بالا کافی است، اما حالا باید از چیزی خروجی بگیریم و بخش اضافه کنیم. این فقط یک نوع کد HTML است که برای نمایش دادن اطلاعات ذخیره شده، با کمی PHP مخلوط شده است. نیازی به دخالت دادن تگ فرم ها نداریم زیرا که وردپرس این کار را برای ما انجام خواهد داد.
رشته ای را که ما به add_meta_box به عنوان $callback انتقال دادیم به یاد دارید؟ در حال حاضر می خواهم یک تابع با همین نام یجاد کنیم. این تابع از تمام چیز هایی که در متا باکس نمایش داده می شود، مراقبت خواهد کرد.

ما قصد داریم بخش های مختلفی را به متا باکسهایمان اضافه کنیم: یک ورودی متن، یک منوی کرکره ای و یک جعبه ی تیک. اجازه دهید با ورودی متن شروع کنیم.

اما چطور است که واقعا اطلاعاتی را نمایش دهیم؟ ما این داده ها را با استفاده از تابع update_post_meta در جدول wp_postmeta ، ذخیره می کنیم. این تابع دارای دو تابع مرتبط با آن به نام های get_post_meta و get_post_custom است، که از wp_postmeta اطلاعات کسب می کند. get_post_meta تنها از یک کلید اطلاعات کسب می کند، در حالی که get_post_custom از همه ی آنها اطلاعات کسب خواهد کرد. از آنجا که ما واقعا تنها از یک بخش استفاده می کنیم، اجازه دهید از get_post_meta استفاده کنیم.
همچنین توجه داشته باشید که تابع add_meta_box به callback ما یک متغیر $post را منتقل می کند که یک موضوع پست است.

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

با اضافه کردن بخش دوم، تماس get_post_meta را به get_post_custom تغییر داده ایم، که یک آرایه شرکت پذیر از همه ی کلید ها و ارزش های سفارشی پست ها را برمی گرداند. سپس ما از طریق نام بخش ها به آنها دسترسی پیدا می کنیم. بیانیه ی نوع سوم، کد های مارا در برابر دادن هشدارهای PHP محافظت می کند (شاخص های تعریف نشده و از این قبیل)
در منو کرکره ای، قصد داریم که از یکی از مفید ترین توابع وردپرس استفاده کنیم: selected . این تابع ارزش اول یعنی اطلاعات ذخیره شده ی ما را با ارزش دوم یعنی ویژگی
مقایسه می کند. اگر آنها یکی باشند، این تابع، selected=”selected” را منعکس می کند، که باعث می شود این ارزش در منو کرکره ای نمایش داده شود. بسیار شیرین است و همچنین ما را از نوشتن تعداد زیادی از توابع و بیانیه های نوع سوم نجات خواهد داد. شما همچنین می توانید از تابع selected() با دکمه های رادیویی استفاده کنید.

اضافه کردن جعبه ی تیک (Check-box)

باز هم وردپرس تابع مفید checked() را ارائه می دهد. این کار دقیقا شبیه به selected() ارزش اول (داده های ذخیره شده ی ما) را با ارزش دوم مقایسه کرده و اگر آنها یکی باشند، checked=”checked” را منعکس می کند.
wp_nonce_field دو بخش پنهان را به متا باکس های ما اضافه می کند. یکی از آنها nonce است. آنها رشته های تصادفی از اعداد هستند که برای هر کاربر بر اساس هر وبلاگ به مدت ۲۴ ساعت معتبر هستند. Nonce ها راهی برای تأیید مقصود هستند، و آنها اطمینان حاصل می کنند که وردپرس هیچ کاری انجام نمی دهد مگر اینکه درخواست آن از یک مکان بسیار خاص آمده باشد. به عبارت دیگر، ما نمی خواهیم که با اجرا کردن تابع ذخیره شده ی خود (مرحله ی سوم را بررسی کنید) در جای دیگری بجز در قلاب save_post، به طور تصادفی اطلاعاتمان را به روز رسانی کنیم، بنابراین قبل از انجام هر کاری از معتبر بودن Nonce مطمئن شویم.

ذخیره کردن اطلاعات

تابع cd_meta_box_save یک استدلال یعنی post id را دریافت خواهد کرد، و مراقب تمیز کردن و ذخیره کردن همه ی اطلاعات ما است. قلاب save_post پس از به روز رسانی کردن و یا بعد از فشار دادن دکمه ی ذخیره کردن پیش نویس، اجرا خواهد شد. بنابراین ما به تمام اطلاعات $_POST دسترسی پیدا می کنیم، که شامل بخش متا باکس های ما در داخل تابع ذخیره سازی می باشد. به هر حال قبل از اینکه ما بتوانیم هر حرکتی بکنیم، باید سه کار انجام دهیم: بررسی کنید که آیا پست به طور خودکار ذخیره می شود، ارزش nonce را که قبلا ساختیم بررسی کنید، و چک کنید تا از این امر که کاربر فعلی در واقع می تواند پست را ویرایش کند مطمئن شوید.
در حقیقت اطلاعات ما را ذخیره می کند. هنگامی که می خواهید چیزی را به پایگاه داده های خود و یا سایت خود وارد کنید، قاعده ی شماره یک این است که: به کاربر اعتماد نکنید! حتی اگر آن کاربر خود شما هستید. برای رسیدن به این هدف، قبل از اینکه هر گونه اطلاعاتی را ذخیره کنیم، باید مطمئن شویم که هیچ چیز مخربی در آن وجود ندارد. خوشبختانه وردپرس تعدادی تابع برای اعتبار سنجی (data validation) اطلاعات ارائه داده است.
شما قبلا esc_attr() را در بالا دیده اید. این یکی را در HTML کد نویسی می کند. چرا باید از این استفاده کنیم؟ به این دلیل که کاربران نتوانند در متا باکس شما یکاسکریپت وارد کنند. اگر می خواهید به تگ های HTML معینی اجازه ورود دهید اما بقیه را محروم کنید، wp_kses می توانید این کار را انجام دهد. این کار دو استدلال را شامل می شود، اولی رشته ای است که شما می خواهید بررسی کنید و دومی یک آرایه ی شرکت پذیر از تگ های مجاز است. وردپرس تعداد زیادی ابزار اعتبار سنجی اطلاعات ارائه می دهد، فقط جرات استفاده کردن از آنها را داشته باشید!
ما قصد داریم که مراقبت از تاریخاطلاعات ذخیره شده ی خود از با استفاده از تابع update_post_meta استفاده کنیم. این کار سه استدلال را در بر می گیرد: ID یک پست، کلید متا، و ارزش.
همه ی آنچه که باید برای ایجاد متا باکس ها انجام می دادید! شما باید یک متا باکس با کارکرد کامل داشته باشید. ممکن است نمونه های دیگری را در حلقه ی وب از طریق چندین بخش پیدا کنید بدون اینکه واقعا اطلاعات را تمیز کند.
امیدوارم این آموزش مفید به واقع باشد.
موفق و پاینده باشید…

مطالب زیر را حتما مطالعه کنید
نظرات و دیدگاه ها

  • نظرات ارسال شده توسط شما، پس از تایید توسط مدیران سایت منتشر خواهد شد
  • نظراتی که حاوی تهمت یا افترا باشد منتشر نخواهد شد
  • نظراتی که به غیر از زبان فارسی یا غیر مرتبط با مطلب باشد منتشر نخواهد شد