post_class() um Klasse für Elternkategorie erweitern

Die Funktion post_class() kann standardmäßig folgende Klassen ausgeben:

  • .post-id
  • .post
  • .attachment
  • .sticky
  • .hentry (hAtom microformat pages)
  • .category-ID
  • .category-name
  • .tag-name
  • .format-name

Leider wird aber keine Klasse für den Namen der Elternkategorie ausgegeben, folgende Funktion für die functions.php löst dieses Problem.

PHP / RAW / github:gist
<?php
/**
 * Erweitert post_class() um eine Klasse für Elternkategorien.
 *
 * @author Dominik Schilling
 * @license GPLv2
 * @link https://dominikschilling.de/178/
 *
 * @version 0.2
 */
function ds_add_parent_category_class( $classes ) {
    $cats = get_the_category();

    if ( empty( $cats ) )
        return $classes;

    foreach ( $cats as $cat ) {
        $parent_cat = get_category( $cat->category_parent );
        if ( ! is_wp_error( $parent_cat ) )
            $classes[] = 'parent-category-' . sanitize_html_class( $parent_cat->slug, $parent_cat->term_id );
    }

    return $classes;
}

add_filter( 'post_class', 'ds_add_parent_category_class' );

Beispiel

Einem Artikel ist die Kategorie Plugins zugeordnet. Plugins ist eine Unterkategorie von WordPress.
Die Ausgabe von post_class() könnte dann folgendermaßen aussehen:

<div class="post-151 post type-post status-publish format-standard hentry category-plugins parent-category-wordpress">

Seitenbasis /page/ für Permalinks anpassen

WordPress kann man zwar mit Sprachdateien bestücken, allerdings kann und wird nicht alles übersetzt.
So bleiben zum Beispiel die Permalinks meistens noch in Englisch. So auch der Slug für die Seitennavigation: example.de/page/2.
WordPress wäre aber nicht WordPress, wenn es da nicht auch eine Möglichkeit gäbe, dies zu ändern.
Folgender Schnipsel für die functions.php zeigt dies.

PHP / RAW / github:gist
<?php
/**
 * Setzt die Seitenbasis für die Permalinkgenerierung auf /seite/ (Standard: /page/).
 *
 * @author Dominik Schilling
 * @license GPLv2
 * @link https://dominikschilling.de/141/
 *
 * @version 0.1
 */
function ds_set_pagination_base() {
 	global $wp_rewrite;

	$wp_rewrite->pagination_base = 'seite';
}

add_action( 'init', 'ds_set_pagination_base' );

Diese Änderung kann übrigens auch für die Basen $author_base, $search_base, $comments_base und $feed_base übernommen werden, siehe dazu auch /wp-includes/rewrite.php.

Hinweis

Mit dieser Funktion wird erstmal nur die Basis für die Permalinkgenerierung geändert. Das heißt die Permalinks müssen jetzt noch generiert werden.
Dazu einmal die Seite /wp-admin/options-permalink.php im Browser deiner Wahl öffnen und gegebenfalls den Änderungen übernehmen Button klicken.

Zuordnung einer Taxonomy zu einem Post Type prüfen

Man befindet sich in einem Taxonomy Archiv eines bestimmten Post Type und möchte gerne in der archive.php einen passenden Titel ausgeben.

Beispiel:
Es existieren die Taxonomien Version und Schwierigkeitsgrad welche dem Post Type Schnipsel zugeordnet sind.
Für beide Archive soll der Titel Schnipsel Archiv ausgeben werden.

Um dies zu realisieren wird folgende Funktion für die functions.php benötigt.

PHP / RAW / github:gist
<?php
/**
 * Prüft, ob eine gegebene oder aktuell nachgefragte Taxonomy einem gegebenen Post Type zugeordnet ist.
 *
 * @author Dominik Schilling
 * @license GPLv2
 * @link https://dominikschilling.de/137/
 *
 * @version 0.1 
 * @param object|string $post_type
 * @param string $taxonomy Optional. Standardwert ist null.
 * @return bool True wenn Taxonomy dem Post Type zugeordnet ist, false wenn nicht und bei fehlerhafter Eingabe.
 */
function ds_is_taxonomy_assigned_to_post_type( $post_type, $taxonomy = null ) {	
	if ( is_object( $post_type ) )
		$post_type = $post_type->post_type;

	if ( empty( $post_type ) )
		return false;

	$taxonomies = get_object_taxonomies( $post_type );

	if ( empty( $taxonomy ) )
		$taxonomy = get_query_var( 'taxonomy' );

	return in_array( $taxonomy, $taxonomies );
}

Nachdem diese Funktion implementiert ist, kann mit Hilfe dieses Schnipsels die Zugehörigkeit überprüft und entsprechend reagiert werden.

PHP / RAW / github:gist
<?php
if ( ds_is_taxonomy_assigned_to_post_type( 'schnipsel' ) )
	echo '<h3>Schnipsel Archiv</h3>';
else
	echo '<h3>Archiv</h3>';