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

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

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

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

Благодаря!

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

Вам нужно использовать фильтр 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; } 

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