Schlagwortarchiv für: functions.php

Aus aktuellem Anlass Notiz an mich selbst: wenn man die Einzelansicht der Beiträge in einer bestimmten Kategorie mit einer eigenen Seitenvorlage darstellen will, dann reicht das folgende Codeschnipsel in der functions.php:

//Fragt den slug der Kategorie des Beitrags ab und wendet single-[kategorieslug].php als Template an, wenn vorhanden
add_filter('single_template', create_function(
  '$the_template',
  'foreach( (array) get_the_category() as $cat ) {
    if ( file_exists(TEMPLATEPATH . "/single-{$cat->slug}.php") )
      return TEMPLATEPATH . "/single-{$cat->slug}.php"; }
    return $the_template;' )
);

Wenn man ein Child-Theme nutzt, muss man noch TEMPLATEPATH durch STYLESHEETPATH ersetzen. Danach noch eine Vorlagendatei im Template-Verzeichnis erzeugen, die single-[kategorieslug].php heißt (Kategorieslug durch den Kurznamen der gewünschten Kategorie ersetzen) – fertig.

Quelle: WordPress-Forum

Wenn man WordPress-Themes entwickelt oder den Auftrag zur Weiterbearbeitung bekommt, ist es oft wichtig herauszufinden, mit welcher Template-Datei die aktuell angezeigte Seite gerendert wird. Das lässt sich einfach herausfinden: einfach den folgenden Codeschnipsel in die Datei functions.php des verwendeten Themes kopieren, dann wird die verwendete Template-Datei für eingeloggte User in einem HTML-Kommentar im Header der Seite ausgegeben:
add_action('wp_head', 'show_template');
function show_template() {
global $template;
if(is_user_logged_in()) {
echo '\n\n<!--// Template: '; print_r($template); echo '//-->\n\n';
}
}

Das Plugin W3 Total Cache ist eine tolle Möglichkeit, die eigene Website deutlich schneller zu machen. Wenn man Beiträge nachträglich ändert oder Seiten speichert, muss man jedoch den Cache manuell leeren, damit die Änderungen auf der Website sichtbar werden. Dafür gibts das Plugin W3 Total Cache Purge All Page, das den Cache leert, sobald man einen bestehenden Beitrag ändert.

Sofern man aber auch Benutzerdaten in seine Pages eingebunden hat, reicht das nicht aus – denn wenn ein Benutzer seine Daten ändert, werden nach wie vor die alten Daten aus dem Cache auf der Website angezeigt. Das lässt sich mit wenigen Zeilen Code in der Datei functions.php beheben:

/* Cache leeren, wenn Benutzerdaten gespeichert werden */
function xyz_clearCache()  {
	if (function_exists('w3tc_pgcache_flush')) {
		w3tc_pgcache_flush();
	} 
   return true;
}
add_action('user_register', 'xyz_clearCache');
add_action('profile_update', 'xyz_clearCache');

Kontaktfelder kann man sehr einfach zum WordPress-Benutzerprofil hinzufügen oder entfernen. Einfach dieses Codeschnipsel in die functions.php einfügen:

// Kontaktmethoden hinzufügen

add_filter('user_contactmethods', 'meine_neuen_kontaktfelder');
              
function meine_neuen_kontaktfelder($user_contactmethods){
 
    // Neue Felder hinzufügen (Name / Beschriftung)
  $kontaktfelder['twitter'] = 'Twitter @username';
  $kontaktfelder['facebook'] = 'Facebook URL';
  $kontaktfelder['gplus'] = 'Google+ URL';
  
  // Nicht benötigte Felder entfernen
  unset($kontaktfelder['yim']);
  unset($kontaktfelder['aim']);
  unset($kontaktfelder['jabber']);
 
  return $kontaktfelder;
}

Der Abruf im Theme erfolgt wie bei anderen Benutzer-Metadaten:

$metadata = get_user_meta($benutzerID);

echo "Twitter:  ".$metadata['twitter'][0];
echo "Facebook: ".$metadata['facebook'][0];
echo "Google+:  ".$metadata['gplus'][0];

Normalerweise kann jeder Benutzer die Meta-Boxen rund um den Editor selbst zuschalten oder wegschalten (im Editorfenster rechts oben unter “Optionen”), bei Kundenprojekten kann es aber sinnvoll sein, manche der Boxen serienmäßig aus- oder einzuschalten oder deren Reihenfolge vorab festzulegen. Das geht mit ein bißl Bastelei recht flott:

– In den Verwaltungsbereich einloggen, das Editorfenster für Beiträge aufrufen (z.B. mit “Beitrag -> Erstellen”) und rechts oben unter “Optionen” alle Boxen wegschalten, die nicht gebraucht werden.

–  Mindestens eine der Boxen an eine neue Position ziehen. Das kann man unmittelbar danach wieder rückgängig machen, aber so wird der entsprechende Eintrag in der Datenbanktabelle wp_usermeta angelegt.

– Nun kann man in der Datenbanktabelle wp_usermeta die Einträge

meta-box-order_post
metaboxhidden_post

zur eigenen Benutzer-ID suchen. Dort stehen die Reihenfolge der Boxen sowie die versteckten Boxen drin (zwar nicht ganz im Klartext, aber es sollte kein Problem sein).

– In der functions.php folgendes Codeschnipsel einfügen und entsprechend anpassen:

// Reihenfolge und eingeschaltete Editorboxen definieren
add_action('admin_init', 'set_user_metaboxes');
function set_user_metaboxes($user_id=NULL) {
    // aktuelle User-ID herausfinden
    if ( ! $user_id) $user_id = get_current_user_id(); 
    // 1. Reihenfolge für Meta-Boxen bei Beiträgen festlegen
    if ( ! get_user_meta( $user_id, 'meta-box-order_post', true) ) {
        $meta_value = array(
            'side' => 'categorydiv,submitdiv,postimagediv',
            'normal' => 'revisionsdiv,postcustom,commentstatusdiv,commentsdiv,slugdiv,authordiv',
            'advanced' => '',
            );
        update_user_meta( $user_id, 'meta-box-order_post', $meta_value );
	}
    // 2. Versteckte Meta-Boxen bei Beiträgen festlegen
    if ( ! get_user_meta( $user_id, 'metaboxhidden_post', true) ) {
        $meta_value = array('page_option_choice','postexcerpt','trackbacksdiv','postcustom','slugdiv'); 
        update_user_meta( $user_id, 'metaboxhidden_post', $meta_value ); 
        }
    // Hier ggf. noch gleichlautende Codes für Pages oder benutzerdefinierte Typen hinzufügen 
        // 1. Reihenfolge für Meta-Boxen bei Seiten festlegen (Code von oben anpassen)
        // 2. Versteckte Meta-Boxen bei Seiten festlegen (Code von oben anpassen)
 } // Ende der Funktion

– Für den Seiten-Editor lauten die entsprechenden Einträge in der wp_usermeta entsprechend metaboxhidden_page und meta-box-order_page, für benutzerdefinierte Beitragstypen metaboxhidden_TYPE und meta-box-order_TYPE, ansonsten bleibt die Vorgangsweise gleich.