ฉันโพสต์วิธีการเกี่ยวกับเรื่องนี้ในสัปดาห์ที่แล้วhttp://en.bainternet.info/2011/wordpress-category-extra-fields
หวังว่านี่จะช่วยได้
Ohad
นี่คือรายละเอียดของการโพสต์:
สิ่งแรกที่เราต้องทำคือเพิ่มฟิลด์พิเศษลงในแบบฟอร์มแก้ไขหมวดหมู่โดยใช้ 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 [คีย์] เนื่องจากวิธีที่เราสร้างเฉพาะในแถวในตารางตัวเลือกเพื่อบันทึกฟิลด์พิเศษทั้งหมดของหมวดหมู่แทนที่จะเป็นแถวสำหรับแต่ละฟิลด์
ต่อไปเราต้องบันทึกเขตข้อมูลพิเศษลงในฐานข้อมูลเมื่อผู้ใช้ส่งแบบฟอร์มแก้ไขหมวดหมู่และเราทำโดยใช้ "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 คือ ID ของหมวดหมู่เฉพาะที่เราเพิ่งแก้ไขและนั่นหมายความว่าเราสามารถเรียกสิ่งนี้ได้ ข้อมูลในปลั๊กอินหรือไฟล์ธีมของเราได้อย่างง่ายดายโดยใช้ฟังก์ชั่น get_option
พูดเช่นรหัสหมวดหมู่ของฉันคือ 25 แล้วรหัสของฉันจะมีลักษณะ
<?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>';
}
เป็นคนดีและใช้งานง่ายและเราทุกคนก็ทำได้ ผลลัพธ์ควรมีลักษณะเช่นนี้: