it-swarm.com.de

Benutzerdefiniertes Post-Plugin: Wo lege ich die Vorlage ab?

Ich schreibe ein benutzerdefiniertes Plugin für Posts. Einen Teil davon gebe ich über Shortcodes in die Vorlage aus. Für andere Teile ist jedoch eine benutzerdefinierte Beitragsvorlage erforderlich, und ich habe herausgefunden, wie die Vorlagenhierarchie für CPTs verwendet wird. Aber die benutzerdefinierte Vorlage ist im Theme enthalten, und ich denke, das Plugin sollte in sich geschlossen sein, zumindest zu Beginn.

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

Danke für Ihre Hilfe.

11

Was ist hier die beste Vorgehensweise?

Ich würde sagen, eine Kombination, die es dem Theme erlaubt, damit umzugehen und ein Standard-Plugin für Ihr Plugin bereitzustellen.

Sie können den single_template-Filter verwenden, um die Vorlage auszutauschen. Überprüfen Sie in Ihrem Rückruf, ob das Thema eine Vorlage für den Beitragstyp bereitgestellt hat.

<?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;
}

Diese Methode gefällt mir am besten. Kombinieren Sie dies mit der Bereitstellung eines Soundsatzes von "Vorlagen-Tags" (z. B. the_content, the_title), die alle benutzerdefinierten Daten unterstützen, die zu Ihrem Beitragstyp passen, und Sie geben dem Endbenutzer eine Menge Anpassungsmöglichkeiten sowie einige Soundstandards. Bbpress macht so etwas wirklich gut: Es schließt Benutzervorlagen ein, wenn es sie findet, und bietet viele Vorlagen-Tags.

Alternativ können Sie einen Rückruf mit the_content-Filter verwenden und nur 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;
}
8
chrisguitarguy

Sie können sich in template_include einhängen und Ihre Plugin-Datei zurückschicken, 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;
}

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

3
fuxia