چگونه از زمینه های دلخواه یا Custom Fields استفاده کنیم؟

در این پست آموزشی با ساختار Custom Fields(زمینه های دلخواه، فیلدهای سفارشی) آشنا خواهید شد، به کمک این قابلیت می توانید اطلاعات موردنیاز و اضافی مثل آدرس ایمیل، نام کتاب، سال انتشار، قیمت، تعداد صفحات، مشخصات نویسنده، تاریخ آخرین بروزرسانی مطلب و … را به پست ها و صفحات وردپرس اضافه کنید.

به این فیلدهای اطلاعاتی اصطلاحا متادیتا(Metadata یا Post Metadata) نیز گفته می شود، متادیتاها از دو بخش اصلی نام کلید(key Name) و مقدار کلید(Key Value) تشکیل شده اند. به طور کلی به دو طریق می توانید از فیلدهای سفارشی استفاده کنید:

  1. نصب پلاگین قدرتمندی مثل Advanced Custom Fields
  2. به صورت دستی و سپس اعمال تغییرات موردنیاز در قالب یا پوسته سایت

ما در این مقاله آموزشی قصد داریم روش دوم اینکار را بررسی و پیاده سازی کنیم، پس با ما همراه باشید.

افزودن Custom Field از بخش مدیریت وردپرس

برای تعریف فیلدهای سفارشی لازم است که در هنگام ویرایش و یا ایجاد پست جدید از بخش “تنظیمات صفحه(Screen Options)” گزینه “زمینه های دلخواه” را انتخاب کنید، این قابلیت به صورت پیش فرض مخفی می باشد.

تنظیمات صفحه وردپرس

سپس در پایین ویرایشگر پست باکس زمینه های دلخواه(Custom Fields Meta Box) نشان داده خواهد شد. همانطور که ملاحظه می کنید یک فیلد سفارشی از دو بخش نام و مقدار تشکیل شده است. به کمک لیست کشویی “گزینش” می توانید از فیلدهایی که قبلا در سایر پست ها تعریف شده اند استفاده کنید.

باکس افزودن custom fields

برای تعریف یک فیلد اطلاعاتی جدید کافی است که بر روی “افزودن” کلیک نمائید، پس از وارد کردن نام و مقدار موردنظر با گزینه “افزودن زمینه دلخواه(Add Custom Field)” تغییرات را ثبت کنید.

افزودن زمینه دلخواه

در نهایت پس از ذخیره یا انتشار پست مربوطه این فیلدهای اطلاعاتی در جدول wp_postmeta ذخیره خواهند شد.

جدول wp_postmeta

نمایش Custom Field در قالب سایت

برای استفاده از فیلدهای سفارشی باید فایل های قالب را تغییر دهید، به طور معمول برای اعمال تغییرات در صفحه اصلی سایت از فایل index.php استفاده می شود، اگر می خواهید فیلدهای سفارشی را در صفحه مشاهده مطالب فراخوانی کنید کدهای موردنظر را در single.php قرار دهید. محل قرارگیری کدها کاملا به ساختار قالب و هدف شما بستگی دارد. در هر صورت مواردی که در ادامه بررسی خواهیم کرد را در داخل حلقه while قرار دهید.

<?php 
   while ( have_posts() ) {
	the_post(); 
}     
?>

برای آشنایی دقیق تر با فایل های قالب پیشنهاد می کنیم مطلب مفهوم Template Hierarchy در وردپرس را مطالعه فرمائید.

پس از اینکه فیلدهای اطلاعاتی موردنیاز را تعریف کردید به کمک تابع get_post_meta مقادیر آنها را فراخوانی می کنیم. ساختار و پارامترهای این تابع به صورت زیر می باشد:

get_post_meta( int $post_id, string $key = ”, bool $single = false )

  1. post_id$ : شناسه یا آی دی Post
  2. key$ : نام Custom Field که به صورت پیش فرض فاقد مقدار می باشد.
  3. single$ : این پارامتر می تواند true یا false باشد، در صورتی که true پاس داده شود مقدار کلید به صورت رشته(String) بازگردانده خواهد شد.

برای نمایش مقدار extra_title بدین صورت عمل کردیم:

$extra_title = get_post_meta( get_the_ID(), 'extra_title', true );
 if ( !empty( $extra_title ) ){
     echo '<p class="extra">' . $extra_title .'</p>';
}

خروجی نهایی نیز در تصویر زیر نشان داده شده است.

تابع get_post_meta

اگر به پارامتر آخر تابع get_post_meta مقدار false ارسال شود مقادیر کلید به صورت آرایه رشته ای بازگردانده خواهد شد. این قابلیت برای مواقعی مناسب است که می خواهید با یک کلید یکسان مقدارهای متفاوتی را ذخیره کنید. به عنوان مثال در تصویر زیر برای کلید email_list سه value متفاوت ثبت شده است.

آرایه ای از فیلدهای سفارشی

نحوه فراخوانی تابع get_post_meta نیز بدین صورت است:

$email_list = get_post_meta( get_the_ID(), 'email_list', false );
  if ( !empty( $email_list ) ){
	echo '<h5>لیست ایمیل</h5><ul>';
	foreach ( $email_list as $email ) {
	    echo '<li>'. $email . '</li>';
	}
	echo '</ul>';
 }

و خروجی کار به صورت زیر می باشد.

پارامترهای تابع get_post_meta

افزودن Custom Field از طریق کدنویسی

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

به عنوان مثال افزونه WP-PostViews که برای نمایش تعداد بازدیدهای مطالب وردپرس استفاده می شود فیلد views(شمارنده بازدیدها) را به صورت خودکار به تمامی پست ها و مطالب منتشر شده اضافه می کند، مقادیر این فیلد در جدول wp_postmeta قابل مشاهده است.

افزونه wp_postviews

با این مقدمه وارد بحث اصلی یعنی کدنویسی می شویم، به منظور افزودن، ویرایش و حذف فیلدهای سفارشی می توانید از توابع زیر استفاده کنید:

۱- تابع add_post_meta

ساختار و پارامترهای این تابع به صورت زیر می باشد:

add_post_meta( $post_id, $meta_key, $meta_value, $unique )

در تابع فوق سه پارامتر ابتدایی اجباری هستند و باید شناسه پست، نام و مقدار کلید را مشخص کنید. اگر به پارامتر unique مقدار true پاس داده شود در صورتی که meta_key ارسالی از قبل در جدول wp_postmeta وجود داشته باشد اطلاعاتی ثبت نخواهد شد. مقدار این پارامتر به صورت پیش فرض false می باشد.

add_post_meta( get_the_ID(), 'likeCounts', '10', true );

۲- تابع update_post_meta

update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );

در این تابع سه پارامتر ابتدای اجباری هستند، در صورتی که meta_key از قبل در جدول wp_postmeta وجود نداشته باشد مشابه add_post_meta عمل خواهد کرد وگرنه مقدار کلید را به مقدار جدید آپدیت می کند. پارامتر آخر هم مشابه if عمل می کند و در صورتی آپدیت اعمال خواهد شد که مقدار ذخیره شده در دیتابیس با مقدار prev_value برابر باشد.

update_post_meta( get_the_ID(), 'authorName', 'saeid', 'hamid' );

۳- تابع delete_post_meta

delete_post_meta( $post_id, $meta_key, $meta_value )

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

delete_post_meta( get_the_ID(), 'related_posts' );

بررسی یک مثال

برای درک بهتر مباحث گفته شده آنها را در قالب یک مثال بررسی می کنیم، این نمونه مثال تقریبا مشابه افزونه wp_postviews عمل می کند.

ابتدا کدهای زیر را در فایل functions.php قرار می دهیم:

function my_PostViews($post_ID) {
     $meta_key = 'my_post_views_counter';
     $count = get_post_meta( $post_ID, $meta_key, true );
    if( $count == '' ){
        $count = 1;
        delete_post_meta( $post_ID, $meta_key );
        add_post_meta( $post_ID, $meta_key, $count );
        return $count . ' بازدید';
   }else {
        $count++;
        update_post_meta( $post_ID, $meta_key, $count );
        return $count . ' بازدید';
    }
}

تابع my_PostView شناسه یا ID پست را به عنوان ورودی دریافت می کند. از فیلد my_post_views_counter برای ذخیره تعداد بازدیدها استفاده شده است. تابع get_post_meta نیز مقدار کلید را بازیابی می کند، در صورتی که هنوز مقداری برای آن ثبت نشده باشد با ۱ مقدار دهی اولیه خواهد شد. با کمک تابع delete_post_meta هرگونه Custom Field مشابه را حذف می کنیم.

در نهایت به منظور فراخوانی و استفاده از تابع my_PostViews و نمایش تعداد بازدیدها تکه کد زیر را به single.php اضافه می کنیم، این کد هر دفعه که صفحه مشاهده مطالب رفرش شود اجرا می گردد.

if( function_exists( 'my_PostViews' ) ) {
  echo my_PostViews( get_the_ID() );
}

جمع بندی

انعطاف پذیری، قابلیت سفارشی سازی و سادگی استفاده از جمله مشخصه هایی هستند که باعث محبوبیت بالای وردپرس شده است. Custom Field به شما این قابلیت را می دهد تا انواع متادیتا را به پست ها و صفحات خود اضافه کنید. به عنوان مثال می توانید یک فیلد سفارشی تعریف کنید که امتیاز مربوط به هر پست را نشان دهد یا حتی امکان Like یا dislike مطالب را برای بازدیدکنندگان وب سایت تان فراهم کنید. هر چند با افزونه های بسیاری که در مخزن وردپرس وجود دارد می توانید موارد گفته شده را به راحتی انجام دهید اما هدف ما بررسی مباحث تکنیکال بوده است.

نظرات و سوالات کاربران

پاسخی بگذارید

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