این اواخر بر روی طراحی قالب وردپرس یکار می کردم که نیاز به برخی اصلاحات در مورد صفحه ویرایش دسته داشت تا برای هر دسته ، تصویر متفاوتی نشان داده شود . اما وردپرس اکنون در پایگاه داده ی خود جدولی برای اطلاعات تگ متا و یا دسته ندارد . نمی دانم چرا اما هرگز دوست نداشتم جدول خودم را به این پایگاه داده اضافه کنم. بنابراین تصمیم گرفتم با جدول گزینه های ) 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 } ?>
همانطور که می بینید ، من 4 زمینه جدید اضافه کردم و تمامی این زمینه ها در آرایه ی 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>'; }
امیدوارم از این آموزش لذت کافی را برده باشید . همواره با آموزش های طراحی قالب وردپرس آنفایو همراه باشید.
ادامه مطلب