کاتالوگ آنفایو
051-38400603 09100054057

فیلد

افزودن فیلدهای اضافی به دسته های وردپرس
سه‌شنبه 8 سپتامبر 15

افزودن فیلدهای اضافی به دسته های وردپرس

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

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

ادامه مطلب

هاست پرسرعت سرور ایران

مشاهده پلن‌ها
آنفایو

استعلام قیمت بصورت آنلاین

تلگرام