Plugin für benutzerdefinierte Post-Typen: Wo lege ich die Vorlage ab?

11

Ich schreibe ein benutzerdefiniertes Plugin vom Typ Post. Ein Teil davon gebe ich über Shortcodes in die Vorlage aus. Andere Teile benötigen jedoch eine benutzerdefinierte Post-Vorlage, und ich habe herausgefunden, wie die Vorlagenhierarchie für CPTs verwendet wird. Aber die benutzerdefinierte Vorlage befindet sich im Thema, und ich denke, das Plugin sollte zumindest in sich geschlossen sein.

Was ist hier die beste Vorgehensweise? Wie fügen wir Vorlagendateien in ein CPT-Plugin ein? Können Sie mir besonders gute Beispiele dafür nennen?

Danke für Ihre Hilfe.

NotoriousWebmaster
quelle
1
Mögliches Duplikat von benutzerdefinierten Beitragstypvorlagen aus dem Plugin-Ordner?
Johannes Pille
1
Ich bin mir nicht sicher, ob es sich um ein Duplikat handelt, aber es ist eine subjektive Frage. Für mich wäre es die beste Vorgehensweise, das Thema damit umgehen zu lassen. Best Practices für andere wären, das Plugin vollständig in sich geschlossen zu machen.
Chrisguitarguy
@JohannesPille Ich habe gesucht, bevor ich gefragt habe. Aber danke für den Link. Ich werde es untersuchen.
NotoriousWebmaster
1
@chrisguitarguy Einverstanden. Mein Problem damit, dass das Thema damit umgehen kann, ist, dass wir, wenn wir das Thema wechseln, einige Anpassungen vornehmen müssen, um das Plugin aufzunehmen. Andernfalls verlieren wir das Zeug, das das CPT der Party bringt.
NotoriousWebmaster

Antworten:

8

Was ist hier die beste Vorgehensweise?

Ich würde sagen, eine Kombination aus dem Thema und der Bereitstellung eines Standardwerts für Ihr Plugin.

Mit dem single_templateFilter können Sie die Vorlage ausschalten. Überprüfen Sie in Ihrem Rückruf, ob das Thema eine Vorlage für den Beitragstyp bereitgestellt hat. Wenn dies der Fall ist, tun Sie nichts.

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

Ich mag diese Methode am besten. Kombinieren Sie es mit der Bereitstellung einer Sound - Set von „Template - Tags“ (zB. the_content, the_title) , Dass die Unterstützung , was benutzerdefinierte Daten , die zusammen mit Ihrem Beitrag Art geht und Sie dem Endbenutzer eine Menge Anpassung Kraft geben zusammen mit einigen Soundeinstellungen zurück . Bbpress macht so etwas wirklich gut: Es enthält Benutzervorlagen, wenn es sie findet, und stellt viele Vorlagen-Tags bereit.

Alternativ können Sie einen Rückruf mit the_contentFilter verwenden und einfach den Inhalt selbst ändern.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}
chrisguitarguy
quelle
Ich stimme @toscho zu, dass es keine saubere Lösung gibt. Aber ich mag das Konzept, eine Reihe von Kategorie-Tags anzubieten. Ich vermute, dass ich in meinem Plugin letztendlich einen Themenordner mit einer CPT-Beispielvorlage haben werde, und empfehle Benutzern, ihn an ihre Umstände anzupassen. Ich mag auch den Filter the_content, weil er meinen Inhalt in das Layout des Benutzers einfügt. Ich kann beides implementieren und dem Benutzer erlauben, zu wählen, welchen Weg er mit einem Optionsschalter wählen möchte.
NotoriousWebmaster
3

Sie können template_includeIhre Plugin-Datei einbinden und zurückgeben, wenn die Anfrage Ihren Beitragstyp betrifft:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

Dies wird das Aussehen jedoch drastisch verändern. Es gibt immer noch keine saubere Lösung.

Fuxia
quelle
Ja, Sie haben Recht, es würde das Aussehen ändern, einschließlich Layout, Widgets und dergleichen. Für meinen Geschmack zu radikal. Aber danke.
NotoriousWebmaster