() translation by (you can also view the original English article)
Heute werden wir den gesamten Prozess der Erstellung eines Admin-Optionsfelds für ein WordPress-Theme am Beispiel des hervorragenden WooFrameworks durchlaufen. Dann gehen wir noch einen Schritt weiter und implementieren jQuery, um einige Funktionen zu verbessern.
Tutorial Details
- Programm: WordPress
- Version: 2.7, 2.8, 2.9 ab
- Schwierigkeit: Mittelstufe
- Geschätzte Fertigstellungszeit: 1,5 Stunden



WordPress ist eines der beliebtesten CMS-Systeme (Content Management Software). Ob für ein Kundenprojekt oder für den Verkauf von Themen auf ThemeForest - WordPress entwickelt sich für viele Webentwickler schnell zu einem CMS der Wahl. Es ist relativ einfach zu bedienen, kann aber noch einfacher gestaltet werden, wenn Sie ein Administrationsfenster für Benutzer hinzufügen. Anstatt die PHP-Vorlagendateien öffnen und mit dem Code herumspielen zu müssen, können Benutzer das Optionsfeld direkt verwenden, um mit Ihrem WordPress-Thema zu interagieren.
Beispiel: Wenn Ihr Thema rote, blaue und grüne Farbschemata hat und jedes eine entsprechende CSS-Datei hat, ist es für einen Benutzer viel einfacher, seine bevorzugte Farbe aus einer Dropdown-Liste auszuwählen. Lassen Sie sich heute durch den gesamten Prozess der Erstellung und Verbesserung einer von Woo inspirierten WordPress-Admin-Panel-Seite führen.
Schritt 1
Bevor wir mit der Erstellung des Admin-Panels beginnen, müssen wir ein Thema haben, oder? Laden Sie also die im Tutorial enthaltenen Quelldateien herunter. Ich habe das klassische WordPress-Theme leicht modifiziert. Platzieren Sie den Ordner "nettuts" (ich habe das Thema "Nettuts" genannt) in Ihrem Ordner "wp-content/theme". Sie sollten die folgenden Dateien sehen:
- functions.php (leer)
- index.php
- comments.php
- footer.php
- header.php
- rtl.php
- sidebar.php
- style.css
- screenshot.png
- Ein Bilderordner mit zwei Dateien
Der größte Teil unserer Arbeit wird in der Datei functions.php erledigt.
Ein Thema kann optional eine Funktionsdatei verwenden, die sich im Unterverzeichnis des Themas befindet und den Namen functions.php trägt. Diese Datei verhält sich im Grunde genommen wie ein Plugin. Wenn sie in dem von Ihnen verwendeten Thema vorhanden ist, wird sie während der WordPress-Initialisierung automatisch geladen (sowohl für Administrationsseiten als auch für externe Seiten).
Vorgeschlagene Verwendung für diese Datei:
- Definieren Sie Funktionen, die in mehreren Vorlagendateien Ihres Themas verwendet werden
- Richten Sie einen Administrationsbildschirm ein, auf dem Benutzer Optionen für Farben, Stile und andere Aspekte Ihres Themas finden
Schritt 2
Nachdem wir unser WordPress-Theme eingerichtet haben, gehen Sie zu Aussehen > Themes und aktivieren Sie das Nettuts-Theme.



