WordPress PHP Konstanten im Überblick

WordPress bietet nicht für jede mögliche Einstellung einen entsprechenden Eintrag im Administrationsbereich an. Manche Einstellungen können bzw. müssen entweder via Filter oder durch PHP Konstanten angesprochen werden.
In diesem Artikel zeige ich euch, welche Konstanten WordPress so mitbringt.

Eine Konstante ist ein Bezeichner (Name) für einen einfachen Wert. Wie der Name bereits nahelegt, kann der Wert einer Konstanten zur Laufzeit des Skripts nicht verändert werden. Eine Konstante unterscheidet standardmäßig zwischen Groß- und Kleinschreinbung (case-sensitive). Nach gängiger Konvention werden Konstanten immer in Großbuchstaben geschrieben.

PHP Handbuch

Allgemeine Einstellungen

AUTOSAVE_INTERVAL #
Definiert das Interval, in welchem eine automatische Speicherung durchgeführt wird.
Wert: Zeit in Sekunden (Standardwert: 60)

CORE_UPGRADE_SKIP_NEW_BUNDLED #
Gibt an, ob neue Themes und/oder Plugins bei einer Aktualisierung (nicht) installiert werden.
Werte: true|false

DISABLE_WP_CRON #
Deaktiviert die Cron Funktion in WordPress.
Wert: true

EMPTY_TRASH_DAYS #
Gibt die Tage an, wie lange Artikel, Kommentare oder Medien im Papierkorb verbleiben, bis sie automatisch gelöscht werden.
Wert: Zeit in Tagen (Standardwert: 30)

IMAGE_EDIT_OVERWRITE #
Gibt ab, ob eine bearbeitete Grafik das Originale überschreiben darf oder die Grafik als Kopie gespeichert wird.
Werte: true|false

MEDIA_TRASH #
(De)aktiviert die Papierkorb Funktion für Medien.
Werte: true|false (Standardwert: false)

WPLANG #
Legt die zu verwendende Sprache fest. Sprachpaket sollte installiert sein.
Werte: Für Deutsch de_DE

WP_DEFAULT_THEME #
Definiert das Standardtheme für eine neue Installation, dient als Fallback, wenn ein Theme defekt ist und wird, im Multisite-Modus, als Standardtheme für neue Seiten verwendet.
Wert: Themeordner (Standardwert: twentyeleven)

WP_CRON_LOCK_TIMEOUT #
Ab WordPress 3.3. Definiert eine Zeitspanne, in welcher nur ein Cronjob ausgeführt wird.
Wert: Zeit in Sekunden (Standardwert: 60)

WP_MAIL_INTERVAL #
Definiert eine Zeitsperre, in welcher die Mailabfrage blockiert wird.
Wert: Zeit in Sekunden (Standardwert: 300)

WP_POST_REVISIONS #
(De)aktiviert die Rückschau für Artikel. Eine Zahl größer 0 legt die Anzahl an gespeicherten Revisionen fest.
Werte: true|false|Zahl (Standardwert: true)

WP_MAX_MEMORY_LIMIT #
Gibt an, wie viel Speicher WordPress in manchen Funktionen und im Administrationsbereich maximal verwenden darf.
Werte: Siehe PHP Handbuch (Standardwert: 256M)

WP_MEMORY_LIMIT #
Legt das allgemeine Speicherlimit für WordPress fest.
Werte: Siehe PHP Handbuch (Standardwert: 32M, für Multisite 64M)

Status

APP_REQUEST #
Wird gesetzt, wenn es sich um eine Atom Publishing Protocol Anfrage handelt.
Wert: true

COMMENTS_TEMPLATE #
Wird gesetzt, wenn das Kommentar-Template geladen wurde.

DOING_AJAX #
Wird gesetzt, wenn es sich um eine AJAX Anfrage handelt.
Wert: true

DOING_AUTOSAVE #
Wird gesetzt, wenn eine automatische Speicherung durchgeführt wird.
Wert: true

DOING_CRON #
Wird gesetzt, wenn ein Cronjob ausgeführt wird.
Wert: true

IFRAME_REQUEST #
Wird gesetzt, wenn es sich um eine Inlineframe Abfrage handelt.
Wert: true

IS_PROFILE_PAGE #
Wird gesetzt, wenn sich der angemeldete Benutzer auf seiner Profilbearbeitungsseite befindet.
Wert: true

SHORTINIT #
Wird gesetzt, wenn nur die Basis von WordPress geladen wird.
Wert: true

WP_ADMIN #
Wird gesetzt, wenn sich der Benutzer im Administrationsbereich befindet.
Wert: true

WP_BLOG_ADMIN #
Wird gesetzt, wenn es sich um eine Anfrage im /wp-admin/ Verzeichnis handelt.
Wert: true

WP_IMPORTING #
Wird gesetzt, wenn ein Import durchgeführt wird.
Wert: true

WP_INSTALLING #
Wird gesetzt, wenn es sich um eine Installation, eine Aktivierung oder eine Aktualisierung handelt.
Wert: true

