Ich habe vor einer Woche ein How To darüber gepostet http://en.bainternet.info/2011/wordpress-category-extra-fields
hoffe das hilft.
Ohad.
Hier sind die Details des Beitrags:
Als Erstes müssen wir die zusätzlichen Felder mit dem Hook edit_category_form_fields zum Formular zur Kategoriebearbeitung hinzufügen und verwenden eine einfache Funktion, mit der die zusätzlichen Felder ausgedruckt werden.
<?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
}
Wie Sie sehen, habe ich 4 neue Felder hinzugefügt, die sich alle in einem Array Cat_meta [key] befinden, da wir auf diese Weise nur eine Zeile in der Optionstabelle erstellen, um alle zusätzlichen Felder der Kategorie anstelle einer Zeile für jedes Feld zu speichern.
Als nächstes müssen wir die zusätzlichen Felder in der Datenbank speichern, sobald ein Benutzer das Kategorie-Bearbeitungsformular abschickt, und dies unter Verwendung von "edited_category" mit einer Funktion, die alle übermittelten Felder durchläuft und sie mit der Funktion update_option in die Datenbank einfügt , so was:
<?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 );
}
}
Aus dem obigen Code können Sie ersehen, dass alle zusätzlichen Felder, die wir hinzugefügt haben, in der Optionstabelle der Datenbank mit dem Namen 'category_ID' gespeichert sind, wobei ID die ID der spezifischen Kategorie ist, die wir gerade bearbeitet haben, und das heißt, wir können dies aufrufen Daten in unseren Plugins oder Themendateien einfach mit der Funktion get_option.
Angenommen, meine Kategorie-ID ist 25, dann sieht mein Code so aus
<?php $cat_data = get_option('category_25'); ?>
Wie eingangs erwähnt, muss ich für jede Kategorie ein anderes Bild anzeigen. In diesem Fall habe ich die category.php meines Themas direkt nach dem Code, der den Kategorietitel anzeigt, um diese wenigen Codezeilen ergänzt:
<?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>';
}
Schön und einfach und wir sind alle fertig. Das Ergebnis sollte ungefähr so aussehen: