Можно ли определить шаблон для настраиваемого типа сообщения внутри плагина независимо от активной темы?

Я пишу плагин для управления данными о проектах с открытым исходным кодом. Я разработал объектную модель и успешно создал все пользовательские типы сообщений и таксономии, а также реализовал правильные возможности /роли, используя плагин Members , Соответствующие пользователи могут создавать, изменять и удалять свои собственные сообщения, а администраторы могут их одобрять, а также изменять и удалять сообщения кого-либо.

Моя проблема в том, что я хочу определить шаблон для одного проекта и для списка проектов (один и архив, я считаю, я никогда не работал с Wordpress на этом уровне), но я не хочу. Loop, чтобы полагаться на текущую тему, чтобы отобразить страницу для одного проекта или списка проектов. Если я использую тему TwentyTen, я хочу, чтобы она использовала мой шаблон плагина для этих пользовательских типов сообщений. Если я использую тему TwentyEleven, я все же хочу, чтобы она использовала мой шаблон плагина для этих пользовательских типов сообщений.

Я хочу, чтобы это подчинялось парадигме «это просто работает», но сейчас пользователи не могут просто отбросить папку в каталоге плагина - они должны добавлять соответствующие файлы в свою папку темы каждый раз при переключении тем. Я проверил иерархию шаблонов, и у меня есть правильные имена файлов, но они не используются Wordpress, если они находятся в папке плагина или в папке плагинов /шаблонов.

Спасибо!

7 голосов | спросил ZachM 19 J0000006Europe/Moscow 2012, 18:30:11

1 ответ


6

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

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

Я не полностью протестировал бит архива типа сообщения, вам может потребоваться включить проверку с помощью is_tax( $taxonomies ), чтобы заставить его работать по соответствующим архивам таксономии.

ответил sanchothefat 19 J0000006Europe/Moscow 2012, 20:05:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132