#WP_INSTALLING_NETWORK #
Ab WordPress 3.3, vorher WP_NETWORK_ADMIN_PAGE. Wird gesetzt, wenn sich der Benutzer im Netzwerk-Administrationsbereich befindet.
Wert: true

WP_LOAD_IMPORTERS #
Wird gesetzt, wenn sich der Benutzer in der Importer Übersicht unter Werkzeuge
Dateien importieren
befindet oder ein Importer geladen wurde.
Wert: true

WP_NETWORK_ADMIN #
Wird gesetzt, wenn es sich um eine Anfrage im /wp-admin/network/ Verzeichnis handelt.
Wert: true

WP_REPAIRING #
Wird gesetzt, wenn die Datenbankreparatur-Seite /wp-admin/maint/repair.php aufgerufen wird.
Wert: true

WP_SETUP_CONFIG #
Wird bei einer WordPress Installation/Konfiguration gesetzt.
Wert: true

WP_UNINSTALL_PLUGIN #
Wird gesetzt, wenn ein Plugin deinstalliert wird. (uninstall.php muss existieren.)
Wert: true

WP_USER_ADMIN #
Wird gesetzt, wenn es sich um eine Anfrage im /wp-admin/user/ Verzeichnis handelt.
Wert: true

XMLRPC_REQUEST #
Wird gesetzt, wenn es sich um eine Anfrage über die XML-RPC Schnittstelle handelt.
Wert: true

Pfade, Verzeichnisse und Links

ABSPATH #
Absoluter Pfad zum WordPress Verzeichnis.
Standardwert: Pfad zur wp-load.php Datei

WPINC #
Relativer Pfad zum /wp-includes/ Verzeichnis. Nicht veränderbar.
Standardwert: wp-includes

WP_LANG_DIR #
Absoluter Pfad zum Sprachdatei Verzeichnis.
Standardwert: WP_CONTENT_DIR /languages oder WP_CONTENT_DIR WPINC /languages

WP_PLUGIN_DIR #
Absoluter Pfad zum Plugin Verzeichnis.
Standardwert: WP_CONTENT_DIR /plugins

WP_PLUGIN_URL #
URL zum Plugin Verzeichnis.
Standardwert: WP_CONTENT_URL /plugins

WP_CONTENT_DIR #
Absoluter Pfad zum wp-content Verzeichnis.
Standardwert: ABSPATH wp-content

WP_CONTENT_URL #
URL zum wp-content Verzeichnis.
Standardwert: {Site URL}/wp-content

WP_HOME #
URL, unter welcher die Seite erreichtwird.

WP_SITEURL #
URL zum WordPress Verzeichnis.

WP_TEMP_DIR #
Absoluter Pfad zu einem Verzeichnis, in welchem temporäre Dateien gespeichert werden können.

WPMU_PLUGIN_DIR #
Absoluter Pfad zum Must-Use (MU) Plugin Verzeichnis.
Standardwert: WP_CONTENT_DIR /mu-plugins

WPMU_PLUGIN_URL #
URL zum Must-Use (MU) Plugin Verzeichnis.
Standardwert: WP_CONTENT_URL /mu-plugins

Datenbank

