Template Hierarchie Tag- {slug} .php Verzeichnis

Wenn sich tag-{slug}.php im Stammverzeichnis von theme befindet, sagen wir wp-content/themes/p2/tag-{slug}.php , wird die Template-Hierarchie respektiert.

Ich habe jedoch viele solcher benutzerdefinierten Dateien und kann es einfach nicht im Stammverzeichnis des Designs haben. Als ich mit p2/tag und p2/custom-tag Verzeichnissen getestet habe, hat es nicht funktioniert.

Irgendeine Einsicht?

Solutions Collecting From Web of "Template Hierarchie Tag- {slug} .php Verzeichnis"

Wenn Sie sich den Quellcode ansehen, wird die Tag-Vorlage wie folgt in der Vorlagenhierarchie geladen

  • elseif ( is_tag() && $template = get_tag_template() ) : in wp-includes/template-loader.php

  • get_tag_template() verwendet get_query_template() , das locate_template()

  • Das lädt die Tag-Vorlage gemäß der Hierarchie aus dem Thema Stammordner

Das Verschieben Ihrer Vorlagen in einen Unterordner funktioniert also nicht sofort. get_query_template() jedoch einen Filter ( apply_filters( "{$type}_template", $template ) ), mit dem wir dieses Verhalten ändern und unser tag-{$tag->slug}.php aus einem Unterordner tag-{$tag->slug}.php

Also sollten wir Folgendes tun

  • Überprüfen Sie, ob unser tag-{$tag->slug}.php in unserem Unterordner tag-{$tag->slug}.php Wahl existiert

  • Laden Sie unser tag-{$tag->slug}.php aus dem Unterordner, falls es existiert

  • Laden Sie Standardvorlagen aus der Hierarchie, wenn das tag-{$tag->slug}.php in einem Unterordner nicht existiert

Etwas wie das Folgende wird funktionieren

 add_filter( 'tag_template', function ( $template ) { $tag = get_queried_object(); // Alternative path to desired template $alternative_template = locate_template( "custom-sub-folder/tag-{$tag->slug}.php" ); // Change subfolder name // If we do have "tag-{$tag->slug}.php" in a subfolder, load "subfolder/tag-{$tag->slug}.php" if ( $alternative_template ) return $template = $alternative_template; // If we don't have a "tag-{$tag->slug}.php", load templates according to hierarchy return $template; });