it-swarm.com.de

Benutzerdefinierter einzelner Beitrag nach Kategorie

Ich versuche, mich mit der Terminologie der Vor- und Nachteile von WordPress vertraut zu machen, also entschuldige ich mich.

Ich richte mit WordPress und einer benutzerdefinierten Vorlage eine vollständige Website ein, die auf TwentyTen basiert.

Ich versuche so viel wie möglich unter dem Beitragstyp "Beitrag" zu haben, und die Listen-Seiten der obersten Ebene sind nur die Kategorieseiten.

Eine Kategorie ist "Arbeit"

Ich konnte diese anpassen, indem ich benutzerdefinierte category-work.php- und loop-work.php-Dateien erstellte. Aber wie mache ich einen benutzerdefinierten einzelnen Beitrag nach Kategorie?

Es sieht so aus, als würde eine single-work.php nach einem benutzerdefinierten Beitragstyp namens "work" suchen. Gibt es eine Möglichkeit, einen single.php-modifizierten Klon zu erstellen, der durch Kategorie/Kategorie-Slug ausgelöst wird?

3
Keefer

Mache deine single.php wie folgt:

<?php
$post = $wp_query->post;

if ( in_category( 'work' ) ) {
  include( TEMPLATEPATH.'/single-work-cat.php' );
} 
else {
  include( TEMPLATEPATH.'/single-generic.php' );
}
?>

und machen Sie single-work-cat.php zu der Vorlage, die Sie für einzelne Arbeitskategorie-Posts anzeigen möchten, und single-generic.php zu der, die Sie in allen anderen Fällen anzeigen möchten. Fügen Sie für weitere Kategorien einfach weitere elseif-Anweisungen hinzu und erstellen Sie neue einzelne Vorlagen.

8
artparks

Mir ist klar, dass dies eine alte Frage ist, aber falls jemand beim Durchsuchen desselben Themas etwas findet, denken Sie daran, dass Sie keine include-Anweisungen in Ihren WordPress-Themes verwenden sollten. Verwenden Sie stattdessen immer get_template_part () oder locate_template () .

(siehe http://make.wordpress.org/themes/guidelines/guidelines-theme-check/ )

Der folgende Code verwendet WordPress-Filter, um die Aufgabe auszuführen, und sucht automatisch nach Vorlagen für alle Kategorien:

/**
 * Replace "themeslug" with your theme's unique slug
 *
 * @see http://codex.wordpress.org/Theme_Review#Guidelines
 */
add_filter( 'single_template', 'themeslug_single_template' );

/**
 * Add category considerations to the templates WordPress uses for single posts
 *
 * @global obj $post The default WordPress post object. Used so we have an ID for get_post_type()
 * @param string $template The currently located template from get_single_template()
 * @return string The new locate_template() result
 */
function themeslug_single_template( $template ) {
    global $post;

    $categories = get_the_category();

    if ( ! $categories )
        return $template; // no need to continue if there are no categories

    $post_type = get_post_type( $post->ID );

    $templates = array();

    foreach ( $categories as $category ) {

        $templates[] = "single-{$post_type}-{$category->slug}.php";

        $templates[] = "single-{$post_type}-{$category->term_id}.php";
    }

    // remember the default templates

    $templates[] = "single-{$post_type}.php";

    $templates[] = 'single.php';

    $templates[] = 'index.php';

    /**
     * Let WordPress figure out if the templates exist or not.
     *
     * @see http://codex.wordpress.org/Function_Reference/locate_template
     */
    return locate_template( $templates );
}

Es gibt ein paar Schwachstellen im Code. Erstens bedeutet dies, dass WordPress locate_template () zweimal für einzelne Beiträge ausführt (einmal vor Ausführung dieser Funktion und einmal während). Zweitens glaube ich nicht, dass es eine saubere Möglichkeit gibt, Prioritäten für die Kategorien zu setzen, nach denen zuerst gesucht werden soll. Dies bedeutet, dass Sie nicht auswählen müssen, welche Vorlage verwendet wird, wenn sich Ihr Beitrag in mehreren Kategorien mit eindeutigen Vorlagen für einzelne Beiträge befindet.

3
Michael Dozark