DB_CHARSET #
Legt den Zeichensatz fest.
Werte: Siehe MySQL Handbuch (Standardwert: utf8

DB_COLLATE #
Legt die Collation fest.
Werte: Siehe MySQL Handbuch (Standardwert: utf8_general_ci

DB_HOST #
Legt die MySQL Serveradresse fest.
Werte: IP Adresse, Domain und/oder Port (Standardwert: localhost

DB_NAME #
Legt den Namen der Datenbank fest.

DB_PASSWORD #
Legt das Passwort für die Datenbank fest.

DB_USER #
Legt den Benutzernamen für die Datenbank fest.

WP_ALLOW_REPAIR #
Erlaubt das automatische Reparieren und Optimieren der Datenbank via /wp-admin/maint/repair.php.
Wert: true

CUSTOM_USER_TABLE #
Dient zum Festlegen einer benutzerdefinierten Benutzertabelle.
Wert: Tabellenname

CUSTOM_USER_META_TABLE #
Dient zum Festlegen einer benutzerdefinierten Benutzermetatabelle.
Wert: Tabellenname

Multisite

ALLOW_SUBDIRECTORY_INSTALL #
Erlaubt es, Multisite mit Unterordnern zu betreiben.
Wert: true

BLOGUPLOADDIR #
Absoluter Pfad zum seitenspezifischen Upload Verzeichnis.
Standardwert: WP_CONTENT_DIR /blogs.dir/{Blog ID}/files/

BLOG_ID_CURRENT_SITE #
Blog ID der Hauptseite.
Standardwert: 1

DOMAIN_CURRENT_SITE #
Domain der Hauptseite.
Standardwert: Domain der Hauptseite

DIEONDBERROR #
Wenn definiert, wird die Datenbankfehlermeldung am Bildschirm ausgegeben.
Wert: true

ERRORLOGFILE #
Wenn definiert, wird die Datenbankfehlermeldung in die definierte Datei geschrieben.
Wert: absoluter Pfad zu einer beschreibbaren Datei

MULTISITE #
Wird gesetzt, wenn es sich um eine Multisite Installation handelt.

NOBLOGREDIRECT #
URL zu einer Seite, auf welche umgeleitet wird, wenn die Registration geschlossen ist und eine nicht existierende Seite aufgerufen wird.
Werte: %siteurl% für URL der Hauptseite oder beliebige URL

PATH_CURRENT_SITE #
Pfad zum Verzeichnis der Hauptseite.

UPLOADBLOGSDIR #
Pfad zum Upload Basisverzeichnis, relativ zu ABSPATH.
Standardwert: wp-content/blogs.dir

SITE_ID_CURRENT_SITE #
Netzwerk ID, welcher die Hauptseite angehört.
Standardwert: 1

SUBDOMAIN_INSTALL #
Gibt an, ob es sich um eine Subdomain Installation handelt.
Werte: true|false

SUNRISE #
Wenn definiert, wird die /wp-content/sunrise.php Datei geladen.
Wert: true

UPLOADS #
Pfad zum seitenspezifischen Uploadverzeichnis, relativ zu ABSPATH.
Standardwert: UPLOADBLOGSDIR /{blogid}/files/

WPMU_ACCEL_REDIRECT #
(De)aktiviert den Support für X-Sendfile Header.
Werte: true|false (Standardwert: false)

WPMU_SENDFILE #
(De)aktiviert den Support für X-Accel-Redirect Header.
Werte: true|false (Standardwert: false)

WP_ALLOW_MULTISITE #
Wenn definiert, wird die Installationsseite für Multisite als Untermenü von Werkezeuge angezeigt.
Wert: true

Cache und Komprimierung

WP_CACHE #
Wenn definiert, wird die /wp-content/advanced-cache.php Datei geladen.
Werte: true|false (Standardwert: false)

COMPRESS_CSS #
(De)aktiviert die Komprimierung von CSS Dateien.
Werte: true|false

COMPRESS_SCRIPTS #
(De)aktiviert die Komprimierung von Javascript Dateien.
Werte: true|false

CONCATENATE_SCRIPTS #
(De)aktiviert die Zusammenführung von Javascript bzw. CSS Dateien vor der Komprimierung.
Werte: true|false

ENFORCE_GZIP #
(De)aktiviert die gzip Komprimierung.
Werte: true|false

Dateisystem und Verbindungen

FS_CHMOD_DIR #
Definiert die Schreib- und Zugriffsrechte für Ordner.
Werte: Siehe PHP Handbuch (Standardwert: 0755)

FS_CHMOD_FILE #
Definiert die Schreib- und Zugriffsrechte für Dateien.
Werte: Siehe PHP Handbuch (Standardwert: 0644)

FS_CONNECT_TIMEOUT #
Legt eine Zeitbeschränkung für ein Verbindungsaufbau fest.
Werte: Zeit in Sekunden (Standardwert: 30)

FS_METHOD #
Legt die Dateisystem-Methode fest.
Werte: direct|ssh|ftpext|ftpsockets

FS_TIMEOUT #
Legt eine Zeitbeschränkung nach einem Verbindungabbruch fest.
Werte: Zeit in Sekunden (Standardwert: 30)

FTP_BASE #
Pfad zum WordPress Verzeichnis.
Standardwert: ABSPATH

FTP_CONTENT_DIR #
Pfad zum /wp-content/ Verzeichnis.
Standardwert: WP_CONTENT_DIR

FTP_HOST #
Legt die FTP Serveradresse fest.
Werte: IP Adresse, Domain und/oder Port

FTP_LANG_DIR #
Pfad zum Sprachdatei Verzeichnis.
Standardwert: WP_LANG_DIR

FTP_PASS #
Legt das FTP Passwort fest.

FTP_PLUGIN_DIR #
Pfad zum Plugin Verzeichnis.
Standardwert: WP_PLUGIN_DIR

FTP_PRIKEY #
Legt den privaten Schlüssel für SSH fest.

FTP_PUBKEY #
Legt den öffentlichen Schlüssel für SSH fest.

FTP_SSH #
(De)aktiviert SSH.
Werte: true|false

FTP_SSL #
(De)aktiviert SSL.
Werte: true|false

FTP_USER #
Legt den FTP Benutzername fest.

WP_PROXY_BYPASS_HOSTS #
Legt Adressen fest, welche nicht durch den Proxy geleitet werden.
Werte: www.example.com, *.example.org

WP_PROXY_HOST #
Legt die Proxy Adresse fest.
Werte: IP Adresse oder Domain

WP_PROXY_PASSWORD #
Legt das Proxy Passwort fest.

WP_PROXY_PORT #
Legt den Proxy Port fest.

WP_PROXY_USERNAME #
Legt den Proxy Benutzernamen fest

WP_HTTP_BLOCK_EXTERNAL #
(De)aktiviert die Blockierung zu externen Adressen.
Werte: true|false

WP_ACCESSIBLE_HOSTS #
Legt Adressen fest, welche bei definiertem WP_HTTP_BLOCK_EXTERNAL nicht blockiert werden.
Werte: www.example.com, *.example.org

Theme

BACKGROUND_IMAGE #
Legt das Standard Hintergrunddbild fest.

HEADER_IMAGE #
Legt das Standard Kopfzeilenbild fest.

HEADER_IMAGE_HEIGHT #
Legt die Höhe vom Kopfzeilenbild fest.

HEADER_IMAGE_WIDTH #
Legt die Breite vom Kopfzeilenbild fest.

HEADER_TEXTCOLOR #
Legt die Schriftfarbe für die Kopfzeile fest.

NO_HEADER_TEXT #
(De)aktiviert die Unterstützung für Kopfzeilentext.
Werte: true|false

STYLESHEETPATH #
Gibt den absoluten Pfad zu dem Stylesheet des aktuellen Themes wieder.

TEMPLATEPATH #
Gibt den absoluten Pfad zu den Template-Dateien des aktuellen Themes wieder.

WP_USE_THEMES #
(De)aktiviert das Laden des Themes.
Werte: true|false

Debug

SAVEQUERIES #
(De)aktiviert das Speichern aller Datenbankabfragen in eine Variable.
Werte: true|false

SCRIPT_DEBUG #
(De)aktiviert das Laden der komprimierten Javascript und CSS Dateien.
Werte: true|false

WP_DEBUG #
(De)aktiviert den Debug Modus in WordPress.
Werte: true|false (Standardwert: false)

WP_DEBUG_DISPLAY #
(De)aktiviert die Ausgabe von Fehlermeldungen am Bildschirm.
Werte: true|false|null (Standardwert: true)

WP_DEBUG_LOG #
(De)aktiviert das Schreiben von Fehlermeldungen in /wp-content/debug.log.
Werte: true|false (Standardwert: false)

Sicherheit und Cookies

ALLOW_UNFILTERED_UPLOADS #
Erlaubt das ungefilterte Hochladen von Medien für Administratoren.
Wert: true

AUTH_KEY #
Sicherheitsschlüssel.
Werte: Siehe Generator

AUTH_SALT #
Sicherheitsschlüssel.
Werte: Siehe Generator

COOKIEHASH #
Hash für die Namensgenerierung von Cookies.

COOKIEPATH #
Pfad zum WordPress Verzeichnis.
Standardwert: Home URL ohne http(s)://

CUSTOM_TAGS #
Muss gesetzt werden, wenn die Liste der erlaubten HTML Tags überschrieben werden soll. Siehe /wp-includes/kses.php.
Werte: true|false (Standardwert: false)

DISALLOW_FILE_EDIT #
Verbietet das Editieren von Themes und Plugins via WordPress Backend.
Wert: true

DISALLOW_FILE_MODS #
Verbietet das Editieren, Aktualisieren, Installieren und Löschen von Themes, Plugins und dem WordPress Core via WordPress Backend.
Wert: true

DISALLOW_UNFILTERED_HTML #
Verbietet ungefiltertes HTML für alle Benutzer, auch Administratoren.
Wert: true

FORCE_SSL_ADMIN #
Aktiviert SSL für Anmeldungen und für das Backend.
Werte: true|false (Standardwert: false)

FORCE_SSL_LOGIN #
Aktiviert SSL für Anmeldungen.
Werte: true|false (Standardwert: false)

LOGGED_IN_KEY #
Sicherheitsschlüssel.
Werte: Siehe Generator

LOGGED_IN_SALT #
Sicherheitsschlüssel.
Werte: Siehe Generator

NONCE_KEY #
Sicherheitsschlüssel.
Werte: Siehe Generator

NONCE_SALT #
Sicherheitsschlüssel.
Werte: Siehe Generator

SECURE_AUTH_KEY #
Sicherheitsschlüssel.
Werte: Siehe Generator

SECURE_AUTH_SALT #
Sicherheitsschlüssel.
Werte: Siehe Generator

SITECOOKIEPATH #
Pfad, unter welcher die Seite erreicht wird.
Standardwert: Site URL ohne http(s)://

Zeiträume

MINUTE_IN_SECONDS #
Eine Minute in Sekunden.
Standardwert: 60

HOUR_IN_SECONDS #
Eine Stunde in Sekunden.
Standardwert: 60 * MINUTE_IN_SECONDS

DAY_IN_SECONDS #
Ein Tag in Sekunden.
Standardwert: 24 * HOUR_IN_SECONDS

WEEK_IN_SECONDS #
Eine Woche in Sekunden.
Standardwert: 7 * DAY_IN_SECONDS

YEAR_IN_SECONDS #
Ein Jahr in Sekunden.
Standardwert: 365 * DAY_IN_SECONDS

WordPress 3.3: Änderungen bei Javascript Bibliotheken und Funktionen

WordPress 3.3 hat den Status Feature Freeze erreicht. Das heißt, alle Neuerungen, die für WordPress 3.3 geplant waren, sind im Core. Neues wird nicht mehr kommen.

Auf der ToDo Liste für WordPress 3.3 standen auch viele Punkte, die sich rund um Javascript gedreht haben.

WordPress und jQuery

Andrew Ozz, der Javascript Guru für WordPress, hat jetzt eine Liste veröffentlicht, in welcher Entwickler auf die kommenden Änderungen im Bezug auf Javascript informiert werden.

jQuery

jQuery, die Javascript Bibliothek, wurde auf die Version 1.6.4 aktualisiert. In WordPress 3.2.1 befindet sich aktuell die Version 1.6.1.
Hier die Changelogs:

jQuery UI

jQuery UI, die UI Erweiterung für jQuery, wurde auf Version 1.8.16 aktualisiert. In WordPress 3.2.1 befindet sich aktuell die Version 1.8.12.
Hier die Changelogs:

Desweiteren wurde nun die komplette jQuery UI Bibliothek in WordPress aufgenommen. Folgendes ist in WordPress 3.3 verfügbar (Grünes ist Neu):

  • jQuery UI Core
  • jQuery Effects Core
    • Blind
    • Bounce
    • Clip
    • Drop
    • Explode
    • Fade
    • Fold
    • Highlight
    • Pulsate
    • Scale
    • Shake
    • Size
    • Slide
    • Transfer
  • jQuery UI Widget
    • Accordion
    • Autocomplete
    • Button
    • Datepicker
    • Dialog
    • Progressbar
    • Slider
    • Tabs
  • jQuery UI Draggable
  • jQuery UI Droppable
  • jQuery UI Mouse
  • jQuery UI Position
  • jQuery UI Resizable
  • jQuery UI Selectable
  • jQuery UI Sortable

WordPress Editor API

Die Editor API hat ein großes Update bekommen. Nicht nur TinyMCE wurde auf den neusten Stand, Version 3.4.5, denn mit WordPress 3.3 ist es auch möglich, den Editor samt Medienuploader, auch ins Frontend zu holen. Im Ticket #17144 gibt es dazu auch ein Beispielplugin.

Quicktags

Mit der Überarbeitung der Quicktags API ist es unter anderem möglich mehrere Instanzen von Quicktags auf einer Seite zu verwenden. Weitere Infos dazu im Ticket #16695.

Neuer Medienuploader – Plupload

Plupload hat es als einziges Google Summer of Code Projekt in WordPress 3.3 geschafft.
Plupload ist stabiler als SWFUpload und hat mehrere Features, wie Drag & Drop, automatische Größenänderung sowie HTML5 Support. Siehe Ticket #18206.

Geänderte Funktionen

Dazu zählt zum Einem wp_enqueue_script(). Vor WordPress 3.3 konnte ein registriertes Skript, welches zum Beispiel erst im the_content Hook eingebunden wurde, nicht im Footer geladen werden. Dies ist nun möglich, dank des drei Jahre alten Tickets #9346

Ab WordPress 3.3 verwendet die Funktion wp_localize_script(), welche zum Übersetzen von Javascript Texten oder Übergeben von Variablen genutzt wird, zur Ausgabe json_encode(). Damit fällt unter anderem die lästige l10n.js Datei weg. Weitere Infos im Ticket #11520.

Weitere Neuerungen sind aktuell noch die Feature Pointers oder die Option Auto für das Bildschirm-Layout.

Breadcrumb Navigation für WordPress

Seit ein paar Tagen verwende ich hier im Blog eine sogenannte Breadcrumb Navigation, zu Deutsch Brotkrümelnavigation.
Sie soll einem helfen sich auf der Seite zu orientieren und gibt an, wo man sich gerade befindet.

Für WordPress gibt es dafür eine mehrere handvoll Plugins.

Da die Plugins aber für mein Vorhaben nicht gereicht haben, habe ich mir eine Breadcrumb Klasse geschrieben, welche ich euch hier auch bereitstellen möchte.

Die Klasse…

  • …unterstützt (Custom) Post Types, (Custom) Taxonomies und jede Art von Archiv.
  • …kann mit Beiträgen oder eine statischen Seite als Startseite umgehen.
  • …kann individuell mit Hilfe von Parametern angepasst werden.

Folgend nun die PHP Klasse:

PHP / RAW / github:gist
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
<?php
/**
 * Klasse zum Erstellen einer WordPress Breadcrumb Navigation.
 *
 * @author Dominik Schilling
 * @license GPLv2
 * @link https://dominikschilling.de/204/
 *
 * @version 0.1.1
 */
class DS_WP_Breadcrumb {
	/**
	 * The list of breadcrumb items.
	 *
	 * @var array
	 * @since 1.0.0
	 */
	public $breadcrumb;

	/**
	 * Templates for link, current/standard state and before/after.
	 *
	 * @var array
	 */
	public $templates;

	/**
	 * Various strings.
	 *
	 * @var array
	 */
	public $strings;

	/**
	 * Various options.
	 *
	 * @var array
	 * @access public
	 */
	public $options;

	/**
	 * Constructor.
	 *
	 * @param array $templates An array with templates for link, current/standard state and before/after.
	 * @param array $options An array with options.
	 * @param array $strings An array with strings.
	 * @param bool $autorun Autorun or not.
	 * @return string
	 */
	public function __construct( $templates = array(), $options = array(), $strings = array(), $autorun = true ) {
		$this->templates = wp_parse_args(
			$templates,
			array(
				'link' => '<a href="%s">%s</a>',
				'current' => '<span class="c">%s</span>',
				'standard' => '<span class="s">%s</span>',
				'before' => '<nav>',
				'after' => '</nav>'
			)
		);
		$this->options = wp_parse_args( $options, array(
			'separator' => ' › ',
			'posts_on_front' => 'posts' == get_option( 'show_on_front' ) ? true : false,
			'page_for_posts' => get_option( 'page_for_posts' ),
			'show_pagenum' => true, // support pagination
			'show_htfpt' => false // show hierarchical terms for post types
		) );
		$this->strings = wp_parse_args( $strings, array(
			'home' => 'Startseite',
			'search' => array(
				'singular' => 'Ein Suchergebnis zu <em>%s</em>',
				'plural'   => '%s Suchergebnisse zu <em>%s</em>'
			),
			'paged' => 'Seite %d',
			'404_error' => 'Fehler: Seite existiert nicht'
		) );

		// Generate breadcrumb
		if ( $autorun)
			echo $this->output();
	}

	/**
	 * Return the final breadcrumb.
	 *
	 * @return string
	 */
	public function output() {
		if ( empty( $this->breadcrumb ) )
			$this->generate();

		$breadcrumb = (string) implode( $this->options['separator'], $this->breadcrumb );

		return $this->templates['before'] . $breadcrumb . $this->templates['after'];
	}

	/**
	 * Build the item based on the type.
	 *
	 * @param string|array $item
	 * @param string $type
	 * @return string
	 */
	protected function template( $item, $type = 'standard' ) {
		if ( is_array( $item ) )
			$type = 'link';

		switch ( $type ) {
			case'link':
				return $this->template(
					sprintf(
						$this->templates['link'],
						esc_url( $item['link'] ),
						$item['title']
					)
				);
				break;
			case 'current':
				return sprintf( $this->templates['current'], $item );
				break;
			case 'standard':
				return sprintf( $this->templates['standard'], $item );
				break;
		}
	}

	/**
	 * Helper to generate taxonomy parents.
	 *
	 * @param mixed $term_id
	 * @param mixed $taxonomy
	 * @return void
	 */
	protected function generate_tax_parents( $term_id, $taxonomy ) {
		$parent_ids = array_reverse( get_ancestors( $term_id, $taxonomy ) );

		foreach ( $parent_ids as $parent_id ) {
			$term = get_term( $parent_id, $taxonomy );
			$this->breadcrumb["archive_{$taxonomy}_{$parent_id}"] = $this->template( array(
				'link' => get_term_link( $term->slug, $taxonomy ),
				'title' => $term->name
			) );
		}
	}

	/**
	 * Generate the breadcrumb.
	 *
	 * @return void
	 */
	public function generate() {
		$post_type = get_post_type();
		$queried_object = get_queried_object();
		$this->options['show_pagenum'] = ( $this->options['show_pagenum'] && is_paged() ) ? true : false;


		// Home & Front Page
		$this->breadcrumb['home'] = $this->template( $this->strings['home'], 'current' );
		$home_linked = $this->template( array(
			'link' => home_url( '/' ),
			'title' => $this->strings['home']
		) );


		if ( $this->options['posts_on_front'] ) {
			if ( ! is_home() || $this->options['show_pagenum'] )
				$this->breadcrumb['home'] = $home_linked;
		} else {
			if ( ! is_front_page() )
				$this->breadcrumb['home'] = $home_linked;

			if ( is_home() && !$this->options['show_pagenum'] )
				$this->breadcrumb['blog'] = $this->template( get_the_title( $this->options['page_for_posts'] ), 'current' );

			if ( ( 'post' == $post_type && ! is_search() && ! is_home() ) || ( 'post' == $post_type && $this->options['show_pagenum'] ) )
				$this->breadcrumb['blog'] = $this->template( array(
					'link' => get_permalink( $this->options['page_for_posts'] ),
					'title' => get_the_title( $this->options['page_for_posts'] )
				) );
		}

		// Post Type Archive as index
		if ( is_singular() || ( is_archive() && ! is_post_type_archive() ) || is_search() || $this->options['show_pagenum'] ) {
			if ( $post_type_link = get_post_type_archive_link( $post_type ) ) {
				$post_type_label = get_post_type_object( $post_type )->labels->name;
				$this->breadcrumb["archive_{$post_type}"] = $this->template(
					array(
					'link' => $post_type_link,
					'title' => $post_type_label
				) );
			}
		}

		if ( is_singular() ) { // Posts, (Sub)Pages, Attachments and Custom Post Types
			if ( ! is_front_page() ) {
				if ( $this->options['show_htfpt'] ) {
					$_id = $queried_object->ID;
					$_post_type = $post_type;

					if ( is_attachment() ) {
						// Show terms of the parent page
						$_id = $queried_object->post_parent;
						$_post_type = get_post_type( $_id );
					}

					$taxonomies = get_object_taxonomies( $_post_type, 'objects' );
					$taxonomies = array_values( wp_list_filter( $taxonomies, array(
						'hierarchical' => true
					) ) );

					if ( ! empty( $taxonomies ) ) {
						$taxonomy = $taxonomies[0]->name; // Get the first taxonomy
						$terms = get_the_terms( $_id, $taxonomy );

						if ( ! empty( $terms ) ) {
							$terms = array_values( $terms );
							$term = $terms[0]; // Get the first term

							if ( 0 != $term->parent )
								$this->generate_tax_parents( $term->term_id, $taxonomy );

							$this->breadcrumb["archive_{$taxonomy}"] = $this->template( array(
								'link' => get_term_link( $term->slug, $taxonomy ),
								'title' => $term->name
							) );
						}
					}
				}

				if ( 0 != $queried_object->post_parent ) { // Get Parents
					$parents = array_reverse( get_post_ancestors( $queried_object->ID ) );

					foreach ( $parents as $parent ) {
						$this->breadcrumb["archive_{$post_type}_{$parent}"] = $this->template( array(
							'link' => get_permalink( $parent ),
							'title' => get_the_title( $parent )
						) );
					}
				}


				$this->breadcrumb["single_{$post_type}"] = $this->template( get_the_title(), 'current' );
			}
		} elseif ( is_search() ) { // Search
			$total = $GLOBALS['wp_query']->found_posts;
			$text = sprintf(
				_n(
					$this->strings['search']['singular'],
					$this->strings['search']['plural'],
					$total
				),
				$total,
				get_search_query()
			);

			$this->breadcrumb['search'] = $this->template( $text, 'current' );

			if ( $this->options['show_pagenum'] )
				$this->breadcrumb['search'] = $this->template( array(
					'link' => home_url( '?s=' . urlencode( get_search_query( false ) ) ),
					'title' => $text
				) );
		} elseif ( is_archive() ) { // All archive pages
			if ( is_category() || is_tag() || is_tax() ) { // Categories, Tags and Custom Taxonomies
				$taxonomy = $queried_object->taxonomy;

				if ( 0 != $queried_object->parent && is_taxonomy_hierarchical( $taxonomy ) ) // Get Parents
					$this->generate_tax_parents( $queried_object->term_id, $taxonomy );

				$this->breadcrumb["archive_{$taxonomy}"] = $this->template( $queried_object->name, 'current' );

				if ( $this->options['show_pagenum'] )
					$this->breadcrumb["archive_{$taxonomy}"] = $this->template( array(
						'link' => get_term_link( $queried_object->slug, $taxonomy ),
						'title' => $queried_object->name
					) );

			} elseif ( is_date() ) { // Date archive
				if ( is_year() ) { // Year archive
					$this->breadcrumb['archive_year'] = $this->template( get_the_date( 'Y' ), 'current' );

					if ( $this->options['show_pagenum'] )
						$this->breadcrumb['archive_year'] = $this->template( array(
							'link' => get_year_link( get_query_var( 'year' ) ),
							'title' => get_the_date( 'Y' )
						) );
				} elseif ( is_month() ) { // Month archive
					$this->breadcrumb['archive_year'] = $this->template( array(
						'link' => get_year_link( get_query_var( 'year' ) ),
						'title' => get_the_date( 'Y' )
					) );
					$this->breadcrumb['archive_month'] = $this->template( get_the_date( 'F' ), 'current' );

					if ( $this->options['show_pagenum'] )
						$this->breadcrumb['archive_month'] = $this->template( array(
							'link' => get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) ),
							'title' => get_the_date( 'F' )
						) );
				} elseif ( is_day() ) { // Day archive
					$this->breadcrumb['archive_year'] = $this->template( array(
						'link' => get_year_link( get_query_var( 'year' ) ),
						'title' => get_the_date( 'Y' )
					) );
					$this->breadcrumb['archive_month'] = $this->template( array(
						'link' => get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) ),
						'title' => get_the_date( 'F' )
					) );
					$this->breadcrumb['archive_day'] = $this->template( get_the_date( 'j' ) );

					if ( $this->options['show_pagenum'] )
						$this->breadcrumb['archive_day'] = $this->template( array(
							'link' => get_month_link(
								get_query_var( 'year' ),
								get_query_var( 'monthnum' ),
								get_query_var( 'day' )
							),
							'title' => get_the_date( 'F' )
						) );
				}
			} elseif ( is_post_type_archive() && ! is_paged() ) { // Custom Post Type Archive
				$post_type_label = get_post_type_object( $post_type )->labels->name;
				$this->breadcrumb["archive_{$post_type}"] = $this->template( $post_type_label, 'current' );
			} elseif ( is_author() ) { // Author archive
				$this->breadcrumb['archive_author'] = $this->template( $queried_object->display_name, 'current' );
			}
		} elseif ( is_404() ) {
			$this->breadcrumb['404'] = $this->template( $this->strings['404_error'], 'current' );
		}

		if ( $this->options['show_pagenum'] )
			$this->breadcrumb['paged'] = $this->template(
				sprintf(
					$this->strings['paged'],
					get_query_var( 'paged' )
				),
				'current'
			);
	}
}
?>

Beispiel

Um die Klasse im Theme nutzen zu können, kann man eine kleine Helfer-Funktion schreiben. Diese könnte so aussehen:

PHP / RAW / github:gist
<?php
function ds_breadcrumb() {
	require_once( TEMPLATEPATH . '/inc/class-wordpress-breadcrumb.php' );

	$templates = array(
		'before' => '<nav id="breadcrumb"> Du bist hier » <ul>',
		'after' => '</ul></nav>',
		'standard' => '<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">%s</li>',
		'current' => '<li class="current">%s</li>',
		'link' => '<a href="%s" itemprop="url"><span itemprop="title">%s</span></a>'
	);
	$options = array(
		'show_htfpt' => true
	);

	$breadcrumb = new DS_WP_Breadcrumb( $templates, $options );
}

Jetzt im Theme die Funktion ds_breadcrumb() nur noch aufrufen. Fertig.

Anmerkung

Mit dem HTML5 Beispiel von oben kann Google auch etwas anfangen, siehe hier. Die Suchergebnisse könnten dann so aussehen:

WordPress Breadcrumb in der Google Suche

WordPress 3.3: Widgets bleiben beim Themewechsel erhalten

Ich denke mal Einige kennen es: Das WordPress Theme wird, um zum Beispiel ein Wartungs-Theme zu aktivieren, gewechselt. Nachdem die Wartung beendet ist, wird das alte Theme wieder aktiviert.
Und dann ist es auch schon passiert. Die Widgets befinden sich nicht mehr an ihren gedachten Platz in der Sidebar.

Mit WordPress 3.3 ist damit Schluss! WordPress wird bei einem Themewechsel die alten Widgets samt Position und Einstellungen für eine Woche speichern.
Wird innerhalb dieser Woche das Theme wieder zurückgewechselt werden die alten Widgets wieder in die Sidebar geladen. Damit entfällt das lästige Neusortieren.

Widget Integration ins neue Theme

In der für November geplanten Version wird außerdem versucht, die Widgets des alten Themes in das neue Theme zu integrieren.

Beispiel: Das Theme Twenty Ten, welches mit 6 Sidebars daherkommt, ist aktiviert. Jede Sidebar hat ein Widget.

Twenty Ten mit 6 Sidebars
Twenty Ten mit 6 Sidebars

Nun möchtest du aber das neue Theme Twenty Eleven nutzen und wechselst das Theme.

WordPress wird dann damit beginnen, die alten Widgets in das neue Theme zu integrieren. Das heißt, die Widgets aus der alten ersten Sidebar kommen in die neue erste Sidebar.
Da Twenty Ten nur fünf Sidebars hat, werden die Widgets aus der sechsten alten Sidebar in einem neuem Feld Inactive Sidebar (from previous theme) abgelegt.

Das kann dann so aussehen:

WordPress 3.3: Inactive Sidebar (from previous theme)
WordPress 3.3: Inactive Sidebar (from previous theme)

Was haltet ihr von dem Feature? Endlich oder Widgets nutzte ich sowieso nicht?

Google +1 Button via jQuery und Ajax asynchron laden

JavaScript / RAW / github:gist
( function( $ ) {
	$( document ).ready( function() {
		// Skript wird nur geladen, wenn ein Artikel in der Einzelansicht angezeigt wird.
		if ( $( 'body.single' ).length ) {
			$.ajax( {
				type: 'GET',
				url: 'https://apis.google.com/js/plusone.js', // Link zur plusone.js Datei.
				timeout: 1000, // Passiert innerhalb von 1000ms nichts, wird der Ladevorgang abgebrochen.
				dataType: 'script',
				cache: true, // Javascript Datei cachen lassen.
				success:
					function() { // Bei Erfolg Variable lang auf de setzen.
						window.___gcfg = { lang: 'de' };
					},
				error:
					function() { // Bei einem Fehler kann z.B. etwas entfernt werden.
						$( '.google' ).parent().hide();
					}
			} );
		};
	} );
} )( jQuery );

Hinweis

Dieser Codeschnipsel eignet sich natürlich nur, wenn jQuery schon anderweitig genutzt wird.
Weitere Informationen gibt es auf der offiziellen Seite des +1 Button Generators.