wake-up-neo.com

Fügen Sie der Kategorie ein benutzerdefiniertes Feld hinzu

Ich möchte einer bestimmten Kategorie benutzerdefinierte Felder hinzufügen. Eine Kategorie enthält nur die folgenden Felder:

Name:

Slug:

Elternteil:

Beschreibung:

Da ich eine TV-Serien-Site habe, möchte ich weitere Felder hinzufügen. Wenn ich eine neue Kategorie erstelle (Kategorie = Serie), möchte ich Folgendes.

Name:

Künstler:

Jahr:

Art:

Genre:

Zusammenfassung:

Slug:

Elternteil:

Beschreibung:

Und so weiter...

Irgendeine Hilfe bitte? Danke im Voraus.

21
user2996

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 tun wir 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 erweitert:

<?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:

 enter image description here 

24
Bainternet

Ab Wordpress 4.4 wurden die Funktionen add_term_meta () , update_term_meta () und get_term_meta () hinzugefügt. Dies bedeutet, dass der von MxmastaMills zur Verfügung gestellte Code aktualisiert werden kann, um einen weitaus weniger hackigen Ansatz zu verwenden.

Hier ist mein Update davon. Es gibt nur ein Feld, da ich einen benutzerdefinierten Titel hinzufügen wollte, aber es funktioniert für alle Felder, die Sie hinzufügen möchten, gleich.

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');
15
Luke Simmons

Dieser Code funktioniert:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><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 ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});
2
Mario62RUS

Paul Menard lieferte in seinem Blog ein Beispiel für das Erstellen und Verwenden von Term-Meta ...
Benutzerdefiniertes Meta für neue Taxonomien in WordPress 3.0 .

Es gibt kein Beispiel für das Erstellen der DB-Tabelle oder das Überprüfen, ob $_POST vars gesetzt sind. Sie müssen diese kleinen Dinge also selbst erledigen, aber es sieht nach einer anständigen Codebasis aus, auf der Sie aufbauen können ... :)

1
t31os