it-swarm.com.de

Ist es möglich, eine Vorlage für einen benutzerdefinierten Beitragstyp in einem Plugin unabhängig vom aktiven Thema zu definieren?

Ich schreibe ein Plugin, um Daten über Open-Source-Projekte zu verwalten. Ich habe ein Objektmodell entwickelt und alle benutzerdefinierten Beitragstypen und Taxonomien erfolgreich erstellt sowie die richtigen Funktionen/Rollen mithilfe des Plugins Members implementiert. Die entsprechenden Benutzer können ihre eigenen Posts erstellen, ändern und löschen, und Administratoren können sie genehmigen sowie die Posts anderer ändern und löschen.

Mein Problem ist, dass ich die Vorlage für ein einzelnes Projekt und für eine Liste von Projekten definieren möchte (einzeln und archiviert, glaube ich - ich habe auf dieser Ebene noch nie mit Wordpress gearbeitet), aber ich möchte nicht, dass sich The Loop darauf verlässt Klicken Sie auf das aktuelle Thema, um die Seite für ein einzelnes Projekt oder eine Liste von Projekten zu rendern. Wenn ich das TwentyTen-Design verwende, soll es die Vorlage meines Plugins für diese benutzerdefinierten Beitragstypen verwenden. Wenn ich das TwentyEleven-Thema verwende, möchte ich dennoch, dass die Vorlage meines Plugins für diese benutzerdefinierten Beitragstypen verwendet wird.

Ich möchte, dass dies dem Paradigma "Es funktioniert einfach" entspricht, aber im Moment können Benutzer den Ordner nicht einfach in das Plugin-Verzeichnis ablegen - sie müssen die entsprechenden Dateien bei jedem Themenwechsel zu ihrem Themenordner hinzufügen. Ich habe die Vorlagenhierarchie ausgecheckt und die Dateinamen sind korrekt, aber sie werden von Wordpress nicht verwendet, wenn sie sich im Plugin-Ordner oder im Plugin/Templates-Ordner befinden.

Vielen Dank!

7
ZachM

Sie müssen den template_include-Filter verwenden, der der generische Filter für alle Vorlageneinschlüsse ist.

add_filter( 'template_include', 'my_plugin_templates' );
function my_plugin_templates( $template ) {
    $post_types = array( 'project' );

    if ( is_post_type_archive( $post_types ) && ! file_exists( get_stylesheet_directory() . '/archive-project.php' ) )
        $template = 'path/to/list/template/in/plugin/folder.php';
    if ( is_singular( $post_types ) && ! file_exists( get_stylesheet_directory() . '/single-project.php' ) )
        $template = 'path/to/singular/template/in/plugin/folder.php';

    return $template;
}

Ich habe das Post-Type-Archiv-Bit nicht vollständig getestet. Möglicherweise müssen Sie eine Prüfung mit is_tax( $taxonomies ) einschließen, damit es in den zugehörigen benutzerdefinierten Taxonomie-Archiven funktioniert.

6
sanchothefat