問題描述
我想將自定義欄位新增到類別。我的意思是當我建立一個我只有一個類別
名稱:
彈頭:
家長:
描述:
因為我有一個電視劇的網站,我想新增一些更多的領域,我想要這樣的東西,當我建立一個新的類別 (類別=系列)
名稱:
藝術家:
年:
型別:
型別:
概要:
彈頭:
家長:
描述:
等等…
請幫忙嗎提前致謝。
最佳解決方案
我發貼了一個星期前的一個例子 http://en.bainternet.info/2011/wordpress-category-extra-fields
希望這可以幫助。
轄。
以下是帖子的詳細資訊:
我們需要做的第一件事是使用鉤子 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 是我們剛剛編輯的特定類別的 ID,這意味著我們可以呼叫這些資料我們的外掛或主題檔案容易使用 get_option 功能。
例如我的類別 ID 是 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>';
}
尼斯和容易,我們都做完了。結果應該類似於:
次佳解決方案
從 Wordpress 4.4 開始,增加了 add_term_meta(),update_term_meta()和 get_term_meta()功能。這意味著由 MxmastaMills 提供的程式碼可以更新,以便使用一個更少的駭客方法。
這是我的更新。只有一個欄位,因為我想新增一個自定義標題,但它將對所有要新增的欄位工作一樣。
function addTitleFieldToCat(){
$cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
<td>
<input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
<span class="description"><?php _e('Title for the Category '); ?></span>
</td>
</tr>
<?php
}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');
function saveCategoryFields() {
if ( isset( $_POST['cat_title'] ) ) {
update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
}
}
add_action ( 'edited_category', 'saveCategoryFields');
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
