Пользовательский плагин типа поста: где я могу разместить шаблон?

11

Я пишу пользовательский плагин типа поста. Часть этого я вывожу на шаблон через шорткоды. Но другим частям нужен собственный шаблон публикации, и я выяснил, как использовать иерархию шаблонов для CPT. Но пользовательский шаблон находится в теме, и я думаю, что плагин должен быть автономным, по крайней мере, для начала.

Так какова лучшая практика здесь? Как мы включаем файлы шаблонов в плагин CPT? Можете ли вы указать мне особенно хорошие примеры того, как это делается?

Спасибо за вашу помощь.

NotoriousWebmaster
источник
1
Не уверен, что это дубликат, но это субъективный вопрос. Лучшая практика для меня - позволить теме справиться с этим. Передовой опыт для других - сделать плагин полностью автономным.
chrisguitarguy
@JohannesPille Я искал, прежде чем спрашивать. Но спасибо за ссылку. Я буду смотреть на это.
NotoriousWebmaster
1
@chrisguitarguy Согласен. Моя проблема с тем, чтобы позволить теме обрабатывать это, если мы переключаем темы, мы должны сделать некоторые настройки, чтобы приспособить плагин. В противном случае мы теряем то, что КПП приносит на вечеринку.
NotoriousWebmaster

Ответы:

8

Так какова лучшая практика здесь?

Я бы сказал, комбинация, позволяющая теме обрабатывать это и предоставление по умолчанию с вашим плагином.

Вы можете использовать single_templateфильтр, чтобы отключить шаблон. В вашем обратном вызове посмотрите, предоставила ли тема шаблон для типа поста, если он сделал, ничего не делайте.

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

Мне нравится этот метод лучше всего. Объедините это с предоставлением звукового набора «шаблонных тегов» (например the_content, the_title), которые поддерживают любые пользовательские данные, которые соответствуют вашему типу поста, и вы даете конечному пользователю много возможностей настройки наряду с некоторыми звуковыми настройками по умолчанию. Bbpress действительно хорошо справляется с такой задачей: включает пользовательские шаблоны, если он их находит, и предоставляет множество тегов шаблонов.

Кроме того, вы можете использовать обратный вызов с the_contentфильтром, и просто изменить материал в самом контенте.

<?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
источник
Я согласен с @toscho, что нет чистого решения. Но мне нравится идея предлагать набор тегов категорий. Я подозреваю, что в конечном итоге у меня в плагине будет тема папки с образцом шаблона CPT, и я рекомендую пользователям адаптировать ее к своим обстоятельствам. Мне также нравится фильтр the_content, потому что он включает мой контент в макет пользователя. Я могу реализовать и то, и другое, и позволить пользователю выбрать, какой путь выбрать с опцией переключения.
NotoriousWebmaster
3

Вы можете подключить template_includeи вернуть файл плагина, если запрос относится к типу вашего сообщения:

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

Но это резко изменит внешний вид. Там до сих пор нет чистого решения.

Фуксия
источник
Да, вы правы, это изменило бы внешний вид, включая макет, виджеты и тому подобное. Слишком радикально на мой вкус. Но спасибо.
NotoriousWebmaster