این اواخر بر روی طراحی قالب وردپرس یکار می کردم که نیاز به برخی اصلاحات در مورد صفحه ویرایش دسته داشت تا برای هر دسته ، تصویر متفاوتی نشان داده شود . اما وردپرس اکنون در پایگاه داده ی خود جدولی برای اطلاعات تگ متا و یا دسته ندارد . نمی دانم چرا اما هرگز دوست نداشتم جدول خودم را به این پایگاه داده اضافه کنم. بنابراین تصمیم گرفتم با جدول گزینه های ) option table )وردپرس کار کنم. قبل از شروع کار باید بگویم که شما میتوانید از این دستورات برای دسته ها ، تگ ها(برچسب) و یا هر طبقه بندی که خودتون دوست داشتید استفاده کنید اما من در این مثال کار را بر روی دسته ها انجام میدم .

درج فیلد برای دسته های وردپرس

خوب اجازه دهید کار را شروع کنیم :

خوب اولین کاری که باید انجام دهیم ، اضافه کردن زمینه های اضافی به فرم ویرایش دسته ها با استفاده از Hook  ( قلاب) 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 و با تابعی که از طریق هر کدام از  زمینه های ارائه شده اجرا می شود انجام داد . می توان این زمینه ها را با تابع update_option در پایگاه داده قرار داد:

<?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  ، آی دی و نشانه ی دسته ی خاصی است که ما آن را ویرایش نموده ایم . بنابراین ما می توانیم تمامی این اطلاعات را با استفاده از تابع get_option در یک افزونه و یا فایل قالب فراخوانی کنیم :

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

همانطور که در شروع این آموزش ذکر  شد ، من نیاز داشتم برای هر دسته تصویر متفاوتی داشته باشم . بنابراین در چنین مواردی می توان چند خط مانند کد زیر به category.php قالب وردپرس اضافه  کرد . این کد درست بعد از خطی اضافه خواهد شد که عنوان دسته قرار دارد :

<?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>';
}

امیدوارم از این آموزش لذت کافی را برده باشید . همواره با آموزش های طراحی قالب وردپرس آنفایو همراه باشید.