Hat aktiviert? Ok, großartig. Jetzt müssen wir uns ein Layout für unsere Admin-Panel-Seite überlegen. Hier ist die Struktur, für die ich mich entschieden habe:
1 |
|
2 |
<div class="wrap rm_wrap"> |
3 |
<div class="rm_opts"> |
4 |
<form method="post"> |
5 |
<div class="rm_section"> |
6 |
<div class="rm_title> |
7 |
<h3>Title</h3>
|
8 |
<submit button>
|
9 |
</div>
|
10 |
<div class="rm_input rm_<select/textarea/text etc>"> |
11 |
<input area> |
12 |
<description>
|
13 |
</div>
|
14 |
</div>
|
15 |
|
16 |
/*Repeat the inputs for as many options as required. */ |
17 |
/* use <div class="rm_section"> for each new section of inputs eg General, Home Page etc */ |
18 |
</form>
|
19 |
</div>
|
20 |
</div>
|
Lassen Sie mich Ihnen das alles erklären. Der Optionssatz wird in ein Div mit dem Namen "rm_wrap" und dann "rm_opts" für die Optionen eingeschlossen. Dann starten wir ein Formular mit allen darin enthaltenen Eingaben. Jeder Abschnitt mit Optionen (allgemeine Einstellungen, Homepage-Einstellungen, Blog-Einstellungen usw.) verfügt über ein separates Div mit der Klasse "rm_section". Dieses Div enthält einen Titel (für den Namen) sowie mehrere Eingabedivs. Durch die Verwendung von Klassen wie <div class="rm_input rm_select"> können Dropdown-Listen, Texteingaben und Textbereiche unterschiedlich gestaltet werden.
Das Wichtigste ist nun, dass die Codierung nicht manuell erfolgen sollte - wir sollten die Flexibilität von PHP so weit wie möglich nutzen. Das bedeutet Effizienz: Codieren Sie nicht manuell, wenn Sie Schleifen für Sie haben!
Schritt 3
Öffnen Sie zuerst functions.php in Ihrem bevorzugten Code-Editor (ich verwende Notepad++). Geben Sie den folgenden Code ein:
1 |
|
2 |
<?php
|
3 |
|
4 |
$themename = "Nettuts"; |
5 |
$shortname = "nt"; |
Die beiden PHP-Variablen enthalten den Namen Ihres Themas (in unserem Fall Nettuts) und einen von Ihnen definierten Kurznamen (in unserem Fall nt). Der Kurzname wird verwendet, um allen Namen unserer Themenoptionen ein Präfix voranzustellen, und ist normalerweise für ein bestimmtes Thema eindeutig. Im weiteren Verlauf schreiben wir Code, um automatisch eine Liste der WordPress-Kategorien zu erstellen, anstatt dass Benutzer ID-Nummern eingeben. Geben Sie den folgenden Code unter dem bereits eingegebenen Code ein:
1 |
|
2 |
$categories = get_categories('hide_empty=0&orderby=name'); |
3 |
$wp_cats = array(); |
4 |
foreach ($categories as $category_list ) { |
5 |
$wp_cats[$category_list->cat_ID] = $category_list->cat_name; |
6 |
}
|
7 |
array_unshift($wp_cats, "Choose a category"); |
Dieses Snippet verwendet die in WordPress integrierte Funktion get_categories, um alle Kategorien abzurufen, und verwendet dann eine foreach-Schleife, um sie in der Variablen $wp_cats zu speichern. Die Optionen "Kategorie auswählen" werden dann oben im Array hinzugefügt
Schritt 4
Jetzt geben wir eine Liste mit Optionen für das Thema ein. Siehe unten und fügen Sie es in Ihre Datei functions.php ein:
1 |
|
2 |
|
3 |
$options = array ( |
4 |
|
5 |
array( "name" => $themename." Options", |
6 |
"type" => "title"), |
7 |
|
8 |
|
9 |
array( "name" => "General", |
10 |
"type" => "section"), |
11 |
array( "type" => "open"), |
12 |
|
13 |
array( "name" => "Colour Scheme", |
14 |
"desc" => "Select the colour scheme for the theme", |
15 |
"id" => $shortname."_color_scheme", |
16 |
"type" => "select", |
17 |
"options" => array("blue", "red", "green"), |
18 |
"std" => "blue"), |
19 |
|
20 |
array( "name" => "Logo URL", |
21 |
"desc" => "Enter the link to your logo image", |
22 |
"id" => $shortname."_logo", |
23 |
"type" => "text", |
24 |
"std" => ""), |
25 |
|
26 |
|
27 |
array( "name" => "Custom CSS", |
28 |
"desc" => "Want to add any custom CSS code? Put in here, and the rest is taken care of. This overrides any other stylesheets. eg: a.button{color:green}", |
29 |
"id" => $shortname."_custom_css", |
30 |
"type" => "textarea", |
31 |
"std" => ""), |
32 |
|
33 |
array( "type" => "close"), |
34 |
array( "name" => "Homepage", |
35 |
"type" => "section"), |
36 |
array( "type" => "open"), |
37 |
|
38 |
array( "name" => "Homepage header image", |
39 |
"desc" => "Enter the link to an image used for the homepage header.", |
40 |
"id" => $shortname."_header_img", |
41 |
"type" => "text", |
42 |
"std" => ""), |
43 |
|
44 |
array( "name" => "Homepage featured category", |
45 |
"desc" => "Choose a category from which featured posts are drawn", |
46 |
"id" => $shortname."_feat_cat", |
47 |
"type" => "select", |
48 |
"options" => $wp_cats, |
49 |
"std" => "Choose a category"), |
50 |
|
51 |
|
52 |
array( "type" => "close"), |
53 |
array( "name" => "Footer", |
54 |
"type" => "section"), |
55 |
array( "type" => "open"), |
56 |
|
57 |
array( "name" => "Footer copyright text", |
58 |
"desc" => "Enter text used in the right side of the footer. It can be HTML", |
59 |
"id" => $shortname."_footer_text", |
60 |
"type" => "text", |
61 |
"std" => ""), |
62 |
|
63 |
array( "name" => "Google Analytics Code", |
64 |
"desc" => "You can paste your Google Analytics or other tracking code in this box. This will be automatically added to the footer.", |
65 |
"id" => $shortname."_ga_code", |
66 |
"type" => "textarea", |
67 |
"std" => ""), |
68 |
|
69 |
array( "name" => "Custom Favicon", |
70 |
"desc" => "A favicon is a 16x16 pixel icon that represents your site; paste the URL to a .ico image that you want to use as the image", |
71 |
"id" => $shortname."_favicon", |
72 |
"type" => "text", |
73 |
"std" => get_bloginfo('url') ."/favicon.ico"), |
74 |
|
75 |
array( "name" => "Feedburner URL", |
76 |
"desc" => "Feedburner is a Google service that takes care of your RSS feed. Paste your Feedburner URL here to let readers see it in your website", |
77 |
"id" => $shortname."_feedburner", |
78 |
"type" => "text", |
79 |
"std" => get_bloginfo('rss2_url')), |
80 |
|
81 |
|
82 |
array( "type" => "close") |
83 |
|
84 |
);
|
Das war ein großer Teil des Codes, der sicherlich eine Erklärung verdient. Auf geht's:
- Die PHP-Variable $options speichert die gesamte Liste der Optionen für das Thema.
- Es besteht aus einer Reihe von Arrays, die jeweils mit einem "Typ"-Schlüssel versehen sind, um anzugeben, wie es angezeigt wird und was es tut.
- Wir beginnen mit einem "type" => "title"-Array - dieses wird verwendet, um den Themennamen und einen Titel oben auf der Seite anzuzeigen
- Jeder Abschnitt (Allgemein, Homepage und Fußzeile) verfügt über eine separate Liste von Optionen.
- We start a new section by closing any previous sections, declaring a new section using
array( "name" => "Footer
"type" => "section")
und öffne einen neuen Abschnitt. - Für jede Option können die folgenden Optionen angegeben werden:
name: Der Name des Eingabefeldes.
desc: Eine kurze Beschreibung, die dem Benutzer erklärt, was es ist.
id: Die ID des Feldes, dem der Kurzname vorangestellt ist. Es wird verwendet, um die Optionen zu speichern und darauf zuzugreifen.
type: Der Eingabetyp - Auswahl, Text oder Textbereich
options: Wird verwendet, um ein Array von Optionen für eine Eingabe vom Typ Select zu deklarieren.
std: Der Standardeingabewert, der verwendet wird, wenn keine andere Eingabe erfolgt.
Schritt 5
Versuchen Sie, zu WordPress zu navigieren. Sie werden sehen, dass es nirgendwo eine Option gibt, um die Admin-Panel-Seite tatsächlich anzuzeigen. Wie können wir es sehen? Fügen Sie der Datei functions.php die folgenden Codeteile hinzu:
1 |
|
2 |
function mytheme_add_admin() { |
3 |
|
4 |
global $themename, $shortname, $options; |
5 |
|
6 |
if ( $_GET['page'] == basename(__FILE__) ) { |
7 |
|
8 |
if ( 'save' == $_REQUEST['action'] ) { |
9 |
|
10 |
foreach ($options as $value) { |
11 |
update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } |
12 |
|
13 |
foreach ($options as $value) { |
14 |
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ] ); } else { delete_option( $value['id'] ); } } |
15 |
|
16 |
header("Location: admin.php?page=functions.php&saved=true"); |
17 |
die; |
18 |
|
19 |
}
|
20 |
else if( 'reset' == $_REQUEST['action'] ) { |
21 |
|
22 |
foreach ($options as $value) { |
23 |
delete_option( $value['id'] ); } |
24 |
|
25 |
header("Location: admin.php?page=functions.php&reset=true"); |
26 |
die; |
27 |
|
28 |
}
|
29 |
}
|
30 |
|
31 |
add_menu_page($themename, $themename, 'administrator', basename(__FILE__), 'mytheme_admin'); |
32 |
}
|
33 |
|
34 |
function mytheme_add_init() { |
35 |
|
36 |
}
|
Diese Funktion dient zum Aktualisieren von Optionen sowie zum Hinzufügen einer Menüseite. Wenn die Optionen gespeichert werden (angezeigt durch das Speichern einer versteckten Variablen), werden alle Optionen mit ihren neuen Werten aktualisiert. Wenn die Optionen zurückgesetzt werden (angezeigt durch eine andere versteckte Variable mit einem Wert-Reset), werden alle Optionen gelöscht. In der letzten Zeile wird eine Menüseite hinzugefügt. Die Parameter sind Name und Titel, die zum Anzeigen der Seite erforderliche Benutzerberechtigungsstufe, die Speicherseite und die zum Anzeigen/Speichern verwendete Funktion (in unserem Fall mytheme_admin genannt). Sehen Sie die mytheme_add_init, eine blanbk-Funktion? Lassen Sie das sein, wir werden später darauf zurückkommen.
Schritt 6
Immer noch keine Seite mit Themenoptionen, oder? Erinnern Sie sich an die Funktion mytheme_admim, über die wir vor einigen Zeilen gesprochen hatten? Wir haben diese Funktion noch nicht geschrieben. Verwenden Sie also den Code aus den Schritten 6, 7 und 8, um diese Funktion zu schreiben. Start:
1 |
|
2 |
function mytheme_admin() { |
3 |
|
4 |
global $themename, $shortname, $options; |
5 |
$i=0; |
6 |
|
7 |
if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings saved.</strong></p></div>'; |
8 |
if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>'.$themename.' settings reset.</strong></p></div>'; |
9 |
|
10 |
?>
|
11 |
<div class="wrap rm_wrap"> |
12 |
<h2><?php echo $themename; ?> Settings</h2> |
13 |
|
14 |
<div class="rm_opts"> |
15 |
<form method="post"> |
Ziemlich einfach, oder? Wenn die Optionen gespeichert wurden, schreiben Sie eine entsprechende Nachricht. Ebenso für Resets. Sie werden eine class="updated fade" bemerken - WordPress wird dies in einigen Abschnitten automatisch ausblenden. Schlau, richtig? Weiter geht es mit dem Div "rm_wrap".
Schritt 7
Von oben fortfahren, folgenden Code einfügen:
1 |
|
2 |
<?php foreach ($options as $value) { |
3 |
switch ( $value['type'] ) { |
4 |
|
5 |
case "open": |
6 |
?>
|
7 |
|
8 |
<?php break; |
9 |
|
10 |
case "close": |
11 |
?>
|
12 |
|
13 |
</div>
|
14 |
</div>
|
15 |
<br /> |
16 |
|
17 |
|
18 |
<?php break; |
19 |
|
20 |
case "title": |
21 |
?>
|
22 |
<p>To easily use the <?php echo $themename;?> theme, you can use the menu below.</p> |
23 |
|
24 |
|
25 |
<?php break; |
26 |
|
27 |
case 'text': |
28 |
?>
|
29 |
|
30 |
<div class="rm_input rm_text"> |
31 |
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label> |
32 |
<input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_settings( $value['id'] ) != "") { echo stripslashes(get_settings( $value['id']) ); } else { echo $value['std']; } ?>" /> |
33 |
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div> |
34 |
|
35 |
</div>
|
36 |
<?php
|
37 |
break; |
38 |
|
39 |
case 'textarea': |
40 |
?>
|
41 |
|
42 |
<div class="rm_input rm_textarea"> |
43 |
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label> |
44 |
<textarea name="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" cols="" rows=""><?php if ( get_settings( $value['id'] ) != "") { echo stripslashes(get_settings( $value['id']) ); } else { echo $value['std']; } ?></textarea> |
45 |
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div> |
46 |
|
47 |
</div>
|
48 |
|
49 |
<?php
|
50 |
break; |
51 |
|
52 |
case 'select': |
53 |
?>
|
54 |
|
55 |
<div class="rm_input rm_select"> |
56 |
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label> |
57 |
|
58 |
<select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>"> |
59 |
<?php foreach ($value['options'] as $option) { ?> |
60 |
<option <?php if (get_settings( $value['id'] ) == $option) { echo 'selected="selected"'; } ?>><?php echo $option; ?></option><?php } ?> |
61 |
</select>
|
62 |
|
63 |
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div> |
64 |
</div>
|
65 |
<?php
|
66 |
break; |
67 |
|
68 |
case "checkbox": |
69 |
?>
|
70 |
|
71 |
<div class="rm_input rm_checkbox"> |
72 |
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label> |
73 |
|
74 |
<?php if(get_option($value['id'])){ $checked = "checked=\"checked\""; }else{ $checked = "";} ?> |
75 |
<input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> /> |
76 |
|
77 |
|
78 |
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div> |
79 |
</div>
|
80 |
<?php break; |
Das ist ein großer Code! Erläuterung - Unter Verwendung einer PHP-Foreach-Schleife wird jeder Optionstyp von Fall zu Fall bewertet. Wir verwenden hierfür eine Switch-Case-Technik. Die Schaltvariable sind die Optionen - die Fälle werden abgeglichen und ausgewertet. Beachten Sie die 'break'-Anweisung nach jedem Fall? Dies soll verhindern, dass etwas als "Fall-Through" -Eigenschaft bekannt ist. Wenn ein Fall abgeglichen wird, werden auch alle aufeinander folgenden Fälle ausgeführt. Dies bedeutet, dass, wenn wir mit Fall 3 übereinstimmen, auch Fälle 4,5 usw. ausgeführt werden. Das wollen wir doch nicht, oder? Verwenden Sie also eine Pause, um das Schaltgehäuse anzuhalten.
Wenn es eine Option vom Typ "offen" gibt, wird nichts unternommen. Wenn es Optionen vom Typ "Schließen" gibt, werden zwei Divs geschlossen. Die Option "Titel" wird nur einmal verwendet - es handelt sich um eine Einführung in die Themenoptionen. Für jeden der Typen "text" (input type="text"), "select" (dropdowns), "checkbox" und "textarea" (es ist offensichtlich, was diese bedeuten) wird die entsprechende Eingabe angezeigt. Beachten Sie das <div class="clearfix"> - es wird zum Löschen von Floats verwendet, was wir später tun werden.
Schritt 8
Wir kommen zum Ende dieser ziemlich massiven Funktion. Fügen Sie den folgenden Code ein:
1 |
|
2 |
|
3 |
case "section": |
4 |
|
5 |
$i++; |
6 |
|
7 |
?> |
8 |
|
9 |
<div class="rm_section"> |
10 |
<div class="rm_title"><h3><img src="<?php bloginfo('template_directory')?>/functions/images/trans.gif" class="inactive" alt="""><?php echo $value['name']; ?></h3><span class="submit"><input name="save<?php echo $i; ?>" type="submit" value="Save changes" /> |
11 |
</span><div class="clearfix"></div></div> |
12 |
<div class="rm_options"> |
13 |
|
14 |
|
15 |
<?php break;
|
16 |
|
17 |
}
|
18 |
}
|
19 |
?>
|
20 |
|
21 |
<input type="hidden" name="action" value="save" /> |
22 |
</form>
|
23 |
<form method="post"> |
24 |
<p class="submit"> |
25 |
<input name="reset" type="submit" value="Reset" /> |
26 |
<input type="hidden" name="action" value="reset" /> |
27 |
</p>
|
28 |
</form>
|
29 |
<div style="font-size:9px; margin-bottom:10px;">Icons: <a href="http://www.woothemes.com/2009/09/woofunction/">WooFunction</a></div> |
30 |
</div>
|
31 |
|
32 |
|
33 |
<?php
|
34 |
}
|
35 |
|
36 |
?>
|
Für eine Option vom Typ "Abschnitt" habe ich eine Zählervariable $i verwendet. Dadurch wird die Abschnittsnummer verfolgt und mit dem Namen der Senden-Schaltfläche verknüpft, um eindeutige Senden-Schaltflächen zu erhalten. Am Ende befindet sich auch ein letztes Formular zum Zurücksetzen aller Optionen. Das verwendete Bild wird ein transparentes Bild sein, das in unserer jQuery-Fication verwendet wird. Verwenden Sie diesen allerletzten Code, um unsere Funktionen ins Spiel zu bringen:
1 |
|
2 |
<?php
|
3 |
add_action('admin_init', 'mytheme_add_init'); |
4 |
add_action('admin_menu', 'mytheme_add_admin'); |
5 |
?>
|
Das weist WordPress an, das Admin-Menü hinzuzufügen.
Schritt 9



Und voila! Wir haben unsere eigene fantastische Admin-Panel-Seite mit einer separaten Menüposition für sich. Probieren wir es aus - klicken Sie auf den Link. Und igitt. Das muss die hässlichste Admin-Panel-Seite aller Zeiten sein. Rufen wir also unseren guten Freund CSS an! Erstellen Sie einen neuen Ordner im Verzeichnis nettuts/und nennen Sie ihn "functions". Erstellen Sie dort eine neue CSS-Datei - functions.css. Fügen Sie den folgenden Code ein:
1 |
|
2 |
.rm_wrap{ |
3 |
width:740px; |
4 |
}
|
5 |
.rm_section{ |
6 |
border:1px solid #ddd; |
7 |
border-bottom:0; |
8 |
background:#f9f9f9; |
9 |
}
|
10 |
.rm_opts label{ |
11 |
font-size:12px; |
12 |
font-weight:700; |
13 |
width:200px; |
14 |
display:block; |
15 |
float:left; |
16 |
}
|
17 |
.rm_input { |
18 |
padding:30px 10px; |
19 |
border-bottom:1px solid #ddd; |
20 |
border-top:1px solid #fff; |
21 |
}
|
22 |
.rm_opts small{ |
23 |
display:block; |
24 |
float:right; |
25 |
width:200px; |
26 |
color:#999; |
27 |
}
|
28 |
.rm_opts input[type="text"], .rm_opts select{ |
29 |
width:280px; |
30 |
font-size:12px; |
31 |
padding:4px; |
32 |
color:#333; |
33 |
line-height:1em; |
34 |
background:#f3f3f3; |
35 |
}
|
36 |
.rm_input input:focus, .rm_input textarea:focus{ |
37 |
background:#fff; |
38 |
}
|
39 |
.rm_input textarea{ |
40 |
width:280px; |
41 |
height:175px; |
42 |
font-size:12px; |
43 |
padding:4px; |
44 |
color:#333; |
45 |
line-height:1.5em; |
46 |
background:#f3f3f3; |
47 |
}
|
48 |
.rm_title h3 { |
49 |
cursor:pointer; |
50 |
font-size:1em; |
51 |
text-transform: uppercase; |
52 |
margin:0; |
53 |
font-weight:bold; |
54 |
color:#232323; |
55 |
float:left; |
56 |
width:80%; |
57 |
padding:14px 4px; |
58 |
}
|
59 |
.rm_title{ |
60 |
cursor:pointer; |
61 |
border-bottom:1px solid #ddd; |
62 |
background:#eee; |
63 |
padding:0; |
64 |
}
|
65 |
.rm_title h3 img.inactive{ |
66 |
margin:-8px 10px 0 2px; |
67 |
width:32px; |
68 |
height:32px; |
69 |
background:url('images/pointer.png') no-repeat 0 0; |
70 |
float:left; |
71 |
-moz-border-radius:6px; |
72 |
border:1px solid #ccc; |
73 |
}
|
74 |
.rm_title h3 img.active{ |
75 |
margin:-8px 10px 0 2px; |
76 |
width:32px; |
77 |
height:32px; |
78 |
background:url('images/pointer.png') no-repeat 0 -32px; |
79 |
float:left; |
80 |
-moz-border-radius:6px; |
81 |
-webkit-border-radius:6px; |
82 |
border:1px solid #ccc; |
83 |
}
|
84 |
.rm_title h3:hover img{ |
85 |
border:1px solid #999; |
86 |
}
|
87 |
.rm_title span.submit{ |
88 |
display:block; |
89 |
float:right; |
90 |
margin:0; |
91 |
padding:0; |
92 |
width:15%; |
93 |
padding:14px 0; |
94 |
}
|
95 |
.clearfix{ |
96 |
clear:both; |
97 |
}
|
98 |
.rm_table th, .rm_table td{ |
99 |
border:1px solid #bbb; |
100 |
padding:10px; |
101 |
text-align:center; |
102 |
}
|
103 |
.rm_table th, .rm_table td.feature{ |
104 |
border-color:#888; |
105 |
}
|
Ich werde hier nichts erklären; Es ist ziemlich klar, was jede CSS-Deklaration bewirkt, und Sie können das Layout an Ihr eigenes Thema anpassen.
Schritt 10
Jetzt haben wir also eine schöne CSS-Datei. Aber wie fügen wir es der Seite hinzu? Schließlich haben wir keinen direkten Zugriff auf den <head> des Dokuments. Erinnern Sie sich an die leere Funktion mytheme_add_init(), die wir in Schritt 4 geschrieben haben? Das wird nützlich sein. Ändern Sie es in dieses:
1 |
|
2 |
function mytheme_add_init() { |
3 |
$file_dir=get_bloginfo('template_directory'); |
4 |
wp_enqueue_style("functions", $file_dir."/functions/functions.css", false, "1.0", "all"); |
5 |
}
|
Dadurch wird die Datei functions.css zum Kopf hinzugefügt. Der Speicherort der Datei wird durch das Vorlagenverzeichnis bestimmt.



Schritt 11
Schauen Sie sich jetzt die Seite an. Ziemlich gut aussehend, nicht wahr? Aber dann, fragen Sie, wofür ist das '+' Symbol? Hier kommt jQuery ins Spiel!. Erstellen Sie eine neue Datei rm_script.js im Ordner nettuts/functions/. Fügen Sie den folgenden Code ein:
1 |
|
2 |
jQuery(document).ready(function(){ |
3 |
jQuery('.rm_options').slideUp(); |
4 |
|
5 |
jQuery('.rm_section h3').click(function(){ |
6 |
if(jQuery(this).parent().next('.rm_options').css('display')==='none') |
7 |
{ jQuery(this).removeClass('inactive').addClass('active').children('img').removeClass('inactive').addClass('active'); |
8 |
|
9 |
}
|
10 |
else
|
11 |
{ jQuery(this).removeClass('active').addClass('inactive').children('img').removeClass('active').addClass('inactive'); |
12 |
}
|
13 |
|
14 |
jQuery(this).parent().next('.rm_options').slideToggle('slow'); |
15 |
});
|
16 |
});
|
Dies bedeutet: Sobald das DOM geladen ist, werden alle rm_options nach oben verschoben. Wenn Sie auf das Symbol '+' klicken, wird die inaktive Klasse aus dem Bild entfernt und die aktive Klasse hinzugefügt, wodurch sie zu einem '-' Symbol wird. Der umgekehrte Vorgang erfolgt, wenn auf das Symbol '-' geklickt wird. Die rm_options werden dann mithilfe der Funktion slideToggle nach oben oder unten verschoben (bestimmt durch den aktuellen CSS-Status) - ziemlich einfach. Um dieses Skript hinzuzufügen, wird dieselbe Funktion mytheme_add_init() verwendet. Ändern Sie es in:
1 |
|
2 |
function mytheme_add_init() { |
3 |
$file_dir=get_bloginfo('template_directory'); |
4 |
wp_enqueue_style("functions", $file_dir."/functions/functions.css", false, "1.0", "all"); |
5 |
wp_enqueue_script("rm_script", $file_dir."/functions/rm_script.js", false, "1.0"); |
6 |
}
|
Das jQuery-Skript ist jetzt aktiv. Gp check es aus. Persönlich finde ich es schön!



Schritt 12
Nachdem wir unsere Seite mit den Themenoptionen eingerichtet hatten, arbeitete ich Sie nur mit den Optionen durch. Der Code zur Verwendung der Optionen ist so:
1 |
|
2 |
$var = get_option('nt_colur_scheme'); |
Dadurch werden die Optionen nt_color_scheme abgerufen. Siehe die folgenden Beispiele:
1 |
|
2 |
/* To change the CSS stylesheet depending on the chosen color */ |
3 |
<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_directory'); ?>/<?php echo get_option('nt_color_scheme'); ?>.css" /> |
4 |
|
5 |
/*To echo some footer copyright text, with HTML */ |
6 |
<p><?php echo stripslashes(get_option('bl_footer_text')); ?></p> |
Die Verwendungsvielfalt ist nur durch Ihre Vorstellungskraft begrenzt.
Abschluss
Ich hoffe, Sie haben in diesem Tutorial etwas gelernt. Dies ist nicht Ihr Standard-Optionsfeld. Dieser verwendet keine Tabellen, ist jQuery-erweitert, verwendet fantastisches CSS und ist extrem einfach zu bedienen. In diesem Lernprogramm geht es darum zu lernen, dass Sie zusammenklappbare Bedienfelder jederzeit durch Registerkarten oder sogar etwas Fortgeschritteneres ersetzen können. Nutzen Sie Ihre Kreativität! Fühlen Sie sich frei, in den Kommentaren zu diskutieren oder Fragen zu stellen!
WooThemes hat seitdem Version zwei seines Frameworks veröffentlicht. Sie können die Details hier überprüfen.
- Folgen Sie uns auf Twitter oder abonnieren Sie den Nettuts+ RSS-Feed, um die besten Webentwicklungs-Tutorials im Web zu erhalten.