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

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

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

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

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');
//add extra fields to category edit form callback function
function extra_category_fields( $tag ) { //check for existing featured ID
$t_id = $tag->term_id;
$cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
<span class="description"><?php _e('Image for category: use full url with '); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
<textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
<span class="description"><?php _e('extra field'); ?></span>
</td>
</tr>
<?php
}

در مثال بالا چهار فیلد جدید اضافه کرده ایم. برای نگهداری مقادیر فیلدهای جدید از آرایه Cat_meta[key] استفاده کرده ایم. از آرایه استفاده کرده ایم تا همه ویژگی ها را بتوانیم به صورت یک سطر در جدول تنظیمات ذخیره کنیم و برای هر فیلد نیاز به یک سطر جداگانه نباشد.

گام دوم – ذخیره کردن مقدار فیلدها

مقادیر فیلدهای جدید دسته بندی ها باید هنگام ذخیره کردن تغییرات ، در بانک اطلاعاتی ثبت شوند برای این کار تابع edited_category را به تابع جدیدی به این منظور قلاب می زنیم. در این تابع همه فیلدهای جدید در آرایه قرار گرفته و آرایه یکجا ثبت شده است.

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');
// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
if ( isset( $_POST['Cat_meta'] ) ) {
$t_id = $term_id;
$cat_meta = get_option( "category_$t_id");
$cat_keys = array_keys($_POST['Cat_meta']);
foreach ($cat_keys as $key){
if (isset($_POST['Cat_meta'][$key])){
$cat_meta[$key] = $_POST['Cat_meta'][$key];
}
}
//save the option array
update_option( "category_$t_id", $cat_meta );
}
}

همان طور که در قطعه کد فوق می بینید مقادیر فیلدهای جدید دسته بندی را با متایی به نام category_ID ذخیره کرده ایم. ID همان شناسه دسته بندی است و بعدا برای خواندن ویژگی های دسته بندی مثلاً با شناسه ۲۵ دستور زیر را اجرا خواهیم کرد:

<?php $cat_data = get_option('category_25'); ?>

گام سوم – استفاده از فیلدهای جدید دسته بندی در قالب وردپرس

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

<?php
//first get the current category ID
$cat_id = get_query_var('cat');
//then i get the data from the database
$cat_data = get_option("category_$cat_id");
//and then i just display my category image if it exists
if (isset($cat_data['img'])){
echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

نمایش قابل چاپ